-BSFとRhinoとSeasar2

昨日、MozillaJavaJavaScriptエンジン「Rhino」1.5R5をApacheの「BSF」2.3.0経由で動作させるコードを書いてましたが。。。どういうことでしょう?BSFからRhinoのメソッドコール(JavaScriptEngine#eval()から、Context#getDebuggableEngine()をコール)するところでNoSuchMethodExceptionです。Rhinoのソースを見ても該当メソッドがありません。バージョン不整合かということで、手に入るRhinoとBSFを集めてソースの該当部を見ましたが、いける組み合わせが発見できませんでした。無念だ。情報もとむ。
結局、BSF経由を止めて、Rhinoを直接コールするようにしました。RhinoはNetscapeの偉大なる遺産、C製のJavaScriptエンジン「SpiderMonkey」をJavaで書き直したバージョンです。SpiderMonkeyWindowsCEへの移植と日本語を通すためのパッチ開発をしたうえでWindowsCE向けWEBサーバー製品に組み込んだことがあったので、RhinoのAPIは馴染みがあるものでしたから、さくっと動作。
RhinoはJavassistやCGLlibといったものより早くにバイトコードエンジニアリング機能を実現していて、スクリプトを一度Javaバイトコードにダイナミックにコンパイルしています。インタープリタとしても動作しますが、どちらでも動作速度はそこそこ速いです。蛇足ながらSpiderMonkeyにちょっと触れると、これはNetscapeが世界で初めて作ったJavaScriptエンジンで、延々と最新のMozillaにまで受け継がれている、まさに元祖。JavaScriptの歴史そのもので誰もがお世話になったに違いないエンジンです。歴史的なJavaScriptのバグの内幕がソースコードから読み取れます(笑)。
前にBLOGでも紹介した、Seasar2のAdviceとして、XML中に書かれたスクリプトをインターフェイスメソッドに実装する仕組みを、スクリプトに独立なものに書き直しました。今は、GroovyとRhinoに対応しています。あと、スクリプトを書くのをXMLだけでなく、Excelにも書けるようにする予定。このExcel対応以外は完成しています。ただ、需要があるのかが謎です。スクリプトエンジンはBSFをあきらめた今、JythonとかJRubyに対応させようかと思いましたが、Rhino以外は自分にも需要がないので思い直しています。
Excel対応ためしてみました。実装はなんてことありませんが、実用性はいかに?Excelのセルにスクリプト書きにくいです。ダメだこりゃ。