非同期 Bean

非同期 Bean は、Bean 作成者の Java EE コンテキストを使用して、 Java Platform, Enterprise Edition (Java EE) アプリケーションが非同期で実行できる Java™ オブジェクトまたはエンタープライズ Bean です。

非推奨の機能 (Deprecated feature) 非推奨の機能 (Deprecated feature): 非同期 Bean および CommonJ Timer and WorkManager は、非推奨となった非同期スケジューリング機能です。非推奨になったこれらのスケジューリング機能は Concurrency Utilities for Java EE によって置き換えられました。バージョン 9 では、まだ非同期 Bean および CommonJ Timer and WorkManager をサポートしています。ただし、バージョン 9 資料では、Concurrency Utilities for Java EE が中心になっています。バージョン 9 の資料に、探している非同期 Bean に関する情報が見つからない場合は、バージョン 8.5.5 の資料を参照してください。depfeat

非同期 Bean では、Java EE プログラムによって操作を並列タスクに分解できるようにすることで、パフォーマンスを向上させることが可能です。 非同期 Bean により、 ステートフルかつアクティブな Java EE アプリケーションを構築することができます。 これらのアプリケーションは、アプリケーションのスレッド化、サーバー・アプリケーション内のアクティブ・エージェント、または分散モニター機能を必要とするアプリケーションの、アプリケーション・スペースのセグメントをアドレッシングします。

非同期 Bean は、作成者の Java EE コンポーネントの Java EE セキュリティー・コンテキストを使用して実行することができます。 この Bean は、以下のような、他の Java EE コンテキストのコピーとともに実行することもできます。
  • 国際化対応コンテキスト
  • Java EE 1.4 アプリケーションではサポートされていない、 Java EE 1.3 アプリケーションでは非推奨のアプリケーション・プロファイル。
  • 作業域

非同期 Bean インターフェース

以下の 4 つのタイプの非同期 Bean があります。
作業オブジェクト
2 つ作業インターフェースがあり、どちらも基本的には同じ目標を達成します。 既存の非同期 Bean の作業インターフェースは com.ibm.websphere.asynchbeans.Work で、CommonJ の作業インターフェースは commonj.work.Work です。作業オブジェクトは、作業マネージャーの startWork メソッドまたは schedule メソッド (既存の非同期 Bean の場合は startWork、CommonJ の場合は schedule) を使用して、その呼び出し元と並列に実行します。アプリケーションは、複数のコード・ブロックを非同期で実行する作業オブジェクトを実装します。
タイマー・リスナー
このインターフェースは、commonj¥timers¥TimerListener インターフェースを実装するオブジェクトです。 タイマー・リスナーは、高速の一過性タイマーの有効期限が切れたときに呼び出されます。
アラーム・リスナー
アラーム・リスナーは、com.ibm.websphere.asynchbeans.AlarmListener インターフェースを実装するオブジェクトです。 アラーム・リスナーは、高速の一過性アラームの有効期限が切れるときに 呼び出されます。
イベント・リスナー
イベント・リスナーは、あらゆるインターフェースも実装することができます。 イベント・リスナーは、 単一の Java 仮想マシン (JVM) 内にある、非同期イベント用の軽量で非同期の通知メカニズムです。 通常、イベント・リスナーを使用すると、 単一アプリケーション内の Java EE コンポーネントが、さまざまな非同期イベントに関して相互に通知し合うことができます。

サポート・インターフェース

作業マネージャー
作業マネージャーは、管理者が Java EE アプリケーション用に作成するスレッド・プールです。 管理者は、このスレッド・プールのプロパティー、 および非同期 Bean がどの Java EE コンテキストを継承するかを決定するためのポリシーを指定します。
CommonJ 作業マネージャー
CommonJ 作業マネージャーは、作業マネージャーに類似しています。両者の違いは、CommonJ 作業マネージャーには、非同期 Bean 作業マネージャーのメソッドのサブセットが含まれていることです。CommonJ 作業マネージャーは Java EE 1.4 環境で動作しますが、作業マネージャーのそれぞれの JNDI 検索は WorkManager の新規インスタンスを戻しません。 有効範囲内にある作業マネージャーのすべての JNDI 検索は、同一のインスタンスを持ちます。
タイマー・マネージャー
タイマー・マネージャーは、commonj.timers.TimerManager インターフェースを実装します。 このインターフェースを使用すると、サーブレット、EJB アプリケーション、および JCA リソース・アダプターを含む、 Java EE アプリケーションで、将来のタイマー通知をスケジュールし、タイマー通知を受信することができます。 J2SE の java.util.Timer クラスの使用は、管理対象環境には不適切であるため、Application Server 仕様のタイマー・マネージャーは、アプリケーション・サーバーがサポートするその代替手段を提供しています。
イベント・ソース
イベント・ソースは、com.ibm.websphere.asynchbeans.EventSource インターフェースを実装します。 イベント・ソースは、単一 JVM 内の汎用のタイプ・セーフ非同期通知サーバーをサポートする システム提供オブジェクトです。 このイベント・ソースを使用すると、イベント・リスナー・オブジェクト (あらゆるインターフェースを実装可能) を登録できるようになります。
イベント・ソース・イベント
すべてのイベント・ソースは、listener count changed などの独自のイベントを生成できます。アプリケーションは、com.ibm.websphere.asynchbeans.EventSourceEvents クラスを実装する イベント・リスナー・オブジェクトを登録できます。このアクションにより、アプリケーションは、リスナーの追加や除去、またはリスナーによる予期しない例外のスローなどのイベントをキャッチすることが可能となります。

追加インターフェース (アラームおよびサブシステム・モニターを含む) については、『非同期有効範囲の開発』トピックで説明します。 このトピックでは、いくつかの非同期 Bean の拡張アプリケーションについて説明します。

トランザクション

すべての非同期 Bean メソッドは、独自のトランザクションを使用して呼び出されます。これは、一般的な エンタープライズ Bean のコンテナー管理トランザクションと同様です。この状態は、 Enterprise JavaBeans (EJB) メソッドが TX_NOT_SUPPORTED で呼び出されるときの状態とほとんど同じです。 ランタイムは、メソッドを呼び出す前にローカル・トランザクション内包を 開始します。非同期 Bean メソッドは、このトランザクションを呼び出し側の Java EE コンポーネントに対して行うことが可能な場合、 独自のグローバル・トランザクションを自由に開始できます。 例えば、エンタープライズ Bean でコンポーネントを作成する場合、その非同期 Bean を作成するメソッドは、TX_BEAN_MANAGED である必要があります。

例えば、非同期 Bean 内から Entity Bean を呼び出す場合は、現行のスレッドでグローバル・トランザクション・コンテキストが使用可能にされている必要があります。非同期 Bean オブジェクトは、ローカル・トランザクション・コンテキストを開始するので、メソッドが TX_REQUIRES またはそれと同等のものとしてマークされている Session Bean に、 すべての Entity Bean ロジックをカプセル化することができます。このプロセスにより、 グローバル・トランザクション・コンテキストが確立され、 そこから 1 つ以上の Entity Bean のメソッドにアクセスできます。

非同期 Bean メソッドが例外をスローすると、すべてのローカル・トランザクションがロールバックされます。 メソッドが正常に戻された場合、完了していないすべてのローカル・トランザクションは、その Bean 用に構成された未解決アクション・ポリシーに従って完了します。EJB メソッドは、独自の デプロイメント記述子を使用して、このポリシーを構成できます。非同期 Bean メソッドが独自のグローバル・トランザクションを開始してこのグローバル・トランザクションを コミットしない場合、コミットされなかったトランザクションは、メソッドが戻されるときに ロールバックされます。

Java EE コンポーネント・メタデータへのアクセス

非同期 Bean がセッション Bean などの Java EE コンポーネントの場合は、 メソッドが呼び出されるときに、そのコンポーネント独自のメタデータがアクティブになります。 非同期 Bean がシンプルな Java オブジェクトの場合は、 その Bean で、生成コンポーネントの Java EE コンポーネント・メタデータを使用できます。 非同期 Bean は、そのクリエーターと同様、java:comp 名前空間を検索できます。 この検索により、非同期 Bean は、 他の Java EE コンポーネントと同様に、 接続ファクトリーおよびエンタープライズ Bean にアクセスすることが可能となります。 また、生成コンポーネントの環境プロパティーも、非同期 Bean で使用できます。

java:comp 名前空間は、生成コンポーネントで使用可能なものと同一であり、同じ制限が適用されます。例えば、エンタープライズ Bean またはサーブレットに java:comp/env/ejb/MyEJB の EJB 参照がある場合、この EJB 参照は、非同期 Bean で使用することができます。 さらに、すべての接続ファクトリーは、生成コンポーネントと同じリソース共有有効範囲を使用します。

接続管理

非同期 Bean メソッドは、 このメソッドが作成する Java EE コンポーネントが java:comp リソース参照を使用して取得した接続を使用することができます (リソース参照について詳しくは、『参照』トピックを参照してください)。ただし、Bean メソッドは、get、use、または close パターンを使用してそれらの接続にアクセスする必要があります。 接続は、非同期 Bean 上のメソッドの呼び出し間ではキャッシュされません。 接続ファクトリーまたはデータ・ソースはキャッシュすることができますが、接続はメソッド呼び出しごとに検索および使用され、その後クローズされる必要があります。 非同期 Bean メソッドはグローバルな Java Naming and Directory Interface (JNDI) 名を使用して接続ファクトリーを検索できますが、以下の理由により、この方法はお勧めしません。

  • JNDI 名がアプリケーション内にハードコーディングされている (例えば、プロパティーまたは ストリング・リテラルとして)。
  • 接続ファクトリーは、共有有効範囲を指定する方法がないため共有されない。

非同期 Bean メソッドから接続にアクセスする正しい方法および誤った方法の両方が示されているコード例については、『例: 非同期 Bean 接続管理』トピックを参照してください。

非同期 Bean の据え置き開始

非同期 Bean は、Java EE サービス・コンテキスト情報のシリアライゼーションを許可することによって、 据え置き開始をサポートしています。 WorkManager インターフェースでの WorkWithExecutionContext createWorkWithExecutionContext(Work r) メソッドは、 WorkManager 上で使用可能になっている Java EE サービス・コンテキストのスナップショットを作成します。 その結果の WorkWithExecutionContext オブジェクトをシリアライズして、データベースまたはファイルに保管することができます。 これは、現行のセキュリティー ID やロケールなどの Java EE サービス・コンテキストを保管し、その後にそれらをインフレートし、 このコンテキスト内で何らかの作業を実行する必要がある場合に役立ちます。 WorkWithExecutionContext オブジェクトは、WorkManager インターフェースで startWork() および doWork() メソッドを使用して実行できます。

すべての WorkWithExecutionContext オブジェクトは、そのオブジェクトをシリアライズしたのと同じアプリケーションによって、デシリアライズする必要があります。 内部に含まれるオブジェクトを Java で正常にインフレートするためには、すべての EJB とクラスが存在していなければなりません。

据え置き開始およびセキュリティー

非同期 Bean セキュリティー・サービス・コンテキストは、Common Secure Interoperability Version 2 (CSIv2) ID アサーションを使用可能にすることが必要である場合があります。 ID アサーションは、WorkWithExecutionContext オブジェクトがデシリアライズされ、Java 認証・承認サービス (JAAS) サブジェクト ID 資格情報割り当てに対して実行される場合に必要です。 WorkWithExecutionContext オブジェクトを使用する際に ID アサーションを使用可能にする必要がある場合は、以下のトピックを参照してください。
  • Common Secure Interoperability バージョン 2 および Security Authentication Service 認証プロトコルの構成
  • ID アサーション

この製品のさまざまなバージョンから WorkWithExecutionContext オブジェクトと対話することに関する問題もあります。 『非同期 Bean との相互運用』を参照してください。

JPA 関連の制約

JPA 拡張パーシスタンス・コンテキスト内での非同期 Bean の使用はサポートされていません。

JPA 拡張パーシスタンス・コンテキストは、非同期 Bean のスケジューリングおよびマルチスレッド化機能と矛盾するため、 非同期 Bean スレッドからはアクセスできません。

同様に、非同期 Bean は、 javax.persistence.EntityManager (またはサブクラス) をパラメーターとして取るように作成することはできません。 これは、EntityManager インスタンスがスレッド・セーフにされることがないためです。


トピックのタイプを示すアイコン 概念トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=casb_asbover
ファイル名:casb_asbover.html