RHINO

link: OS/2 めもらんだむ - Rhino 1.6R6 (download)

http://d.hatena.ne.jp/Orca/20070730/p1 メモ。あとで落としてみよう。

あとで読む

http://www.mozilla-japan.org/rhino/doc.html 更新されたっぽいので。「最適化」とか目を通しとこう。

ScriptTask

http://ant.apache.org/manual-beta/OptionalTasks/script.html 知らなかったなー。今度使ってみよう。

JMX+Rhino

とりあえずアイデアだけ。 あとで実装してみる。

Scopes and Contexts

http://www.mozilla.org/rhino/scopes.html あとで読む。 ふと気になったけど、Cotext.exit()ってマルチスレッドで実行して大丈夫なのかな?

Rhino 1.6R4

http://www.mozilla-japan.org/rhino/download.html たいした変更はなさそう。

RhinoContainerBuilder

NanoContainerの使い方がよく分からなかったんで、作成。 Mockが作りやすくて、便利便利。 public class RhinoContainerBuilder { public static MutablePicoContainer build(InputStream in, String filename, Map props) throws IOException { MutablePico…

Rhino 1.6R4RC1

ftp://ftp.mozilla.org/pub/mozilla.org/js/ (via OS/2 めもらんだむ) なんかアップデートの日だなー。 変更点が、よくわかんない…

勝手に実装?

http://d2.hatena.ne.jp/winebarrel/20060526#p2 interfaseの引数にfunctionを渡すと、勝手に実装してくれるみたい。 定義してあるメソッドがひとつだけだから、実装されたのかなぁ? メソッドが複数定義してあったらどうなるんだろ? #!/usr/bin/env rhino …

JscTask

しつこくRhinoネタ。 タスク本体。 public class JscTask extends Task { protected String srcdir = null; public void setSrcdir(String srcdir) { this.srcdir = srcdir; } protected String destdir = null; public void setDestdir(String destdir) { t…

org.mozilla.javascript.Wrapper

http://www.mozilla.org/rhino/apidocs/org/mozilla/javascript/Wrapper.html 結構、いい加減な情報を書いてしまってるな…Scriptableを実装するときは、一緒に実装したほうがよいかもです。 Javaのメソッドを呼び出すとき、unwrap()の戻り値が引数として渡さ…

WrapFactory

http://www.mozilla.org/rhino/apidocs/org/mozilla/javascript/WrapFactory.html Java→jsでラッピングしてくれるクラスかな? あとで実験してみよう。

WrapFactoryの実験

こーゆークラスを定義して public class Foo { public void func() { Context.getCurrentContext().setWrapFactory(new WrapFactory() { public Scriptable wrapNewObject(Context arg0, Scriptable arg1, Object arg2) { return new ScriptableObject() { p…

Rhino 用例

http://www.mozilla-japan.org/rhino/examples.html メモだけ。

WrapFactory.java

http://lxr.mozilla.org/mozilla/source/js/rhino/src/org/mozilla/javascript/WrapFactory.java

アレとか

http://lxr.mozilla.org/mozilla/source/js/rhino/src/org/mozilla/javascript/ScriptableObject.java#1181 http://lxr.mozilla.org/mozilla/source/js/rhino/src/org/mozilla/javascript/FunctionObject.java#278

コレとか

http://lxr.mozilla.org/mozilla/source/js/rhino/src/org/mozilla/javascript/NativeJavaMethod.java#145 http://lxr.mozilla.org/mozilla/source/js/rhino/src/org/mozilla/javascript/NativeJavaMethod.java#232

hasInstance()

http://www.mozilla.org/rhino/apidocs/org/mozilla/javascript/Scriptable.html#hasInstance(org.mozilla.javascript.Scriptable) Scriptableの件の追記ってことで。 The instanceof operator.The JavaScript code "lhs instanceof rhs" causes rhs.hasInst…

prototype.js

version 1.5.0_rc0なら、880行目以降をコメントアウトすれば使えるみたい。

ScriptableなMap

Javaのクラスがこんな感じ。 hasInstance()の意味がよく分からなかった。 public class JsMap extends AbstractMap implements Scriptable { private Set _entrySet = new LinkedHashSet(); public Set entrySet() { return _entrySet; } public Object put(…

Proxyでmethod_missing

いろいろ手を考えてみる。 こんなクラスを定義して public class Foo { public static Scriptable getJsObj() { return (Scriptable) Proxy.newProxyInstance(Foo.class.getClassLoader(), new Class { Scriptable.class }, new InvocationHandler() { publi…

ってゆーか、Proxyを使わなくても

こんな感じで public class MethodMissing extends ScriptableObject { private Function handler = null; public MethodMissing(Function handler) { this.handler = handler; } public Object get(final String name, Scriptable o) { return new BaseFunc…

JavaBeanのプロパティを調べる

var bean = new FooBean();for(var i in bean) { if(!i.match(/^(set|get)/)) print(i); }まあ、プロパティ以外も出てくるけど。

動的に実装

ヒアドキュメント使えると、実用的かも。 public static void main(String[] args) { List list = (List) impl(List.class, "{get: function() {return 1}}"); System.out.println(list.get(0)); }public static Object impl(Class clazz, String src) { Con…

起動スクリプト

外部のライブラリが読み込めないな…と思ったら、jarファイルから起動しているせいだった。 #!/bin/sh java -jar /usr/local/rhino/js.jar $*次のように修正。 #!/bin/sh java org.mozilla.javascript.tools.shell.Main -opt -1 $*前にも同じミスをしたのでメ…

サーブレットで継続

どうもスクリプトをコンパイルすると継続がうまく動かないようなので、Javaのサーブレット+JavaScript(未コンパイル)の2段構えにしてみた。 サーブレットは以下の通り。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import or…

継続実験

いまいち理解していない… #!/usr/bin/env rhinofunction capture() { return new Continuation(); }function loop(interrupt) { var i; var cout; for(i = 1; i print("Value of i: " + i); if(i == interrupt) {cout = capture()} if(cout) return cout; } …

継続実験 その2

Continuationを投げてみた。動いてるけど、いいんだろうか… function capture() { throw new Continuation(); }function loop(interrupt) { var i; for(i = 1; i print("Value of i: " + i); if(i == interrupt) {capture()} } }try { loop(5); print("after…

RhinoServletで継続…失敗

継続後がうまくいかず画面真っ白。セッションからContinuationは取り出せてるようだけど…うーん。 function pause() { throw new Continuation(); }function service(req, res) { var sess = req.getSession(); var cout = sess.getAttribute("cout"); try {…

継続の話

http://www.kmonos.net/wlog/41.php#_2336040810