特定のサーバー、たとえばKuklaに、「コンテナー」はいくつありますか?EAR用のコンテナは1つだけですか?または、WARとEJB jarにも独自のコンテナがありますか?
「コンテナ」という用語は多少曖昧かもしれませんが、私は次のように言います。GlassFishのような本格的なJava EEアプリケーションサーバーは、WebコンテナとEJBコンテナの両方を提供します。EARをデプロイする場合、WARはWebコンテナによってデプロイおよび管理され、EJBはEJBコンテナによってデプロイおよび管理されます。これを次の図に示します(Java EEチュートリアルから)。

そして、どういうわけか-そして私が物事を混乱させれば私はすでに申し訳ありません-Java EEサーバーは各EARとEAR内のJavaEEモジュールに明確に定義された分離されたクラスローダー階層を提供するので、EARも一種の(論理)コンテナです。クラスのロードの概要については、パッケージ化EJB3アプリケーションからのJavaEEアプリケーションでのクラスのロードを確認してください
。
最初の答えの実際的な影響は何ですか?
質問はあいまいですが...ここにいくつかの例があります:
- 特定のアプリケーションサーバーインスタンスは、サービスのサブセット(WebコンテナやEJBコンテナなど)のみを実行できます。
- EARの個々のモジュールをクラスターのさまざまなインスタンスにデプロイできます(ノード1、2へのWARおよびノード3、4、5、6へのEJB-JAR)
さらに言えば、コンテナとは正確には何ですか?
私の言葉を使用すると、ランタイム環境とそれにデプロイされたコンポーネントのサービスを提供するものです。Tomcatは(Web)コンテナー、OpenEJBは(EJB)コンテナー、Springは(IoC)コンテナーです。
より正式な「JavaEE」の定義については、JavaEEチュートリアルの「 JavaEEコンテナ」セクションを確認してください。
WARのクラスは@EJBインジェクションを使用して、EJB jar内のBeanにアクセスできますか?両方とも同じEARの一部であるためですか?
はい、できます。
さらに言えば、プレーンオールドJavaクラスは@EJBインジェクションを使用できますか、それとも他のEJBでのみ機能しますか?
Java EE 6より前は、EJB、サーブレット、フィルター、JSFマネージドBeanなどのマネージドコンポーネントのみがインジェクションの恩恵を受けることができました。しかし、Java EE 6では、CDI(Java C ontexts and D ependency I njection )を使用して、任意のクラスをマネージドBeanに変換できるようになりました。そしてその場合、あなたはすることができます:
@Inject MyEJB service
ただし、POJOはCDI管理のBeanである必要があります。
シングルトンBeanのインスタンスをいくつ作成しますか?サーバーごとに1つ?それとも合計1つだけですか?サーバーごとに1つである場合、クラスター全体で「真の」シングルトンを保証する方法はありますか?
仕様はクラスタリングのサポートをカバーしていませんが、ほとんどのベンダーがステートフルセッションBeanのようにシングルトンをクラスターセーフにする可能性が非常に高いです(または状態を共有できず、あまり役に立たないでしょう)。しかし、厳密な答えはありません。
また、Java EE 6クラスター対応コンテナーはまだ市場に出回っていないことに注意してください(GlassFish 3.1は、マイルストーン1以降、基本的なクラスタリングサポートとアプリケーションバージョン管理を備えていますが、GF 3.1はまだ最終版ではなく、最終リリースは終了する予定です。今年の)。
GlassFishのどこで、どのようにリソースを探すようにJNDIを設定しますか?たとえば、EJB jarをあるマシンから別のマシンに移動して、Webアプリケーションに自動的に検出させることは可能ですか?
InitialContext
を作成または提供するときに、空でないコンストラクターを使用して環境設定を渡しますjndi.properties
。GlassFishにはデフォルトの(でjndi-properties.jar
)が付属しており、必要に応じてアプリにバンドルします。
EJB Beanの負荷分散を構成することは可能ですか?もしそうなら、どのように?
負荷分散は、クラスター化されたEJB用に取得されたEJBクライアントスタブによって処理され、デフォルトの戦略はほとんどの場合ラウンドロビン負荷分散です。他の典型的な戦略には、重みベースの負荷分散、ランダム負荷分散(およびおそらく他のもの)が含まれます。しかし、GlassFishがサポートする戦略についてはわかりません。
また、以前に書いたように、GlassFish 3.1のMilestoneバージョンで遊び始めない限り、クラスターのサポートはまだありません。
WARの3つのインスタンスについてはどうですか?リクエストが、たとえば最も使用率の低いマシンのインスタンスに送信されるように、負荷分散を構成する方法はありますか?
それはすべてロードバランサー(ハードウェア、ソフトウェアなど)に依存していると思います。一般的なApachemod_jkアプローチについて簡単に説明します。私の知る限り、Apache mod_jkは、次の3つの方法のいずれかを使用して作業を分散できます。
- B(ビジー):現在進行中のリクエストの数が最も少ないワーカーを選択します
- R(リクエスト):全体としてリクエストの処理数が最も少ないワーカーを選択します
- T(トラフィック):最も少ないバイト数を送信したワーカーを選択します
(一部)リソース