seraphyの日記

日記というよりは過去を振り返るときのための単なる備忘録

調べ物

今日は、いろいろ調べ物。

  • MayaaWicketって目指しているところは同じなのか。
    • Wicketのほうがシンプルな感じ?。mayaaファイルみたいなものも不要みたいだし、普通にJAVA側からプロパティをいじる感じで制御してゆくみたい。
    • Mayaaには、Rhinoのようなスクリプト言語を使う、その柔軟性がヤリスギ。JAVAではなくJavaScriptに移動させただけで、結局、複雑性を緩和していることにはならないのでは、と批判する向きもあるようだ。
  • JPAJavaEEだけの特権ではなくなってSEでも使えるらしいので、TopLink Essentialsをダウンロードして試そうと思いたつ。
    • だが、インストールまでにはいたらず。あす以降に持ち越し。
  • NetBeans5.5がリリースされていたのでVista(RC2)にダメもとで入れてみる。
    • 5.5RC1/RC2ともにVistaではまともにインストールできなかったが、正式版では、何事もなく、さっくりしっくりと、うまくインストールできた。
    • しかし、Enterprise Packは、GUIまわりの認識エラーでインストーラが進まず。(使わないからいいけど。)
    • 動作そのものは、JDK6-rcも認識しているし、普通にSun Java System Application Server 9PEも制御できるので、とくに問題なさげ。

JDK6のScriptingでjythonを呼び出してみる(その2)

Scriptingはとくに進展なし。

ScriptEngineのScriptContextまたはBindingsにJavaのオブジェクトを渡すとスクリプトの中で利用することが可能であり、その逆も可能。
なので、異なるスクリプトエンジンでScriptContextで定義されたオブジェクトを利用するためには、とりあえず、JAVAオブジェクトだと思わせておけば確実にできそうな気がする。
(めんどくさく、回りくどいが、他に方法もないような気もする。)
ということでテスト。


JavaScript上でRunnableを実装したオブジェクトを作成し、それをpythonで実行。

    public static void main(String[] args) throws Exception {
        final ScriptEngineManager engMgr = new ScriptEngineManager();
        final ScriptEngine eng1 = engMgr.getEngineByName("javascript");
        eng1.eval("obj = new java.lang.Runnable() { run: function() { print('hello, world!');}}");
        
        final ScriptEngine eng2 = engMgr.getEngineByName("python");
        eng2.setContext(eng1.getContext());
        eng2.eval("obj.run()");
        
        final Runnable job = (Runnable) eng1.get("obj");
        job.run();
    }

出来て当たり前。


逆パターン。
pythonでRunnableを実装したオブジェクトを作成し、JavaScriptで実行。

    public static void main(String[] args) throws Exception {
        final ScriptEngineManager engMgr = new ScriptEngineManager();
        final ScriptEngine eng1 = engMgr.getEngineByName("python");
        final StringBuilder scr = new StringBuilder();
        scr.append("from java.lang import Runnable\n");
        scr.append("class MyClass(Runnable):\n");
        scr.append("\tdef run(self):\n");
        scr.append("\t\tprint 'hello, world 2!'\n");
        scr.append("obj = MyClass()\n");
        eng1.eval(scr.toString());
        
        final ScriptEngine eng2 = engMgr.getEngineByName("ecmascript");
        eng2.setContext(eng1.getContext());
        eng2.eval("obj.run();");

        final Runnable job = (Runnable) eng1.get("obj");
        job.run();
    }

これも出来て当たり前。


ひねりが足りず知性も感じられない気がするが、とりあえず動いたので良しとする。


今日の成果。

といった、基本的な使いかたを試すことができたので満足とする。