3.16.1 リソースアダプタのライフサイクル管理
Connector 1.5仕様に準拠したリソースアダプタを利用する場合,J2EEサーバによってリソースアダプタのライフサイクルを管理できます。
リソースアダプタのライフサイクル管理とは,リソースアダプタの開始処理と停止処理を,J2EEサーバで管理する機能です。
(1) 前提条件
リソースアダプタのライフサイクル管理は,リソースアダプタが次の条件を満たす場合に有効になります。
-
リソースアダプタに,「(2) ライフサイクル管理に使用するクラス」で示すクラスが実装されている。
-
DD(ra.xml)の<connector>-<resourceadapter>-<resourceadapter-class>に,javax.resource.spi.ResourceAdapterインタフェースを実装したJavaBeansのクラス名を指定している。
なお,DDの<connector>-<resourceadapter>-<resourceadapter-class>の指定が省略されている場合,リソースアダプタのライフサイクル管理は実行されません。
(2) ライフサイクル管理に使用するクラス
リソースアダプタのライフサイクル管理に使用するクラスについて説明します。使用するクラスには,リソースアダプタでの実装が必要なクラスと,J2EEサーバが提供するクラスがあります。
(a) リソースアダプタで実装が必要なクラス
リソースアダプタでは,次のクラスの実装が必要です。なお,これらのクラスはJavaBeanとして実装することが,Connector 1.5仕様で規定されています。
-
javax.resource.spi.ResourceAdapterインタフェースの実装クラス
-
javax.resource.spi.ManagedConnectionFactoryインタフェースの実装クラス
-
AdminObject(管理対象オブジェクト)の実装クラス
詳細な実装については,Connector 1.5仕様を参照してください。
(b) J2EEサーバが提供するクラス
J2EEサーバは,次のクラスを提供します。
-
javax.resource.spi.work.WorkManagerインタフェースの実装クラス
このクラスには,doWork(Work)メソッド,scheduleWork(Work)メソッド,startWork(Work)メソッドなどが実装されています。
-
javax.resource.spi.BootstrapContextインタフェースの実装クラス
このクラスには,createTimer()メソッド,getWorkManager()メソッド,およびgetXATerminator()メソッドが実装されています。
なお,アプリケーションサーバでは,BootstrapContextインタフェースのgetXATerminatorメソッドを呼び出した場合,nullが返却されるように実装されています。
(3) ライフサイクル管理の制御
ここでは,ライフサイクル管理の対象になる,リソースアダプタの開始処理と停止処理の制御について説明します。
リソースアダプタの開始処理および停止処理は,次のタイミングで実行されます。
-
J2EEリソースアダプタを開始または停止したとき(cjstartrarコマンドまたはcjstoprarコマンドを実行したとき)
-
J2EEサーバを起動または停止したとき(cjstartsvコマンドまたはcjstopsvコマンドを実行したとき)
-
リソースアダプタを含むアプリケーションを開始または停止したとき(cjstartappコマンドまたはcjstopappコマンドを実行したとき)
(a) リソースアダプタの開始処理を実行した場合の制御
リソースアダプタの開始処理を実行した場合の制御の流れを次の図に示します。
リソースアダプタの開始処理によって実行される制御について説明します。なお,項番は図中の数字と対応しています。
-
WorkManager(javax.resource.spi.work.WorkManagerインタフェースの実装クラス)が生成されます。
-
BootstrapContext(javax.resource.spi.BootstrapContextインタフェースの実装クラス)が生成されます。
-
ResourceAdapterJavaBean(javax.resource.spi.ResourceAdapterインタフェースの実装クラス)が生成されます。
ResourceAdapterJavaBeanとして生成される実装クラスは,リソースアダプタのDD(ra.xml)の<connector>-<resourceadapter>-<resourceadapter-class>に指定したクラスです。
このタグで指定したクラスのインスタンス化に失敗した場合,リソースアダプタの開始が失敗します※。このとき,KDJE48589-Eのメッセージが出力されます。
-
ResourceAdapterJavaBeanにプロパティが設定されます。
DD(ra.xml)の<connector>-<resourceadapter>-<config-property>に指定した値は,3.で生成されたResourceAdapterJavaBeanに設定されます。設定は,JavaBeanの仕様に従い,setterメソッドで実行されます。setterメソッドの呼び出しで例外が発生した場合は,KDJE48594-Wのメッセージが出力されます。ただし,処理は継続されます。
-
javax.resource.spi.ResourceAdapterインタフェースのstartメソッドが呼び出され,リソースアダプタが開始されます。
このメソッドの呼び出しによって例外がスローされた場合は,リソースアダプタの開始が失敗します※。このとき,KDJE48590-Eのメッセージが出力されます。
-
ResourceAdapterJavaBeanとManagedConnectionFactoryJavaBeanが関連づけられます(Outboundの場合)。
ライフサイクル管理機能を使用する場合,javax.resource.spi.ManagedConnectionFactoryインタフェースの実装クラスはjavax.resource.spi.ResourceAdapterAssociationインタフェースを実装しています。ResourceAdapterJavaBeanとManagedConnectionFactoryの関連づけは,javax.resource.spi.ResourceAdapterAssociationインタフェースのsetResourceAdapter(ResourceAdapter)メソッドで実行されます。
また,次の場合には,リソースアダプタの開始が失敗します※。このとき,KDJE48591-Eが出力されます。
-
ManagedConnectionFactoryJavaBeanがjavax.resource.spi.ResourceAdapterAssociationインタフェースを実装していなかった場合
-
setResourceAdapterメソッドの呼び出しに対して例外がスローされた場合
-
-
AdminObjectJavaBean(管理対象オブジェクト)が生成され,プロパティが設定されます。
AdminObjectJavaBeanとして生成される実装クラスは,リソースアダプタのDD(ra.xml)の<connector>-<resourceadapter>-<adminobject>-<adminobject-class>に指定したクラスです。このタグで指定したクラスのインスタンス化に失敗した場合,リソースアダプタの開始が失敗します※。このとき,KDJE48597-Eのメッセージが出力されます。
また,DD(ra.xml)の<connector>-<resourceadapter>-<adminobject>-<config-property>で指定した値が,AdminObjectJavaBeanに設定されます。設定は,JavaBeanの仕様に従い,setterメソッドで実行されます。AdminObjectJavaBeanのsetterメソッドの呼び出しで例外が発生した場合は,KDJE48598-Wのメッセージが出力されます。ただし,処理は継続されます。
- 注※
-
アプリケーションに含まれるリソースアダプタの場合,リソースアダプタの開始が失敗したときには,そのリソースアダプタを含むアプリケーションの開始処理も失敗します。
(b) リソースアダプタの停止処理を実行した場合の制御
リソースアダプタの停止処理を実行した場合の制御を次の図に示します。
リソースアダプタの停止処理によって実行される制御について説明します。なお,項番は図中の数字と対応しています。
-
停止するリソースアダプタを参照しているEJB,サーブレット,Message-driven Beanがすべて停止していることが確認されます。
次の要素が使用されていないことが確認されます。
-
Inboundリソースアダプタ
-
コネクションファクトリ
-
管理対象オブジェクト
これらが使用されていた場合は,リソースアダプタの停止処理が中止されます。
-
-
AdminObjectJavaBean(管理対象オブジェクト)が破棄されます。
-
javax.resource.spi.ResourceAdapterインタフェースのstopメソッドが呼び出され,リソースアダプタが停止します。
このメソッドの呼び出しによって例外がスローされた場合は,KDJE48590-Eのメッセージが出力されて,リソースアダプタの停止処理が失敗します。
-
ResourceAdapterJavaBeanが破棄されます。
(c) リソースアダプタの状態遷移
リソースアダプタは,リソースアダプタの開始処理または停止処理が実行されたタイミングで,「開始状態」または「停止状態」に遷移します。
リソースアダプタの状態遷移を次の図に示します。
(4) ライフサイクル管理機能を使用するときの注意
ライフサイクル管理機能を使用する場合は,次の点に注意してください。
-
J2EEサーバにデプロイされているリソースアダプタが複数ある場合,開始および停止処理が実行される順序は不定です。また,アプリケーションに含まれるリソースアダプタが複数ある場合,開始および停止処理が実行される順序は不定です。実行順序に依存する処理がある場合,動作は保証されません。
-
アプリケーションに含まれるリソースアダプタの場合,アプリケーション内に含まれるEJBやServletの開始処理よりも前に,リソースアダプタの開始処理が実行されます。また,アプリケーション内に含まれるEJBやServletの停止処理よりもあとで,リソースアダプタの停止処理が実行されます。
-
ResourceAdapter.stopの処理では,次に示す処理を適切に実行してください。
-
BootstrapContext.createTimerで生成したTimerの破棄(Timer#cancel)
-
WorkManagerに登録したWorkオブジェクトへの終了指示(Work#release)
-