第22章 クラスター化されたセッション EJB
セッション EJB はリモート呼び出しサービスを提供します。 このセッションはクライアント側のインターセプターアーキテクチャーに基づいてクラスタ化されます。 クラスター化されたセッション Bean のクライアントアプリケーションは、 若干の変更を除きセッション Bean のクラスター化されていないバージョンのクライアントと同じです。 クライアント側ではコードの変更や再コンパイルは必要ありません。 それでは、 EJB 3.0 と EJB 2.x のサーバーアプリケーションそれぞれでクラスター化されたセッション Bean を設定する方法について見てみましょう。
22.1. EJB 3.0 のステートレスセッション Bean リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ステートレスセッション Beanのクラスター化は、 ステートが関係しないため、 最も簡単なケースだと言えます。 呼び出しは、 クラスターの参加しているノード (この特定の Bean がデプロイされたすべてのノード) すべてへ呼び出しの負荷を分散することができます。
EJB 3.0 でステートレスセッション Bean をクラスターするには、
@Clustered
アノテーションを用いて、 Bean クラスにアノテーションを付けます。 このアノテーションには、 負荷分散ポリシーと使用するパーティションの両方を上書きするオプションのパラメーターが含まれます。
- partition は、 Bean が参加するクラスタの名前を指定します。
@Clustered
アノテーションで、個別の Bean に対してデフォルトパーティションDefaultPartition
を上書きできますが、jboss.partition.name
システムプロパティを使用するとすべての Bean に対して上書きできます。 - loadBalancePolicy は、 クラスターのノード上の呼び出しを Bean スタブが分散する方法を示し、
org.jboss.ha.client.loadbalance.LoadBalancePolicy
を実装するクラス名を定義します。 デフォルト値LoadBalancePolicy
は、セッション Bean タイプのデフォルトポリシーを示す特別なトークンです。 ステートレスセッション Bean のデフォルトポリシーはorg.jboss.ha.client.loadbalance.RoundRobin
です。 独自の実装を使用してデフォルト値を上書き、あるいは使用できるポリシーのリストより選択することができます。org.jboss.ha.client.loadbalance.RoundRobin
- 無作為のターゲットから開始し、 負荷分散を最大限にするため、 常にリスト上で次に利用できるターゲットを選択しようとします。
org.jboss.ha.client.loadbalance.RandomRobin
- 以前に選択されたターゲットを考慮せずに、 無作為にターゲットを選択します。
org.jboss.ha.client.loadbalance.aop.FirstAvailable
- ターゲットが選択されると、 同じターゲットを選択しようとします (これ以上負荷分散が行われません)。 ステートフルセッション Bean など、「スティッキーセッション」動作が望まれる場合に便利です。
org.jboss.ha.client.loadbalance.aop.FirstAvailableIdenticalAllProxies
FirstAvailable
と似ていますが、 希望のターゲットがすべてのプロキシで共有されます。
以下は、クラスター化された EJB 3.0 のステートレスセッション bean の実装例になります。
@Clustered
アノテーションを使用する代わりに、 jboss.xml のセッション Bean に対してクラスタリングを有効にすることもできます。
注記
<clustered>True</clustered>
要素は conf/standardjboss.xml ファイルの <configuration-name>Clustered Stateless SessionBean</configuration-name>
要素のエイリアスにすぎません。
この Bean の設定では、 Bean がクラスタリング機能のサポートを必要とすることを示す <clustered> 要素のみが必須です。 オプションの <cluster-config> 要素のデフォルト値は
@Clustered
アノテーションからの対応するプロパティと一致します。