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

非互換, 機種による制限のある機能

– 利用するメソッドが本当に全機種対応しているかどうか各機種オプションAPI・拡張API実装状況を見たほういい。
対応していない場合は利用を避けるか、

System.getProperty(“microedition.platform”).indexOf(“N504”) >= 0

とかして端末によって処理を分けること。
 
– 以下公式の iアプリ作成上の注意点より端末固有の制限。
– N504i(S) では Graphics.drawString() は半角 33 文字までしか描画されない。
– N504i(S) では ScratchPad クローズ処理は
– P504i(S) では扱う画像の一辺の長さは 256 ピクセルまで。
– P504iS では同様に 512 まで。
– F504i では Connector.open() に渡す URL は 256 バイトまで。
– F504iS では同様にクエリ以外が 255 バイトまで、クエリ部が 512 バイトまで。
– F504i と SO504i ではキーを押したまま(key press イベント発生中)システムのポップアップメッセージ(iモード接続中など)が表示されると Canvas.getKeypadState() の結果が残る。回避するために、ポップアップが立ち上がる処理のトリガはキーリリースにする。
– D504i では(Canvas.processEvent(), Canvas.getKeypadState() 等を使った低レベルキーイベント処理で)一部のボタン同士の同時押しを受け付けられない。(1,2,3), (4,5,6), (7,8,9), (*,0,#) のそれぞれは同時押しができない(ex. 1,2 はだめ)。
– SO504i では MediaImage オブジェクトは use() で有効になることができるのは 255 個まで。
– SO504i では時刻情報処理で 1 時間につき約 3.5 秒の割合で遅れる。正確には経過時刻に対し 0.09756% 遅れる。
– D2101V ではサマータイムが有効になっているため 3月の最終日曜の 10:00 から 10 月最終日曜の 11:00 まで +1:00 となる(10:00 が 11:00 になって始まり、11:00 が 10:00 になって終わる)。