7

Apache TomEEは、openejbをWebアプリとして使用する通常のTomcatインストールであることを理解しています。

私はこのすべてがどのようにブートストラップするかを理解しようとしています。私はいくつかの指示された質問をしようとします:

  • アプリケーションの起動順序を設定することは重要ですか?openejbは私のWebアプリの前に開始する必要がありますか、またはその逆ですか、それとも問題ではありませんか?
  • 前の質問に関連しています。エンタープライズアプリケーションはどのようにしてBeanをopenejbに登録しますか、それともopenejbが同じサーバー内のエンタープライズアプリケーションをEJBのために探し回るのですか?
  • 非常に素人レベルでは、別のWebアプリである場合、どのようにしてopenejbをEJBコンテナーとして提供できたのでしょうか。(IIRC TomcatのすべてのWebアプリは異なるクラスパスを取得し、お互いのつま先を踏むことはできません)

その他の重要な情報。

4

1 に答える 1

8

統合は、conf/server.xml:のこの行を介してブートストラップされます。

<Listener className="org.apache.tomee.loader.OpenEJBListener" />

これは、アプリケーションが開始される前の起動直後に発生します。ディレクトリのライブラリ<tomcat-home>/webapps/openejb/libがTomcatシステムクラスローダーに追加され、デプロイメントに参加するために別のリスナーがインストールされ、それ以降、Tomcatライフサイクルのイベントを使用してすべてが実行されます。Tomcatは、アプリケーションの起動(デプロイ)およびシャットダウン時にいくつかのイベントを発行します。Tomcat自体がサーブレットのデプロイメントにそれらを使用し、基本的に統合はほとんど同じです。Tomcatを含む他のベンダーもこれらのフックを使用しています。その観点から、統合は本当に非常に退屈です:)

唯一の興味深い工夫は、追加のライブラリをwarファイルに入れることです。これは、実際には、既存のTomcatインストールへのライブラリの配信と追加を可能な限り簡単にする(そして削除するのを可能な限り簡単にする)ためにのみ行われます。からのすべてのライブラリは、<tomcat-home>/webapps/openejb/lib同じように簡単にに入ることができ<tomcat-home>/libます。その時点で、webapss/openejb/戦争が必要になる可能性があるのは、HTTPを介してEJBを呼び出せるようにすることだけです。

したがって、簡単な答えは次のとおりです。

  • アプリケーションの起動順序は関係ありません
  • EJBデプロイメントはサーブレットデプロイメントと並行して行われます
  • ジャーは、Tomcat自体が起動するとすぐにTomcatシステムクラスローダーに追加されます

他の回答で注目すべき興味深い点は、Tomcatは実際にはクラスパス内の2つのjarのみで起動することです。<tomcat-home>/lib/Tomcat自体は、実際には起動時にすべてのjarファイルを自動的に追加します。私たちは基本的に同じことをしています<tomcat-home>/webapps/openejb/lib

<tomcat-home>/lib/ライブラリをopenejbwebapp(tomee.war次の最終リリースで呼び出されます)に移動して削除することを実際にテストしたとは思いませんが、それを試すためにメモしておきます。サポートするのは良いことのようですが、デフォルトでサポートすることもできます。TomcatマネージャーとROOTWebアプリケーションを削除できるので、openejb.warも簡単に削除できるようにすることをお勧めします。

于 2012-04-19T08:07:25.417 に答える