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 5.2.3
- Mac OS X 10.3.3
- Java 1.4.2_03
- OpenBase 8.0.1
この例で使うモデルファイルは、WebObjectsと一緒にインストールされるサンプルの?ThinkMoviesアプリケーションで使われているものです。 これらのモデルファイルは?JavaBusinessLogicフレームワークに含まれていますが、ここではモデルファイルのみを取り出して使います。
コンパイルと実行
コンパイルと実行には、フレームワークというバンドルに含まれているjarファイルが必要になります。 EOFを使うのに必要なjarファイルは以下の5つです。 Mac OS Xの場合、これらのフレームワークはすべて/System/Library/Frameworks以下にあります。
- ?JavaFoundation.framework/Resources/Java/javafoundation.jar
- JavaXML.framework/Resources/Java/javaxml.jar
- ?JavaEOAccess.framework/Resources/Java/javaeoaccess.jar
- ?JavaJDBCAdaptor.framework/Resources/Java/javajdbcadaptor.jar
- ?JavaEOControl.framework/Resources/Java/javaeocontrol.jar
ここで使ったOpenBaseのJDBCドライバは以下にありますが、WebObjectsが対応しているデータベースなら、JDBCドライバのjarファイルをリンクする必要はないようです。
- /Library/Java/Extensions/OpenBaseJDBC.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のみ)の評価用ライセンスらしいのですが、目立った進展はないようです。 需要がないんでしょうか。
参考リンク
- Running 100% Pure EOF Applications - http://www.stepwise.com/Articles/Technical/2001-07-01.01.html
- Using EOF without WebObjects - http://www.omnigroup.com/mailman/archive/eof/2002-March/002643.html
Inverse Pages: WebObjects基礎研究室