EOWithoutWO

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

WebObjectsなしでEOFを使う

現在のEOFはWebObjectsと統合されていますが、やり方によってはEOFを単体で使うこともできるようです。 海の向こうの情報とAPIを参考に試してみます。

ちなみに、Javaを含めほかの言語でもEOFライクなライブラリが開発されています。 いろんな環境でEOFを使いたいという方はEOFに触発されたものたち (EOInspiredTools)をどうぞ。

このページで使ったコードも置いておきます。http://www.spice-of-life.net/archive/EOFWithoutWO.tar.gz

必要なもの

当然ですが、WebObjectsとデータベースを用意してください。 EOFのモデルファイルは用意できているものとします。

ここでは以下の環境で試してみました。

この例で使うモデルファイルは、WebObjectsと一緒にインストールされるサンプルの?ThinkMoviesアプリケーションで使われているものです。 これらのモデルファイルは?JavaBusinessLogicフレームワークに含まれていますが、ここではモデルファイルのみを取り出して使います。

コンパイルと実行

コンパイルと実行には、フレームワークというバンドルに含まれているjarファイルが必要になります。 EOFを使うのに必要なjarファイルは以下の5つです。 Mac OS Xの場合、これらのフレームワークはすべて/System/Library/Frameworks以下にあります。

ここで使ったOpenBaseのJDBCドライバは以下にありますが、WebObjectsが対応しているデータベースなら、JDBCドライバのjarファイルをリンクする必要はないようです。

以上のjarファイルを、コンパイル・実行時にクラスパスに加えます。

(コンパイル)

javac -classpath ?
 "/System/Library/Frameworks/JavaFoundation.framework/?
 Resources/Java/javafoundation.jar?
 :/System/Library/Frameworks/JavaXML.framework/?
 Resources/Java/javaxml.jar?
 :/System/Library/Frameworks/JavaEOAccess.framework/?
 Resources/Java/javaeoaccess.jar?
 :/System/Library/Frameworks/JavaEOControl.framework/?
 Resources/Java/javaeocontrol.jar?
 :/System/Library/Frameworks/JavaJDBCAdaptor.framework/?
 Resources/Java/javajdbcadaptor.jar?
 :." Example.java

(実行)

java -classpath ?
 "/System/Library/Frameworks/JavaFoundation.framework/?
 Resources/Java/javafoundation.jar?
 :/System/Library/Frameworks/JavaXML.framework/?
 Resources/Java/javaxml.jar?
 :/System/Library/Frameworks/JavaEOAccess.framework/?
 Resources/Java/javaeoaccess.jar?
 :/System/Library/Frameworks/JavaEOControl.framework/?
 Resources/Java/javaeocontrol.jar?
 :/System/Library/Frameworks/JavaJDBCAdaptor.framework/?
 Resources/Java/javajdbcadaptor.jar?
 :." Example

コーディング

パッケージのインポート

foundation、eoaccess、eocontrolの3つのパッケージをインポートします。 これはWebObjectsアプリケーションでも同じですね。

import com.webobjects.foundation.*;
import com.webobjects.eoaccess.*;
import com.webobjects.eocontrol.*;

EOFの初期化

さて、ここからいよいよEOFを初期化しますが、あっけないほど簡単です。 EOFを構成する主要なオブジェクトは実行時に自動的に生成されるので気にすることもなく、 モデルファイルを追加するだけで終わりです。

モデルファイルの追加にはEOModelGroupのaddModlWithPathURL()メソッドを使います。 引数にはモデルファイルのURLを指定します。

EOModelGroup.defaultGroup().addModelWithPathURL(modelURL);

これでモデルファイルが追加され、アダプタなど諸々の処理も同時に行われます。

?EditingContextの生成

あとは?EditingContextを用意すれば、ひとまずEOFが使えるようになります。 ?EditingContextの生成も簡単で、引数なしのコンストラクタで普通に生成するだけです。

EOEditingContext ec = new EOEditingContext();

ライセンスについて

WebObjectsのライセンスはWebObjectsアプリケーションの開発・運用の2種類がありますが、EOFのみを使ったアプリケーションについては触れられていません。 WebObjects運用ライセンスを購入しており、かつ運用マシンでEOFアプリケーションを動かすなら問題なさそうな感じもしますが、実際にはどうかわかりません。

Cocoa/EOFランタイムライセンス (http://developer.apple.com/mkt/swl/agreements.html#cocoaeof) というのがあるようです。これはWebObjects 5.1から追加されたCocoa/EOFアプリケーション(Javaのみ)の評価用ライセンスらしいのですが、目立った進展はないようです。 需要がないんでしょうか。

参考リンク


Inverse Pages: WebObjects基礎研究室