• 検索結果がありません。

WebLogic Server クラスタにおける EJB

ドキュメント内 ejb.book (ページ 102-119)

4 WebLogic Server EJB コンテナとサポートされるサービス

4-32 WebLogic エンタープライズ JavaBeans プログラマーズガイド

cache-between-transactions に関する制限

cache-between-transactions には以下の制限があります。

単一サーバ デプロイメントでは、cache-between-transactions は、Exclusive、

Optimistic、および Read-Only 同時方式でのみ有効にできます。Database 同時方

式では cache-between-transactions を使用できません。

クラスタ デプロイメントでは、cache-between-transactionsは、Optimistic および Read-Only 同時方式でのみ有効にできます。Exclusive または Database 同 時方式では cache-between-transactions を使用できません。

WebLogic Server クラスタにおける EJB

4-8 単一サーバの動作

注意: EJB のフェイルオーバは、リモートクライアント と EJB との間でのみ機 能します。

クラスタ化された EJB ホーム オブジェクト

すべての EJB タイプ ( ステートレス セッション EJB、ステートフル セッション EJB、およびエンティティ EJB) は、クラスタ対応のホーム スタブを持つことが できます。 クラスタ対応のホーム スタブを作成するかどうかは、

weblogic-ejb-jar.xmlhome-is-clusterableデプロイメント記述子要素に よって決定されます。

EJB がクラスタにデプロイされると、そのホームはクラスタワイドのネーミング サービスにバインドされます。 各サーバではそのホームのインスタンスを同じ名 前でバインドできます。 クライアントがこのホームをルックアップすると、その クライアントでは Bean がデプロイされた各サーバ上のホームへの参照を持つレ プリカ対応スタブが取得されます。 create()または find()が呼び出されると、

その呼び出しはレプリカ対応スタブによってレプリカの 1 つに転送されます。

ホームのレプリカは、find()の結果を受信するか、またはそのサーバで Bean の インスタンスを作成します。

クラスタ化されたホーム スタブは、EJB ルックアップ リクエストを使用可能な サーバに分散することでロード バランシングを実現します。また、他のサーバ に障害が発生したときにルックアップ リクエストを使用可能なサーバに転送す ることで、それらのリクエストのフェイルオーバもサポートします。

ホーム EJBHome

イ ン タ フ ェ ース オブジ ェ ク ト

リ モー ト EJB イ ン タ フ ェ ース オブジ ェ ク ト

WebLogic Server (単一サーバ)

データ ス ト ア ク ラ イア ン ト

コ ミ ッ Bean を取得

メ ソ ッ ド の呼び出し

4 WebLogic Server EJB コンテナとサポートされるサービス

4-34 WebLogic エンタープライズ JavaBeans プログラマーズガイド

クラスタ化された EJBObject

WebLogic Server クラスタでは、EJBObject のサーバサイド表現は、レプリカ対

応の EJBObjectスタブによって置き換えることができます。 このスタブは、クラ

スタ内のサーバに存在する EJBObjectのすべてのコピーに関する知識を保持し

ます。 EJBObjectスタブは、EJB メソッド呼び出しに対するロード バランシング

およびフェイルオーバを提供します。 たとえば、クライアントが特定の

WebLogic Server に対して EJB メソッドを呼び出したが、そのサーバがダウンし

ている場合、EJBObjectスタブはそのメソッド呼び出しを稼働中の別のサーバ にフェイルオーバします。

EJB がレプリカ対応 EJBObjectスタブを利用するかどうかは、デプロイされて いる EJB のタイプと、エンティティ EJB の場合、デプロイメント時に選択した 同時方式によって決まります。 詳細については、4-34 ページの「さまざまなタイ プの EJB に対するクラスタ化のサポート」を参照してください。

さまざまなタイプの EJB に対するクラスタ化のサ ポート

次の節では、セッション EJB とエンティティ EJB に対するクラスタ化のサポー トについて説明します。

4-34 ページの「クラスタ内のステートレス セッション EJB」

4-36 ページの「クラスタ内のステートフル セッション EJB」

4-39 ページの「クラスタ内のエンティティ EJB」

クラスタ内のステートレス セッション EJB

ステートレス セッション EJB は、クラスタ対応のホーム スタブとレプリカ対応 の EJBObject スタブの両方を持つことができます。デフォルトによって、

WebLogic Server は EJB メソッド呼び出しに対するフェイルオーバ サービスを提

供しますが、これは障害がメソッド呼び出しの合間に発生した場合に限ります。

たとえば、メソッドの完了後に障害が発生した場合や、メソッドがサーバに接続

WebLogic Server クラスタにおける EJB

されなかった場合などには、フェイルオーバが自動的にサポートされます。しか し、EJB メソッドの実行中に障害が発生した場合、WebLogic Server は別のサー バにそのメソッドを自動的にフェイルオーバしません。

このデフォルト動作では、EJB メソッド内のデータベース更新がフェイルオーバ によって「重複」することはありません。たとえば、データストア内のある値を インクリメントするメソッドをクライアントが呼び出し、そのメソッドが完了す る前に WebLogic Server が別のサーバにフェイルオーバした場合、クライアント の 1 度のメソッド呼び出しによってデータベースが 2 度更新されることになりま す。

繰り返し呼び出しても更新が重複しないように記述されたメソッドを、「多重呼 び出し不変」と呼びます。 WebLogic Server には、多重呼び出し不変のメソッド 用に 2 種類の weblogic-ejb-jar.xmlデプロイメント プロパティ ( 一方は Bean レベル、もう一方はメソッド レベル ) が用意されています。

Bean レベルでは、stateless-bean-methods-are-idempotentを「true」に設

定した場合、WebLogic Server はメソッドが多重呼び出し不変であると見なし て、メソッド呼び出し中に障害が発生した場合でも、EJB メソッドに対するフェ イルオーバ サービスを提供します。

メソッド レベルでは、idempotent-methods デプロイメント プロパティを使用 して同じことを実行できます。

<idempotent-methods>

<method>

<description>...</description>

<ejb-name>...</ejb-name>

<method-intf>...</method-intf>

<method-name>...</method-name>

<method-params>...</method-params>

</method>

</idempotent-methods>

次の図は、WebLogic Server クラスタ環境でのステートレス セッション EJB の動 作を示しています。

4 WebLogic Server EJB コンテナとサポートされるサービス

4-36 WebLogic エンタープライズ JavaBeans プログラマーズガイド

4-9 クラスタ化されたサーバ環境でのステートレスセッション EJB

クラスタ内のステートフル セッション EJB

ステートフル セッション EJB でクラスタ対応のホーム スタブを利用できるよう にするには、home-is-clusterableを「true」に設定します。これにより、ス テートフル EJB ルックアップに対するフェイルオーバとロード バランシングが 提供されます。このようにコンフィグレーションされたステートフル セッショ ン EJB は、レプリカ対応の EJBObject スタブを利用できます。 ステートフル セッ ション EJB のインメモリ レプリケーションの詳細については、4-37 ページの

「ステートフル セッション EJB のインメモリ レプリケーション」を参照してく ださい。

注意: ロード バランシングとフェイルオーバについては、『WebLogic Server ク ラスタ ユーザーズ ガイド』で詳しく説明されています。 次の 3 つの節を 参照してください。「EJB と RMI オブジェクト」、「EJB と RMI オブジェ クトのロード バランシング」、「EJB と RMI のレプリケーションとフェイ ルオーバ」。

データ ス ト ア サーバ 1

サーバ 2

サーバ 3 EJBHome

EJBObject

EJBHome EJBObject

EJBHome EJBObject

WebLogic Server ク ラ ス タ

ホーム ホーム ス タ ブ リ モー ト オブジ ェ ク ト

ス タ ブ

メ ソ ッ ド

コ ミ ッ ト

実行時の障害 Bean を取得

メ ソ ッ ド の呼び出し ク ラ イ ア ン ト

WebLogic Server クラスタにおける EJB

ステートフル セッション EJB のインメモリ レプリケーション

WebLogic Server EJB コンテナは、ステートフル セッション EJB 向けのクラスタ 化をサポートします。 WebLogic Server 5.1 では、EJBHomeオブジェクトだけがス テートフル セッション EJB 用にクラスタ化されますが、EJB コンテナは、EJB の状態をクラスタ化された WebLogic Server インスタンスの間でレプリケートで きます。

ステートフル セッション EJB のレプリケーション サポートは、EJB クライアン トには見えません。 ステートフル セッション EJB がデプロイされると、

WebLogic Server はそのステートフル セッション EJB 用にクラスタ対応の EJBHomeスタブとレプリカ対応の EJBObjectスタブを作成します。 EJBObject スタブは、EJB インスタンスが動作するプライマリ WebLogic Server インスタン スと、その Bean の状態をレプリケートするためのセカンダリ WebLogic Server のリストを保持します。

EJB のクライアントがその EJB の状態を変更するトランザクションをコミット するたびに、WebLogic Server はその EJB の状態をセカンダリ サーバ インスタ ンスにレプリケートします。Bean の状態のレプリケーションは直接メモリ内で 行われるため、クラスタ化された環境で最高のパフォーマンスを得られます。

プライマリ サーバ インスタンスがダウンした場合、クライアントの次のメソッ ド呼び出しはセカンダリ サーバの EJB インスタンスに自動的に転送されます。

セカンダリ サーバは、その EJB インスタンスのプライマリ WebLogic Server と なり、新しいセカンダリ サーバが別のフェイルオーバに対応します。EJB のセ カンダリ サーバがダウンした場合、WebLogic Server はクラスタから新しいセカ ンダリ サーバ インスタンスを使用します。

このため、ステートフル セッション EJB のクライアントは EJB の最後にコミッ トされた状態に迅速にアクセスできます。ただし、後述の4-38 ページの「イン メモリ レプリケーションの制限事項」で挙げる特殊な環境は除きます。 レプリ ケーション グループの使い方の詳細については、「レプリケーション グループを 使用する」を参照してください。

ドキュメント内 ejb.book (ページ 102-119)