Oracle Containers for J2EE Enterprise JavaBeans開発者ガイド 10g(10.1.3.1.0) B31852-03 |
|
この章では、EJB 2.1メッセージドリブンBeanを使用するために構成する必要のある様々なオプションについて説明します。
表18-1に、これらのオプションをリストし、基本オプション(ほとんどのアプリケーションに適用可能)であるか拡張オプション(より特殊なアプリケーションに適用可能)であるかを示します。
詳細は、次を参照してください。
表18-1 EJB 2.1メッセージドリブンBeanの構成オプション
オプション | タイプ |
---|---|
基本 |
|
基本 |
|
拡張 |
|
拡張 |
|
基本 |
|
拡張 |
|
拡張 |
|
拡張 |
|
基本 |
Oracle JMSコネクタなどのJ2CAリソース・アダプタを使用してメッセージ・サービス・プロバイダにアクセスするようEJB 2.1 MDBを構成できます。
これを行うには、デプロイXMLを使用します(「デプロイXMLの使用方法」を参照)。
注意 メッセージ・サービス・プロバイダには、Oracle JMSコネクタなどのJ2CAリソース・アダプタを使用してアクセスすることをお薦めします。詳細は、「J2CAリソース・アダプタを使用せずにメッセージ・サービス・プロバイダにアクセスする場合の制限」を参照してください。 |
OC4Jでは、2フェーズ・コミット(2PC)トランザクション用のXAファクトリと、2PCを必要としないトランザクション用の非XAファクトリの両方がサポートされます。
詳細は、次を参照してください。
J2CAリソース・アダプタを使用してJMSメッセージ・サービス・プロバイダにアクセスするようEJB 2.1 MDBを構成するには、ejb-jar.xml
とorion-ejb.jar.xml
という2つのデプロイXMLファイルを使用する必要があります。orion-ejb-jar.xml
ファイル構成を使用して、ejb-jar.xml
の設定をオーバーライド、またリソース・アダプタのOC4J固有の設定を追加します。たとえば、ejb-jar.xml
で定義するコネクション・ファクトリおよび接続先名は、ローカルJNDI環境には存在しない論理名である場合があります。デプロイ担当者は、orion-ejb-jar.xml
ファイル内のこれらの設定をオーバーライドし、実際の名前にマッピングできます。論理名のマッピングの詳細は、「JMS宛先またはコネクション・リソース・マネージャのコネクション・ファクトリへの環境参照の構成(JMS 1.0)」を参照してください。
J2CAメッセージ・サービス・プロバイダを使用するようにEJB 2.1 MDBを構成するには、次のようにします。
これを行うには、例18-1に示すように、orion-ejb-jar.xml
ファイルの<message-driven-deployment>
要素のresource-adapter属性を使用します。
アクティブ化構成プロパティを指定するには、orion-ejb-jar.xml
ファイルに含まれる<message-driven-deployment>
要素の<config-property>
要素と(例18-1を参照)、ejb-jar.xml
ファイルに含まれる<message-driven>
要素の<activation-config-property>
要素(例18-2を参照)の任意の組合せを使用します。orion-ejb-jar.xml
ファイルの構成は、ejb-jar.xml
ファイルの構成をオーバーライドします。
詳細は、次を参照してください。
例18-1に、orion-ejb-jar.xml
ファイルを構成して、OracleASjms
という名前のOracle JMSリソース・アダプタを使用するように
このメッセージドリブンBeanを構成する方法を示します。resource-adapter
属性を設定する必要があります。
オプションで、1つ以上のconfig-property
要素を使用してアクティブ化構成プロパティをオーバーライドまたは追加構成できます。
<message-driven-deployment
name="JCA_QueueMDB"
resource-adapter="OracleASjms">
...
<config-property>
<config-property-name>DestinationName</config-property-name>
<config-property-value>OracleASJMSRASubcontext/MyQ</config-property-value>
</config-property>
...
</message-driven-deployment>
例18-2に、ejb-jar.xml
を構成して、OracleASjms
という名前のOracle JMSリソース・アダプタを使用するように
メッセージドリブンBeanを構成する方法を示します。メッセージ・サービス・プロバイダの構成時に、コネクション・ファクトリOracleASjms/MyQCF
をoc4j-ra.xml
ファイルに定義し、接続先名OracleASjms/MyQueue
をoc4j-connectors.xml
に定義してあることを前提とします。2フェーズ・コミット(2PC)をサポートするXA対応ファクトリを定義するか、または2PCサポートが必要でない場合は非XAファクトリを定義します。詳細は、第23章「メッセージ・サービスの構成」を参照してください。
<message-driven>
<ejb-name>JCA_QueueMDB</ejb-name>
<ejb-class>test.JCA_MDB</ejb-class>
<messaging-type>javax.jms.MessageListener</messaging-type>
<transaction-type>Container</transaction-type>
<activation-config>
<activation-config-property>
<activation-config-property-name>
DestinationType
</activation-config-property-name>
<activation-config-property-value>
javax.jms.Queue
</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>
DestinationName
</activation-config-property-name>
<activation-config-property-value>
OracleASjms/MyQueue
</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>
ConnectionFactoryJndiName
</activation-config-property-name>
<activation-config-property-value>
OracleASjms/MyQCF
</activation-config-property-value>
</activation-config-property>
</activation-config>
</message-driven>
表A-3にリストされているオプションの属性も設定できます。
使用する実際の名前は、メッセージ・サービス・プロバイダのインストール環境によって決まります。詳細は、「J2CAメッセージ・サービス・プロバイダのコネクション・ファクトリ名」を参照してください。
(J2CAリソース・アダプタを使用せずに)直接メッセージ・サービス・プロバイダにアクセスするようEJB 2.1 MDBを構成できます。
注意 メッセージ・サービス・プロバイダには、Oracle JMSコネクタなどのJ2CAリソース・アダプタを使用してアクセスすることをお薦めします。詳細は、次を参照してください。
|
これを行うには、デプロイXMLを使用します(「デプロイXMLの使用方法」を参照)。
OC4Jでは、2フェーズ・コミット(2PC)トランザクション用のXAファクトリと、2PCを必要としないトランザクション用の非XAファクトリの両方がサポートされます。2PCサポートの詳細は、「グローバル・トランザクションまたは2フェーズ・コミット(2PC)トランザクションへの参加方法」を参照してください。
(J2CAリソース・アダプタを使用せずに)直接JMSメッセージ・サービス・プロバイダにアクセスするようEJB 2.1 MDBを構成するには、ejb-jar.xml
またはorion-ejb.jar.xml
のいずれかのデプロイXMLファイルを使用します。orion-ejb-jar.xml
ファイルの構成を使用して、ejb-jar.xml
の設定をオーバーライドまたはOC4J固有の設定を追加します。たとえば、ejb-jar.xml
で定義するコネクション・ファクトリおよび接続先名は、ローカルJNDI環境には存在しない論理名である場合があります。デプロイ担当者は、orion-ejb-jar.xml
ファイル内のこれらの設定をオーバーライドし、実際の名前にマッピングできます。論理名のマッピングの詳細は、「JMS宛先またはコネクション・リソース・マネージャのコネクション・ファクトリへの環境参照の構成(JMS 1.0)」を参照してください。
構成を行うには、次のようにします。
アクティブ化構成プロパティを指定するには、orion-ejb-jar.xml
ファイルに含まれる<message-driven-deployment>
要素の<config-property>
要素と、ejb-jar.xml
ファイルに含まれる<message-driven
>要素の<activation-config-property>
要素(例18-3を参照)の任意の組合せを使用します。orion-ejb-jar.xml
ファイルの構成は、ejb-jar.xml
ファイルの構成をオーバーライドします。
詳細は、次を参照してください。
例18-3に、ejb-jar.xml
を構成して、J2CA以外のJMSメッセージ・サービス・プロバイダを使用するようにメッセージドリブンBeanを構成する方法を示します。メッセージ・サービス・プロバイダの構成時に、コネクション・ファクトリjms/MyQCF
およびキューjms/MyQueue
を定義してあることを前提とします。2フェーズ・コミット(2PC)をサポートするXA対応ファクトリを定義するか、または2PCサポートが必要でない場合は非XAファクトリを定義します。詳細は、第23章「メッセージ・サービスの構成」を参照してください。
<message-driven>
<ejb-name>QueueMDB</ejb-name>
<ejb-class>test.QueueMDB</ejb-class>
<message-destination-type>javax.jms.Queue</message-destination-type>
<transaction-type>Container</transaction-type>
<activation-config>
<activation-config-property>
<activation-config-property-name>
ConnectionFactoryJndiName
</activation-config-property-name>
<activation-config-property-value>
jms/MyQCF
</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>
DestinationName
</activation-config-property-name>
<activation-config-property-value>
jms/MyQueue
</activation-config-property-value>
</activation-config-property>
</activation-config>
</message-driven>
使用する実際の名前は、メッセージ・サービス・プロバイダのインストール環境によって決まります。詳細は、次を参照してください。
MDBを使用する場合、MDBは着信メッセージを待機する受信状態にブロックされています。Windows以外の環境では、MDBが待機状態のときにOC4Jをシャットダウンした場合、OC4Jは適時にシャットダウンします。
OEMS JMSデータベース・プロバイダ(「OEMS JMSデータベース: アドバンスト・キューイング(AQ)ベース・プロバイダ」を参照)でメッセージドリブンBeanを使用し、OC4JがWindows環境で稼働している場合、またはバックエンド・データベースがWindows環境で稼働し、MDBが待機状態のときにOC4Jをシャットダウンした場合は、OC4Jインスタンスを停止できず、MDBを適時にアンデプロイできません。この場合、OC4Jプロセスが2.5時間以上停止します。
oracle.mdb.fastUndeploy
システム・プロパティ(「システム・プロパティの使用方法」を参照)を使用している場合は、Windows環境でMDBの動作を変更して、メッセージドリブンBeanをアンデプロイ可能にし、必要に応じてOC4Jを適時にシャットダウンすることを可能にできます。
oracle.mdb.fastUndeploy
システム・プロパティには、MDBが着信メッセージの処理中でなく待機状態のときに、OC4Jがデータベースをポーリングして(データベースへのラウンドトリップが必要)、セッションがシャットダウンされているかどうかを確認する頻度(正の整数の秒数)が設定されます。
パフォーマンスを最適化するために、妥当な値は120秒以上です。
このプロパティを120(秒)に設定した場合、OC4Jでは120秒ごとにデータベースをポーリングします。
MDBアプリケーションがOEMS JMSデータベースをOracle RACデータベースとともに使用する場合は、次のようにデータベース・フェイルオーバー・シナリオを処理するようにアプリケーションを構成する必要があります。
Oracle RACフェイルオーバーをサポートするには、例18-4に示すように、orion-ejb-jar.xml
ファイルの要素message-driven-deployment
の属性dequeue-retry-count
およびdequeue-retry-interval
を構成する必要があります。
dequeue-retry-count
属性は、障害が発生した場合にデータベース接続を再試行する回数をコンテナに指示します。デフォルトは0回です。
dequeue-retry-interval
属性は、次の再試行を行う前にOracle RACデータベースのフェイルオーバーの完了を待つ時間の長さをコンテナに指示します。デフォルトは60秒です。
<message-driven-deployment name="MessageBeanTpc"
connection-factory-location="java:comp/resource/cartojms1/TopicConnectionFactories/aqTcf"
destination-location="java:comp/resource/cartojms1/Topics/topic1"
subscription-name="MDBSUB"
dequeue-retry-count=3
dequeue-retry-interval=90/>
...
Oracle RACフェイルオーバーをサポートするには、接続の取得に失敗した場合に再試行するように、Oracle RACデータベースに対して実行しているスタンドアロンOEMS JMSデータベース・クライアントを構成する必要があります。
接続オブジェクトが無効かどうかを判断するには、com.evermind.sql.DbUtil
のメソッドoracleFatalError
を使用することをお薦めします(例18-5を参照)。その場合、必要に応じてデータベース接続を再度確立します。
import com.evermind.sql.DbUtil; ...
getMessage(QueueSesssion session) {
try {
QueueReceiver rcvr = session.createReceiver(rcvrQueue);
Message msgRec = rcvr.receive();
}
catch(Exception e ) {
if (exc instanceof JMSException) {
JMSException jmsexc = (JMSException) exc;
sql_ex = (SQLException)(jmsexc.getLinkedException());
db_conn = oracle.jms.AQjmsSession)session.getDBConnection();
if ((DbUtil.oracleFatalError(sql_ex, db_conn)) {
// failover logic
}
}
}
}
デフォルトでは、OC4Jはメッセージ・ロケーションのメッセージをポーリングするために1つの受信スレッドを使用します。
2つ以上の受信スレッドを使用すると、メッセージをパラレルに受信できるため、パフォーマンスが向上する可能性があります。
メッセージ・ロケーションがトピックの場合、受信スレッドの数は1に固定されます。
メッセージ・ロケーションがキューの場合、受信スレッドの数を構成できます(「デプロイXMLの使用方法」を参照)。
MDBプールのBeanインスタンスの最小数は、受信スレッドがメッセージ処理のためにプールからBeanインスタンスを取得できるように、少なくとも受信スレッドの数と同じに設定する必要があります。
詳細は、次を参照してください。
パラレル・メッセージ処理は、orion-ejb-jar.xml
ファイルで構成します。このオプションの構成方法は、使用するメッセージ・サービス・プロバイダのタイプによって決まります。
どちらの場合も、OC4Jを再起動して変更を適用する必要があります。
J2CAアダプタ・メッセージ・サービス・プロバイダを使用している場合は、<config-property>
要素を使用して、ReceiverThreads構成プロパティを設定します。
たとえば、J2CAアダプタ・メッセージ・サービス・プロバイダを使用しており、3つのメッセージドリブンBeanインスタンスでメッセージ・ロケーションからパラレルに受信する場合、次のようにReceiverThreads
構成プロパティを3
に設定します。
<message-driven-deployment ... >
...
<config-property>
<config-property-name>RecieverThreads</config-property-name>
<config-property-value>3</config-property-value>
</config-property>
...
</message-driven-deployment>
ReceiverThreadsの詳細は、表B-2を参照してください。
OEMS JMSやOEMS JMSデータベースなどのJ2CA以外のアダプタ・メッセージ・サービス・プロバイダを使用している場合は、<message-driven-deployment>
要素のlistener-threads属性を使用します。
たとえば、OEMS JMSまたはOEMS JMSデータベースを使用しており、3つのメッセージドリブンBeanインスタンスでメッセージ・ロケーションからパラレルに受信する場合、次のようにlistener-threads
属性を3
に設定します。
<message-driven-deployment ... listener-threads="3" ... </message-driven-deployment>
listener-threadsの詳細は、表A-3を参照してください。
注意 メッセージ・サービス・プロバイダには、Oracle JMSコネクタなどのJ2CAリソース・アダプタを使用してアクセスすることをお薦めします。詳細は、次を参照してください。
|
メッセージドリブンBeanのonMessage
メソッドがエラーを返した場合、つまり、確認応答操作の起動に失敗した場合、例外をスローした場合、またはその両方の場合(「デプロイXMLの使用方法」を参照)に、OC4Jがこのメソッドにメッセージの即時再配信を試行する最大回数を構成できます。
この回数の再配信が行われた後で、メッセージは配信不能とみなされ、メッセージ・サービス・プロバイダのポリシーに従って処理されます。たとえば、OEMS JMSはその例外キュー(jms/Oc4jJmsExceptionQueue
)にメッセージを挿入します。
orion-ejb-jar.xml
ファイルで、最大配信数を設定します。この値の構成方法は、使用しているメッセージドリブン・プロバイダのタイプによって決まります。
J2CAアダプタ・メッセージ・サービス・プロバイダを使用している場合は、<config-property>
要素を使用して、MaxDeliveryCnt構成プロパティを設定します。
たとえば、J2CAアダプタ・メッセージ・サービス・プロバイダを使用していて、最大配信数を3に設定する場合は、次のようにします。
<message-driven-deployment ... >
...
<config-property>
<config-property-name>MaxDeliveryCnt</config-property-name>
<config-property-value>3</config-property-value>
</config-property>
...
</message-driven-deployment>
MaxDeliveryCntの詳細は、表B-2を参照してください。
OEMS JMSやOEMS JMSデータベースなどのJ2CA以外のアダプタ・メッセージ・サービス・プロバイダを使用している場合は、<message-driven-deployment>
要素のmax-delivery-count属性を使用します。
たとえば、OEMS JMSまたはOEMS JMSデータベースを使用していて、最大配信数を3に設定する場合は、次のようにします。
<message-driven-deployment ... max-delivery-count="3" ... </message-driven-deployment>
max-delivery-countの詳細は、表A-3を参照してください。
注意 メッセージ・サービス・プロバイダには、Oracle JMSコネクタなどのJ2CAリソース・アダプタを使用してアクセスすることをお薦めします。詳細は、次を参照してください。
|
ネットワークやJMSサーバーの停止などのイベントを原因とする接続障害に対し、メッセージドリブンBeanのリスナー・スレッドでどのように応答するかを構成できます。
これらのオプションは、メッセージドリブンBeanのコンテナ管理のトランザクションにのみ適用されます。
接続障害リカバリ・オプションは、orion-ejb-jar.xml
ファイル(「デプロイXMLの使用方法」を参照)を使用して構成できます。
フェイルオーバーの詳細は、「OC4J EJBアプリケーション・クラスタリング・サービスについて」を参照してください。
orion-ejb-jar.xml
ファイルで、デキュー再試行カウントおよび間隔を設定します。この値の構成方法は、使用しているメッセージドリブン・プロバイダのタイプによって決まります。
どちらの場合も、OC4Jを再起動して変更を適用する必要があります。
J2CAリソース・アダプタを使用してメッセージ・サービス・プロバイダにアクセスする場合、Oracle JMSコネクタは、JMSリソースのポーリングを無制限に再試行します。この再試行間隔は、例18-6に示すようにアクティブ化構成プロパティEndpointFailureRetryIntervalで構成できます。
再試行後のメッセージのリカバリでは、メッセージの順序は保証されません。また、JMSトピックに対するMDBサブスクリプションが非永続的な場合、メッセージは失われるか、重複する可能性があります。
詳細は、表B-2のEndpointFailureRetryIntervalを参照してください。
<message-driven-deployment ... >
...
<config-property>
<config-property-name>EndpointFailureRetryInterval</config-property-name>
<config-property-value>20000</config-property-value>
</config-property>
...
</message-driven-deployment>
OEMS JMSやOEMS JMSデータベースなどのJ2CA以外のアダプタ・メッセージ・サービス・プロバイダを使用している場合は、<message-driven-deployment>
要素のdequeue-retry-countおよびdequeue-retry-interval属性を使用します。デフォルトのデキュー再試行カウントは0で、デフォルトのデキュー再試行間隔は60秒です。
たとえば、OEMS JMSまたはOEMS JMSデータベースを使用していて、デキュー再試行カウントを3に設定し、デキュー再試行間隔を90秒に設定する場合は、次のようにします。
<message-driven-deployment ... dequeue-retry-count="3" dequeue-retry-interval="90" ... </message-driven-deployment>
dequeue-retry-countおよびdequeue-retry-intervalの詳細は、表A-3を参照してください。
注意 メッセージ・サービス・プロバイダには、Oracle JMSコネクタなどのJ2CAリソース・アダプタを使用してアクセスすることをお薦めします。詳細は、次を参照してください。
|
次に、javax.ejb.MessageDrivenBean
インタフェースでの指定に従って、メッセージドリブンBeanが実装する必要のあるEJB 2.1ライフ・サイクル・メソッドを示します(「Javaの使用方法」を参照)。
詳細は、「メッセージドリブンBeanのライフ・サイクル」を参照してください。
例18-7では、EJB 2.1メッセージドリブンBeanのライフ・サイクル・コールバック・メソッドの実装方法を説明します。
public void ejbRemove() {
// when bean is removed
}
|
Copyright © 2002, 2008 Oracle Corporation. All Rights Reserved. |
|