GroovyWebObjects

2007/03/30 (Fri) 22:07:46 JST

?SourceForge.jpにWOGroovyプロジェクトを登録しました。この文書の内容は古くなっています。

GroovyはJava用のスクリプト言語で、Javaと比べてかなり簡潔にコードを記述できます。 プロジェクトに大きな変更を加えることなくGroovyを手軽に使うには、GroovyスクリプトをJavaコードに埋め込む (http://tmaeda.s45.xrea.com/20040610.html) のが手っ取り早い方法です。 WebObjectsでGroovyを使えば、今は無き?WebScriptのような感じで(使ったことありませんが)アプリケーションを作れそうです。

前回はJavaクラスをGroovyスクリプトに置き換える方法でGroovyをWebObjectsで使えるようにしましたが、今度はProject WONDERの動的コンパイルを実現する?ERXCompilerProxyクラスをGroovy用に拡張してみました。

インストールや使い方は付属のドキュメントを参照してください。 現時点では Mac OS X + Xcode の組み合わせでのみ動作します。

Groovyではない(できない)こと

WebObjects Builder

WebObjects BuilderはGroovyスクリプトを解析できないので、キーやアクションを編集することができません。 Groovyスクリプトには手動でインスタンス変数やメソッドを定義することになります。

アプリケーションテンプレート

Groovyを使うための準備やビルドの手順をテンプレートにすればもっと楽になるはずですが、WebObjectsのアプリケーションテンプレートをうまく作ることができませんでした。

NSArrayとNSDictionary

Groovyでは多くのスクリプト言語と同じく、配列とハッシュを

array[0]
hash["key"]="value"

などのように簡潔な記述で扱うことができます。実体はJavaの標準ライブラリである?ArrayListと?HashMapで、[]ならgetAt()、[]=ならputAt()のメソッドにマッピングされます。

しかしWebObjectsではNSArrayとNSDictionaryという独自のコレクションクラスが使われており、上記のマッピング用メソッドは当然ありません。 Objective-CやRubyなら既存のクラスにメソッドを追加できますが、Javaだとそれができません。 サブクラスを作ったりGroovyのメソッド起動コードに手を加えて試してみたものの、Groovy本体を改造しない限り、Groovyの配列・ハッシュリテラルのように扱うのは困難なようです。

WebObjects 5.2.4からList, Mapインターフェースが実装されています。

Groovyでは既存のクラスにメソッドを追加することもできるのですが、毎度コードをクロージャで囲む必要があるのが面倒です。

JavassistによるWebObjectsの拡張

Javassistを使うとバイトコードを編集して既存のクラスを拡張することができます。 実はJavassistを使ってWOのフレームワークを拡張するツールも今回作ったのですが、ライセンス違反の恐れがあるため配布を見合わせることにしました。

どうしても試してみたい!という方はsuzuki@spice-of-life.netまでメールをいただければソースコードをお渡しします。 GroovyのWish Listに「既存のクラスの拡張」があるようで、これが実装されればもっと楽にGroovyにWebObjectsが使えるのですが。

参考リンク


Inverse Pages: WODownloads