クラスパスの通し方。 †
J2EEプロジェクトの構成は
EAR -> EJBプロジェクト(jarファイル) + WARプロジェクト(warファイル)
となりますが、クラスファイルの参照関係は
EAR <- EJB <- WAR
となります。つまりEAR内のjarファイルはEJB、WARともに参照可能だけど、EJBがWARファイルのクラスやjarファイルを参照する事は許されていないようです*1。つまりWARだけが参照するクラスファイルやjarファイルはWARだけで開発するときのようにWEB-INF/libに置けばよいのですが、EJBでも参照するクラスなどはEAR内に置くのがよいようです*2。
ところでWebSphere Studio内で開発するときは以下のようにパスを通しておけばよいようです。
- EAR内のファイルをEJBで参照する
- EARのプロジェクトのルートディレクトリに該当jarを配置。ユーティリティJARというディレクトリにそのjarが表示される。
- EJBプロジェクト内で、META-INF/ejb-jar.xmlをJAR依存関係エディタで開く
- 依存関係の欄に、ユーティリティJARのファイルが一覧されているので、使用したいjarにチェックを入れる
- EJBプロジェクト内で、パスが通る。完了。
- EAR内のファイルをWARで参照する、EJB内のファイルをWARで参照する
- 先のように、EAR内のファイルを参照するEJBプロジェクトがすでにある場合は、WARプロジェクトのプロパティ>>Javaのビルドパス>>プロジェクトで、該当するEJBにチェックする。すると、EARやEJB内のファイルにパスが通る。
- EAR内のファイルを参照するEJBがない場合は、WARプロジェクトのプロパティ>>Javaのビルドパス>>ライブラリで、直接EARのjarにパスを通す。。だけだとランタイム時にクラスが見つからないってなってしまった。これってムリなの???
- WARも同じで、META-INF/MANIFEST.MFをJAR依存関係エディタで開いて、依存関係でチェックを入れればOKみたい。
RAD7.0では †
- RAD7.0でも、EAR内のjarは勝手にユーティリティjarになるようだ
- EJBプロジェクトがEAR内のユーティリティjarを使用したい場合。そのユーティリティjarは「J2EEモジュール依存関係」に見えているので、ここにチェックを入れればいい。
- WARプロジェクトがEJBプロジェクトのソースを参照したい場合、ビルドパス >> プロジェクトでそのEJBプロジェクトを指定する(EAR内のjarにもこれでパスが通せる)
- WAR->EJBやWAR->EARの解決は、J2EEモジュール依存関係>>J2EE モジュール でやるんではないかなあ?
- ちなみにJ2EEモジュール依存関係>>Web ライブラリーでプロジェクトにチェックを入れると、パスが通るのはもちろん、デプロイ時にWEB-INF/lib/にそのプロジェクトがjar化されて配備されます。
この記事は
- WTPでは、EARプロジェクトのプロパティ >> J2EE Module Dependencyでチェックを入れると、application.xmlに反映されます。 -- きの?
現在のアクセス:46640