Velocityメモ その2
・Java コードからの移植時、変数名には $ をつけるべし
Javaコードから Velocity のテンプレートに移植する際、変数の参照に全て $ を付けるのを忘れないように。
特にメソッド呼出がネストしているときに忘れやすい。
・変数名は Java コードと同じにすべし
Java で statistic という変数名だったのをテンプレート内では stats という変数名で扱っていてちょっと混乱した。
・Context のチェーンの動作
Context をラップして、セットした場合、inner context には値はセットされない。
不変の変数は inner context にセットしておくべし。
ただし、Map を引数にして Context を生成した場合、セットした変数は全部そのMapに格納される。
ちょっとクセのある動作なので注意。
Context Chaining
どうしたらスレッドダンプの解析結果を見やすく表示できるか模索中

Javaコードから Velocity のテンプレートに移植する際、変数の参照に全て $ を付けるのを忘れないように。
特にメソッド呼出がネストしているときに忘れやすい。
・変数名は Java コードと同じにすべし
Java で statistic という変数名だったのをテンプレート内では stats という変数名で扱っていてちょっと混乱した。
・Context のチェーンの動作
Context をラップして、セットした場合、inner context には値はセットされない。
不変の変数は inner context にセットしておくべし。
ただし、Map を引数にして Context を生成した場合、セットした変数は全部そのMapに格納される。
ちょっとクセのある動作なので注意。
Context Chaining
どうしたらスレッドダンプの解析結果を見やすく表示できるか模索中
BEA セキュリティアドバイザリ
色々出てますね。
・dev2dev > Advisories and Notifications
http://dev2dev.bea.com/advisoriesnotifications/
日本語はまだ。
・dev2dev Home > リソース > セキュリティアドバイザリ
http://www.beasys.co.jp/dev2dev/resourcelibrary/advisoriesnotifications/
追記:日本語版もでました
・dev2dev > Advisories and Notifications
http://dev2dev.bea.com/advisoriesnotifications/
日本語はまだ。
・dev2dev Home > リソース > セキュリティアドバイザリ
http://www.beasys.co.jp/dev2dev/resourcelibrary/advisoriesnotifications/
追記:日本語版もでました
Velocityメモ
侍ではスレッドダンプの解析結果をHTMLで書き出してJEditorPane に表示させてます。
現在のところjava.text.MessageFormatで無理矢理HTMLを構築する仕組み。
HTMLのレイアウトに沿ってJavaでゴリゴリとコードが書いてあるので、非常に美しくないです。
レイアウトに変更があったら Java コードを書き換えないといけないのは非常にメンテナンスしづらい!
HTMLを作るならJSPでしょ、って思うけど侍は当然サーブレットコンテナを搭載していないので無理。Jetty を内蔵してごにょごにょ、っていう手もあるけどそれはまた今度。
というわけでちょっと Velocity を触ってみました。
Jakarta Velocity
いまさら説明する必要はないかもしれないけど Velocity はテンプレートエンジン。HTMLなり自動送信するメール文面なりをJavaアプリケーション内でJavaコーディングレスで生成するというもの。
使い方は非常に簡単。ドキュメントも明快なので特に迷うことはなかったです。
とりあえずバイナリをダウンロードしてきて velocity-dep-1.4.jar をクラスパスに通すだけ。これには依存しているライブラリが全部入っていて505kb。
ちょっとサイズが問題になる場合はvelocity-1.4.jar と commons-collections だけでも動く。といっても150kbくらいしか節約できないけど。
Javaからどのように Velocity を呼び出すかは developer guide を、テンプレートの書式についてはuser guideを見れば良い。
書式についてコマカーイ話は VTL referenceを。
テンプレートにエラーがあった場合、パース時に例外が発生するけれども NullPointerException とかで意味不明。
こんなときはデフォルトでカレントディレクトリに書き出される velocity.log を見ればよい。
侍で読み込ませておけば Ok ね。
今回ちょっと迷ったのは以下の二点。
1. オブジェクトの null チェックは?
#if ($変数名) で判別可能。オブジェクトが null でなければ true と同等に判定される。JavaScript と同じね。
2. foreach 内でインデックスを取得するには?
#set ($i = 0)
#foreach .....
処理
#set ($i = $i + 1)
#end
とかやっても良いけど実は $velocityCount という変数が自動的に内部でアサインされる。
デフォルトではインデックスは1から始まるので注意。設定で0から始まるようにもできるらしいけど今回は必要なかった。
正確には計っていないけど全くといって良いほどパフォーマンス低下はなかった。
同時にいままでhtmlをファイルに一旦書き出していたのをやめて JEditorPane に直接セットするようにしたのでむしろパフォーマンス向上!
というわけで次のアップデートでは Velocity が含まれるのでサイズが倍くらいになる予定。といっても600〜700k程度ですが。
現在のところjava.text.MessageFormatで無理矢理HTMLを構築する仕組み。
HTMLのレイアウトに沿ってJavaでゴリゴリとコードが書いてあるので、非常に美しくないです。
レイアウトに変更があったら Java コードを書き換えないといけないのは非常にメンテナンスしづらい!
HTMLを作るならJSPでしょ、って思うけど侍は当然サーブレットコンテナを搭載していないので無理。Jetty を内蔵してごにょごにょ、っていう手もあるけどそれはまた今度。
というわけでちょっと Velocity を触ってみました。
Jakarta Velocity
いまさら説明する必要はないかもしれないけど Velocity はテンプレートエンジン。HTMLなり自動送信するメール文面なりをJavaアプリケーション内でJavaコーディングレスで生成するというもの。
使い方は非常に簡単。ドキュメントも明快なので特に迷うことはなかったです。
とりあえずバイナリをダウンロードしてきて velocity-dep-1.4.jar をクラスパスに通すだけ。これには依存しているライブラリが全部入っていて505kb。
ちょっとサイズが問題になる場合はvelocity-1.4.jar と commons-collections だけでも動く。といっても150kbくらいしか節約できないけど。
Javaからどのように Velocity を呼び出すかは developer guide を、テンプレートの書式についてはuser guideを見れば良い。
書式についてコマカーイ話は VTL referenceを。
テンプレートにエラーがあった場合、パース時に例外が発生するけれども NullPointerException とかで意味不明。
こんなときはデフォルトでカレントディレクトリに書き出される velocity.log を見ればよい。
侍で読み込ませておけば Ok ね。
今回ちょっと迷ったのは以下の二点。
1. オブジェクトの null チェックは?
#if ($変数名) で判別可能。オブジェクトが null でなければ true と同等に判定される。JavaScript と同じね。
2. foreach 内でインデックスを取得するには?
#set ($i = 0)
#foreach .....
処理
#set ($i = $i + 1)
#end
とかやっても良いけど実は $velocityCount という変数が自動的に内部でアサインされる。
デフォルトではインデックスは1から始まるので注意。設定で0から始まるようにもできるらしいけど今回は必要なかった。
正確には計っていないけど全くといって良いほどパフォーマンス低下はなかった。
同時にいままでhtmlをファイルに一旦書き出していたのをやめて JEditorPane に直接セットするようにしたのでむしろパフォーマンス向上!
というわけで次のアップデートでは Velocity が含まれるのでサイズが倍くらいになる予定。といっても600〜700k程度ですが。