Java スクリプト API
今日は、いつかの代休で会社はお休みで暇で暇で暇だったから、
Java スクリプト APIをちょっと触ってみた。
動機。
Javaで作った某ツールを自分だけでメンテナンスするのが辛くてみんなを巻き込みたい。
みんなにコンパイル環境を作ってもらうのが煩わしい。(jdkとantを入れるだけだが…)
コードの一部をスクリプト化したら簡単にみんなでメンテナンスできる!?
Sunのjdk6標準で、JavaScriptと連携できるようになっているようで、
JavaのインタフェースをJavaScriptで実装する簡単なテストをしてみた。
Baseは独自インタフェースで、MyDataも独自クラス。
// こっち java 側 (周りは省略)
ScriptEngineManager mng = new ScriptEngineManager();
ScriptEngine engine = mng.getEngineByName("JavaScript");
engine.eval(new FileReader("test.js"));
Object obj = engine.get("obj");
Invocable inv = (Invocable)engine;
Base b = inv.getInterface(obj, Base.class);
MyData d = b.getData();
d.print();
// こっち JavaScript 側 (test.js)
importClass(Packages.MyData);
var obj = new Object();
obj.getData = function(){
var data = new Array(5);
data[0] = "data0";
data[1] = "data1";
var rval = new MyData(data);
return rval;
}
うん、まぁ動くけど。(IcedTeaだと動かなかったりして・・・。)
ただ、自分が想定している箇所だけスクリプト化してもあまりうれしくない気がしてきた。
範囲を広げると、全部スクリプトで書けばいいんじゃん?って感じも。
なんか、本末転倒だなぁ。もともとのツールの設計がよくないんだな。
あきらめてドライブでもしてこよ・・・。