3

これまで、Web アプリをデプロイするために WAS 6.1 を使用してきました。次に、経済に精通した Tomcat + OpenEJB ソリューションに移行する必要があります。OpenEJB 3.1.2 コンテナーは Tomcat 6.18 にプラグインされており、ここにはスタンドアロンの OpenEJB サーバーはありません。

ここで、EJB 2.1 オブジェクトを OpenEJB にデプロイしようとしています...

私の問題は、EJB コードが外部の .jar ライブラリを必要とすることです。コンテナのクラスパスで実際に考慮されるように、それらをどこに配置すればよいかわかりません。これは catalina.home/lib に対して正常に機能するため、openejb.home/lib に対しても正常に機能します。それでも私は、EJB をパッケージ化して、リンクされた .jar を適切な場所にドロップして OpenEJB コンテナーで使用できるようにする方法を見つけたいと思っています。

適切な記述子ファイルを使用して.earまたは.jarを構築することを含めることができます...機能するソリューションであれば、私にとっては十分です。

おそらく誰かが助けることができますか?

4

2 に答える 2

4

イヤーアプローチ

Tomcat の webapps/ ディレクトリにドロップするだけで、取得されます。

耳の例 (有効):

myapplication.ear
  lib/
  lib/libraryOne.jar
  lib/libraryTwo.jar
  redEjbs.jar
  blueEjbs.jar

よくある間違い (無効):

myapplication.ear
  libraryOne.jar  (err. not a javaee module)
  libraryTwo.jar  (err. not a javaee module)
  redEjbs.jar
  blueEjbs.jar

ルートでは Java EE モジュールのみが許可されます。これらは、EJB jar、.war ファイル、Connector .rar ファイル、および Application Client jar です。Java EE 5 より前は、ライブラリを明示的に application.xml ファイルにリストする必要がありました。Java EE 5 以降では、lib/ ディレクトリに追加でき、Java EE モジュールとは対照的に単なる jar として理解できます。

崩壊した EAR アプローチ

OpenEJB/Tomcat では、すべてのライブラリを war ファイルに入れることができ、耳の概念から解放されます。これは現在、Java EE 6 の一部です。

mywebapp.war
  WEB-INF/lib/libraryOne.jar
  WEB-INF/lib/libraryTwo.jar
  WEB-INF/lib/redEjbs.jar
  WEB-INF/lib/blueEjbs.jar

仕様を含むよくある間違い:

mywebapp.war
  WEB-INF/lib/javax.ejb.jar   (err. clashes with the related system library)
  WEB-INF/lib/libraryOne.jar
  WEB-INF/lib/libraryTwo.jar
  WEB-INF/lib/redEjbs.jar
  WEB-INF/lib/blueEjbs.jar

それが問題であるようには聞こえませんが、完全を期すために追加します。

よくある間違い、壊れた依存関係:

tomcat/lib/libraryTwo.jar

mywebapp.war
  WEB-INF/lib/libraryOne.jar
  WEB-INF/lib/redEjbs.jar
  WEB-INF/lib/blueEjbs.jar

上記は仕様の観点からは無効ではなく、サーバーが検出することは不可能ですが、それでもアプリが正しく読み込まれない可能性があります。libraryTwo.jar が libraryOne.jar のクラスを必要とする場合、Tomcat の「lib」クラスローダーは「webapp」クラスローダーのクラスを認識できないため、このアプリは機能しません。したがって、libraryTwo.jar のクラスは正常に読み込まれません。残念なことに、VM は欠落していた実際のクラスをほとんど言いません。代わりに、欠落していたクラスが必要になる一連のイベントの最初のクラスを報告します。これはほとんどの場合、Bean クラスまたはサーブレット クラスです。

于 2010-10-14T11:02:13.683 に答える
0

ありがとうデビッド。上記のすべてを試しましたが、まだ運がありません。Tomcat 6.0.18 が J2EE 6 仕様に準拠していないことを知る限り、Collapsed EAR アプローチはうまくいかないでしょう。たぶん私が間違っているかもしれませんが、試してみましたが、とにかくうまくいきませんでした。それでは、標準の EAR アプローチに戻ります。

私の EAR は、最初の例で説明したとおりに構成されています。1 つの EJB jar、2 つのライブラリ jar が /lib にあり、それだけです。EJB クラスが Library Jar Two から到達できないクラスに関連しているため、Tomcat はまだ EJB をインスタンス化できません。

単一の EJB のみを宣言するように、application.xml ファイルを単純化しました。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ...>
<application>
  <display-name>ProxyaEAR</display-name>
  <module id="EjbModule">
     <ejb>ProxyaEJB.jar</ejb>
  </module>
</application>

他の考えはありますか??

于 2010-10-15T09:44:47.700 に答える