jsp の動的 include について

いつも 静的 include (<%@ include path="foo.jsp"%>)だったが、初めて動的 include (<jsp:include /> を試してみた。
– 静的なものと違い, ローカル変数, メソッド定義, import 構文はそれぞれに独立
– page スコープの属性は互いに参照できない(pageContext の attribute など)
– request スコープ以降のものは参照可能。
なので影響範囲を最小にしつつ参照するには request スコープを使うとよい。
– jsp:param (ex. <jsp:param name=”foo” value=”123″ />)はリクエストパラメータ(request.getParameter(String))になる。
– jsp:include 呼び出しと通常のリクエストとを区別するには request スコープでやり取りするとよさそう。

Tomcat 5.x + JNDI の基本設定メモ

毎回なぜかつまづいていた JNDI の設定が今回はすんなりいったのでメモ。
 
– foo という Web アプリケーション(ex. “TOMCAT_HOME/webapps/foo”)の中に, jdbc/privateDB という JNDI リソース名を, MySQL 公式で手に入る JDBC コネクタを使ってローカルの MySQL サーバの, foo_db というデータベースに, ユーザ user_foo, パスワード booboo で接続するリソースを割り当てるには, META-INF/context.xml をたとえば次のように設定する。

<Context path=”/foo” docBase=”foo”
                        debug=”5″ reloadable=”true” crossContext=”true”>
        <Resource name=”jdbc/privateDB” auth=”Container”
        type=”javax.sql.DataSource” driverClassName=”com.mysql.jdbc.Driver”
        url=”jdbc:mysql://localhost:3306/foo_db”
        username=”user_foo” password=”booboo” maxActive=”20″ maxIdle=”10″ maxWait=”-1″/>
</Context>

このとき server.xml では一切このリソースについて触れていない。server.xml とか conf/Catalina/localhost/foo.xml とかで複数の箇所で記述してしまうとうまく動かないのかも。

5.x でポートは開いているのに何も応答がない

作業用ディレクトリ(work)への書き込み権限がないと処理待ちでこうなる。
管理者と一般ユーザを分離して使っているWindows 環境(Windows XP + Cygwin) でなって, はまってしまった。
 
UNIX 系列な OS と Windows では管理者権限の扱いが微妙に違うので気を付けないとすぐこうなる..
 
全ての親ディレクトリについてフルコントロール権限を管理者に与え、Tomcat インストールディレクトリ以下の所有者を管理者にし、管理者の状態で実行しなおして解決。
あまりよくなさそう。

Security Code Guidelines

– セキュアなコードを書くための、 Sun 公式ガイドライン。
Eclipse の PMD プラグインで自動チェックしてくれるみたい。
<http://java.sun.com/security/seccodeguide.html#gcg>
– Security Code Guidelines
<http://pmd.sourceforge.net/>
– PMD 公式
Eclipse(2.x/3.0.x/3.1.x) 用プラグインをインストールするときは以下の URL を指定すればよい。
 http://pmd.sourceforge.net/eclipse
<http://www.eclipsewiki.net/eclipse/?PMD>
– EclipseWiki – PMD
使えるルールと、なぜいけないかという理由が日本語でまとめられている。

OpenOffice.org が GetStorage .. というエラーで起動できなくなる

OOo 起動中に電源ごと落ちて起動したあとに次のエラーがでて OOo 起動しなくなった。

GetStorage, name : “No Content !”

とりあえず検索したところ、OOo Forum で同じ現象について回答で次のような説明があった。
<http://www.oooforum.org/forum/viewtopic.phtml?p=17054#17054>

OOo stores configuration files into Two layers.
1. The SHARE layer.
2. The USER layer.
 
The User configuration layer holds any settings that are DIFFERENT from the Shared configuration. For example, if you change your color scheme, or default font, the change is saved into the user layer.
 
These two layers are stored in directories of files. It is different on Linux and Windows. You don’t say which you are on, so I’ll explain both. Please read both, it will give you insight.
 
On Linux, for example, suppose OOo is installed in the following path…
 
/opt/OpenOffice1.1.0
 
Then the System configuration layer is in the folder….
 
/opt/OpenOffice1.1.0/share
 
And the User configuration layer is in each individual user’s home directory….
 
/home/danny/OpenOffice1.1.0/user
 
 
 
On Windows, suppose OOo is installed to
 
C:\Program Files\OpenOffice1.1.0
 
Then the System configuration layer is stored in….
 
C:\Program Files\OpenOffice1.1.0\share
 
And the user configuration layer is stored in….
 
C:\Program Files\OpenOffice1.1.0\user
 
(以下略)

ここまで読んで User 層の変更があった設定を戻せばいけるんじゃないかと思い、最後に動いていたあたりに変更があったものを削除したら問題なく動くようになった。

$ # Windows なので Cygwin で作業
$ cd d:/OpenOffice.org1.1.4/
$ touch -t 071208050 /tmp/timestamp.tmp # 最後の変更直前くらい。
$ for i in `find . -type f -newer /tmp/timestamp.tmp`; do echo $i && mv $i /tmp/;done
$ # rm でもいいけどいざというとき戻せるように mv

ちなみに該当したのは次のファイル

./user/config/inethist.dat
./user/registry/cache/org.openoffice.Setup.dat
./user/registry/data/org/openoffice/Office/Common.xcu
./user/registry/data/org/openoffice/Setup.xcu

Canvas.processEvent の使い方

– パラメータの意味について(とりあえず Doja 2.x では)詳しく書かれておらず、ちょっと試行錯誤してしまったのでメモ。

public void processEvent(int type, int param);
    低レベルイベントが通知されたときに呼ばれるメソッドです。
     
    パラメータ:
        type – イベントのタイプが渡されます。
        param – イベントのパラメータが渡されます。 パラメータの意味はイベントによって異なります。 パラメータを持たないイベントの場合は、0が渡されます。

– type : Display の定数のうち、xxxイベントと説明されているもの。
例えば
Display.KEY_PRESSED_EVENT (=0) がキーを押した時に呼ばれ、
Display.KEY_RELEASED_EVENT (=1) がキーを離した時に呼ばれる。
 
– param : キーイベントの時は Display.KEY_xxx のいずれかが入る。同時押しは考慮にいれず、実際にトリガを引いたキーの値が与えられる。
Canvas.getKeypadState() とは全く形式が異なるので注意。

xargs が標準入力が空のときにも実行されてしまう

find . -type f | xargs wc -c

など xargs を使うときに、標準入力が空だと実行されないのかと思っていたら、標準入力がなくても一度は必ず実行するというのがデフォルトだった。このため、上の結果は wc -c < /dev/null のようにとられて 0 になる。
これを避けるには、 -r オプションを使う。

xargs -r <command>

上の例だと次のようにすればよい。

find . -type f | xargs -r wc -c

バイナリエディタ

– 昔から PowerWitch The Royal というバイナリエディタを使っている。高機能でフリー。ただしもれなくバニーさんがついてくる。スクラッチパッド編集で使いたくなったので久しぶりにダウンロードしてみた。
<http://www.nx.sakura.ne.jp/~elysium/software/pwtr/>
– PowerWitch The Royal