Sun Java System Application Server Enterprise Edition 8.1 2005Q2 高可用性 (HA) 管理ガイド

- Previous: HTTP セッションフェイルオーバー
- Next: 第 9 章 Java Message Service 負荷分散とフェイルオーバー

# ステートフルセッション Bean のフェイルオーバー

ステートフルセッション Bean (SFSB) には、クライアント固有の状態が含まれています。クライアントとステートフルセッション Bean の間には、一対一の関係が存在します。作成時、EJB コンテナは各 SFSB に、クライアントにバインドするための一意のセッション ID を割り当てます。

サーバーインスタンスの障害に備えて、SFSB の状態を持続的なストアに保存することができます。SFSB の状態は、そのライフサイクル内のあらかじめ定義された時点に、持続性ストアに保存されます。これを、チェックポイント設定と呼びます。有効になっている場合、チェックポイント設定は一般に、トランザクションがロールバックする場合でも、Bean がトランザクションを完了したあとに実行されます。

ただし、SFSB が Bean 管理によるトランザクションに参加している場合、そのトランザクションは Bean メソッドの実行の途中でコミットされる可能性があります。このメソッド呼び出しの結果、Bean の状態は遷移している途中である可能性があるため、これは Bean の状態にチェックポイントを設定するのに適切なタイミングではありません。この場合、EJB コンテナは、対応するメソッドの終了時に Bean の状態にチェックポイントを設定します。ただし、メソッドの終了時に、その Bean が別のトランザクションの範囲に入っていないことが前提です。Bean 管理によるトランザクションが複数のメソッドにまたがっている場合は、後続のメソッドの終了時にアクティブなトランザクションが存在しなくなるまで、チェックポイント設定が遅延されます。

SFSB の状態は必ずしもトランザクションではなく、非トランザクションビジネスメソッドの結果として大幅に変更される可能性もあります。SFSB がこれに当てはまる場合は、「チェックポイントを設定するメソッドの指定」で説明しているように、チェックポイントを設定するメソッドのリストを指定することができます。

分散可能な Web アプリケーションが SFSB を参照しており、その Web アプリケーションのセッションが処理を継続する場合は、EJB 参照の処理も継続されます。

Application Server インスタンスの停止中に、セッション持続性を使用している SFSB の配備が取り消されると、持続性ストア内のセッションデータがクリアされない可能性があります。これを回避するには、Application Server インスタンスが動作している間、SFSB の配備を取り消します。

## EJB コンテナの可用性の設定

### EJB コンテナの可用性を設定するには

1. 「EJB コンテナの可用性」タブを選択します。

2. 「可用性サービス」ボックスにチェックマークを付けます。

   可用性を無効にするには、このボックスのチェックマークを外します。

3. 「可用性の設定」の説明に従って、ほかの設定を変更します。

4. 「保存」ボタンをクリックします。

5. サーバーインスタンスを再起動します。

##### 同機能を持つ asadmin コマンド

EJB コンテナの可用性を有効にするには、`asadmin set` コマンドを使用して、設定に次の 3 つのプロパティーを設定します。

-     availability-service.ejb-container-availability.
      availability-enabled

-     availability-service.ejb-container-availability.
      sfsb-persistence-type

-     availability-service.ejb-container-availability.
      sfsb-ha-persistence-type

たとえば、設定の名前が `config1` の場合は、次のコマンドを使用します。

`asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.availability-enabled="true"`

`asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.sfsb-persistence-type="file"`

`asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.sfsb-ha-persistence-type="ha"`

### 可用性の設定

「可用性サービス」の「EJB コンテナの可用性」タブを使用すると、次の設定を変更できます。

HA 持続性のタイプ: 可用性が有効になっている SFSB のセッション持続性と不活性化メカニズムを指定します。使用できる値は、`file` (ファイルシステム) と `ha` (HADB) です。セッションの持続性が必要となる本稼動環境では、デフォルトの `ha` を使用します。

SFSB 持続性のタイプ: 可用性が有効になっていない SFSB の不活性化メカニズムを指定します。使用できる値は、`file` (デフォルト) と `ha` です。

いずれかの持続性のタイプを `file` に設定すると、EJB コンテナによって非活性化されたセッション Bean が格納されるファイルシステムの場所が指定されます。ファイルシステムに対するチェックポイントはテストには有効ですが、本稼働環境には役立ちません。詳細については、『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 管理ガイド』の「ストアプロパティーを設定する」を参照してください。

HA 持続性によって、どのサーバーインスタンスが失敗した場合でも、サーバーインスタンスのクラスタは SFSB 状態を復元できます。HADB はまた、不活性化とアクティベーションのストアとしても使用されます。SFSB 状態の持続性を必要とする本稼働環境では、このオプションを使用します。詳細については、configure-ha-cluster(1) を参照してください。

SFSB ストアプール名: セッションの持続性のために HADB への接続に使用する JDBC リソースを変更した場合は、SFSB ストアプール名を変更できます。詳細については、configure-ha-cluster(1) を参照してください。

### 可用性が無効の場合の SFSB セッションストアの設定

可用性が無効になっている場合、ローカルファイルシステムは SFSB 状態の不活性化に使用されますが、持続性には使用されません。SFSB 状態が格納される場所を変更するには、EJB コンテナのセッション格納位置の設定を変更します。詳細については、『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 管理ガイド』の「ストアプロパティーを設定する」を参照してください。

## 個々のアプリケーションまたは EJB モジュールの可用性の設定

配備中に、個々のアプリケーションまたは EJB モジュールの SFSB の可用性を有効にすることができます。

- 管理コンソールを使用して配備している場合は、可用性を有効にするチェックボックスをチェックします。

- `asadmin deploy` または `asadmin deploydir` コマンドを使用して配備している場合は、`--availabilityenabled` オプションを `true` に設定します。詳細については、deploy(1) および deploydir(1) を参照してください。

## 個々の Bean の可用性の設定

個々の SFSB について可用性を有効にし、チェックポイントを設定するメソッドを選択するには、`sun-ejb-jar.xml` 配備記述子ファイルを使用します。

高可用性セッション持続性を有効にするには、`ejb` 要素に `availability-enabled="true"` を設定します。SFSB キャッシュのサイズと動作を制御するには、次の要素を使用します。

- `max-cache-size` : キャッシュに保持されるセッション Bean の最大数を指定します。キャッシュがオーバーフローする (Bean の数が `max-cache-size` を超える) 場合、コンテナは一部の Bean を非活性化するか、または Bean の直列化された状態をファイルに書き出します。ファイルを作成するディレクトリは、設定 API を使用して EJB コンテナから取得されます。

- `resize-quantity`

- `cache-idle-timeout-in-seconds`

- `removal-timeout-in-seconds`

- `victim-selection-policy`

`sun-ejb-jar.xml` の詳細については、『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide』の「The sun-ejb-jar.xml File」を参照してください。

##### 例 8–1 可用性が有効になっている EJB 配備記述子の例

    <sun-ejb-jar>
        ...
        <enterprise-beans>
            ...
            <ejb availability-enabled="true">
                <ejb-name>MySFSB</ejb-name>
            </ejb>
            ...
        </enterprise-beans>
    </sun-ejb-jar>

## チェックポイントを設定するメソッドの指定

有効になっている場合、チェックポイント設定は一般に、トランザクションがロールバックする場合でも、Bean がトランザクションを完了したあとに実行されます。Bean の状態に重要な変更をもたらす非トランザクションビジネスメソッドの終了時に、SFSB のオプションのチェックポイント設定を追加で指定するには、`sun-ejb-jar.xml` 配備記述子ファイルの `ejb` 要素にある `checkpoint-at-end-of-method` 要素を使用します。

`checkpoint-at-end-of-method` 要素内の非トランザクションメソッドは、次のいずれかになります。

- SFSB のホームインタフェースで定義された `create()` メソッド。作成の直後に、SFSB の初期状態にチェックポイントを設定する場合に使用します。

- コンテナ管理によるトランザクションのみを使用している SFSB の場合は、トランザクション属性 TX_NOT_SUPPORTED または TX_NEVER でマークされた Bean のリモートインタフェースのメソッド。

- Bean 管理によるトランザクションのみを使用している SFSB の場合は、Bean 管理によるトランザクションが起動もコミットもされないメソッド。

  このリストに記述されているその他のメソッドはすべて無視されます。これらの各メソッドの呼び出しの終了時に、EJB コンテナは SFSB の状態を持続性ストアに保存します。

注 –

SFSB がどのトランザクションにも参加しておらず、`checkpoint-at-end-of-method` 要素で明示的に指定されているメソッドがない場合は、この Bean に対して `availability-enabled="true"` が設定されていても、この Bean の状態にチェックポイントは設定されません。

パフォーマンスを向上させるには、メソッドの小さなサブセットを指定します。これらのメソッドは一般に、大量の処理を実行するか、または Bean の状態に重要な変更をもたらします。

##### 例 8–2 メソッドのチェックポイント設定を指定する EJB 配備記述子の例

    <sun-ejb-jar>
        ...
        <enterprise-beans>
            ...
            <ejb availability-enabled="true">
                <ejb-name>ShoppingCartEJB</ejb-name>
                <checkpoint-at-end-of-method>
                    <method>
                        <method-name>addToCart</method-name>
                    </method>
                </checkpoint-at-end-of-method>
            </ejb>
            ...
        </enterprise-beans>
    </sun-ejb-jar>

- Previous: HTTP セッションフェイルオーバー
- Next: 第 9 章 Java Message Service 負荷分散とフェイルオーバー

- © 2010, Oracle Corporation and/or its affiliates