makotan _at_ gmail dot com

Compiler

あんまりにもDaoUtilがちいちゃかったので・・・
まず、XPDLをOOUOReaderっていうSAXベースで独自の読み込みライブラリを使って読み込んで内部構造に変換
そのあと、FreeMarkerっていうテンプレートエンジンを使ってJavaのコードに変換
Janinoっていうランタイムのコンパイラを使ってJavaのクラスに変換
できあがったクラスをS2のouterコンポーネントとして最終仕上げをS2に依頼
こんな流れ。
ちなみに、コンパイル対象になってるのはいくつかあるけど普段使うのはProcessorだけ。
まぁこの辺の理由は追々判るんじゃないかな〜書くのに飽きなければ(w


で、ごくまれに気がついた人から聞かれるのがOOUOReaderの名前の由来(w
元々今のぶりを作る前に実験的に
・動的コンパイラを使って処理速度の確保
XMLのReaderの開発
っていうのを色々実験してて、その結果なんだけど
XMLのReaderの開発は個人的にやっててそのときの名前が「オオウオ」だったのが理由
ちなみに、ぶりの次の名前はオオウオだったのでその名前。そのまま開発が進んでたらぶりって呼ばずにオオウオだったのかなぁ〜ぶりのままで良かった気はするけどね(w


FreeMarkerで生成する元のテンプレートファイルはsrc/main/resources/ftlの下にあって
ログでテンプレートを出力したりできるので、どうしても生成したコードを見たい場合は
org.escafe.buri.compilerをDEBUGで出力してみると結構凄いモノが見れるかも


そういえば、FreeMarkerから出力してるソースコードに明らかに呼び出されないメソッドがあって
それはAOPを使ってログを出力したいが為だけのダミーメソッドだったりする
エンジンの中にトレース設定してログを見てると綺麗に出せる理由はこの辺にあるけど、誰も気がついてくれないので自ら書いた(笑)
そのダミーメソッドが呼び出してるふりをして本当のは別の所に隠す機能とか作り込んでるんだけどね
あっ!Process相手にトレース設定できるってほとんど言ったこと無いや!!
buriSimple.diconの上の方にAOP書いてて(これはどこに書いても良いんだけど)で、AbstBruiExeProcessDataAccessにaddProcessAOPってあるからそこにargで追加、あとaddConditionAOPってのもあって、これは条件式のチェックとかに使えるよ。


Janinoはあんまりネタがない・・・あんまり使ってる人も知らないし(w
普通のJavaのクラスを継承したり出来るのがちょっと便利
あと実はインタプリタモードとかもあるからスクリプトっぽくJavaのコードを使えるよ。って事で