5

わかりました、ここで基本的な EE 6 の概念を理解しようとしています。ここの誰かが私を助けてくれることを願っています。

単一のドメインで GlassFish v3 サーバー Kukla を実行しています。MyEEWebApp.war、MyEJBs.jar、および MyUtilityLibrary.jar を含む MyEEApp.ear をデプロイします。私の EJB jar には、MySingleton という @Singleton Bean が含まれています。

次に、Fran という別のサーバーをセットアップし、同じ EAR をデプロイします。Ollie という 3 番目のサーバーについても同じことを行います。

3 つのまったく同じ (名前と IP アドレスを除いて) サーバーにデプロイされた 3 つの同じ EAR ファイル。

だからここに私の質問があります:

  1. 特定のサーバー、たとえば Kukla には、いくつの「コンテナー」がありますか? EAR のコンテナーは 1 つだけですか? それとも、WAR と EJB jar にも独自のコンテナーがありますか?
  2. 最初の答えの実際的な影響は何ですか?
  3. さらに言えば、コンテナとは正確には何ですか?
  4. WAR 内のクラスは @EJB インジェクションを使用して EJB jar 内の Bean にアクセスできますか? これらは両方とも同じ EAR の一部であるためです。
  5. さらに言えば、単純な古い Java クラスで @EJB インジェクションを使用できますか? それとも、他の EJB でしか機能しませんか?
  6. シングルトン Bean のインスタンスはいくつ作成されますか? サーバーごとに1つ?それとも全部で1枚?サーバーごとに1つの場合、クラスター全体で「真の」シングルトンを保証する方法はありますか?
  7. GlassFish で、リソースを検索するように JNDI を構成する場所と方法は? たとえば、EJB jar をあるマシンから別のマシンに移動して、Web アプリケーションがそれを自動的に見つけられるようにすることは可能ですか?
  8. EJB Bean の負荷分散を構成することは可能ですか? もしそうなら、どのように?
  9. WAR の 3 つのインスタンスについてはどうでしょうか。たとえば、最も使用率の低いマシンのインスタンスにリクエストが送信されるように、負荷分散を構成する方法はありますか?

たくさんの質問があります。ごめんなさい!

あなたの助けは大歓迎です!ジェフ

4

1 に答える 1

17

特定のサーバー、たとえば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(トラフィック):最も少ないバイト数を送信したワーカーを選択します

(一部)リソース

于 2010-09-22T04:36:00.800 に答える