ヘッダーをスキップ

Oracle Containers for J2EE Enterprise JavaBeans開発者ガイド
10g(10.1.3.1.0)

B31852-03
目次
目次
索引
索引

戻る 次へ

18 EJB 2.1メッセージドリブンBeanの使用方法

この章では、EJB 2.1メッセージドリブンBeanを使用するために構成する必要のある様々なオプションについて説明します。

表18-1に、これらのオプションをリストし、基本オプション(ほとんどのアプリケーションに適用可能)であるか拡張オプション(より特殊なアプリケーションに適用可能)であるかを示します。

詳細は、次を参照してください。

J2CAを使用してメッセージ・サービス・プロバイダにアクセスするためのEJB 2.1 MDBの構成

Oracle JMSコネクタなどのJ2CAリソース・アダプタを使用してメッセージ・サービス・プロバイダにアクセスするようEJB 2.1 MDBを構成できます。

これを行うには、デプロイXMLを使用します(「デプロイXMLの使用方法」を参照)。


注意

メッセージ・サービス・プロバイダには、Oracle JMSコネクタなどのJ2CAリソース・アダプタを使用してアクセスすることをお薦めします。詳細は、「J2CAリソース・アダプタを使用せずにメッセージ・サービス・プロバイダにアクセスする場合の制限」を参照してください。 


OC4Jでは、2フェーズ・コミット(2PC)トランザクション用のXAファクトリと、2PCを必要としないトランザクション用の非XAファクトリの両方がサポートされます。

詳細は、次を参照してください。

デプロイXMLの使用方法

J2CAリソース・アダプタを使用してJMSメッセージ・サービス・プロバイダにアクセスするようEJB 2.1 MDBを構成するには、ejb-jar.xmlorion-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を構成するには、次のようにします。

  1. リソース・アダプタの名前を指定します。

    これを行うには、例18-1に示すように、orion-ejb-jar.xmlファイルの<message-driven-deployment>要素のresource-adapter属性を使用します。

  2. 必要なアクティブ化構成プロパティを指定します。

    アクティブ化構成プロパティを指定するには、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要素を使用してアクティブ化構成プロパティをオーバーライドまたは追加構成できます。

例18-1    J2CAメッセージ・サービス・プロバイダのorion-ejb-jar.xml

<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/MyQCFoc4j-ra.xmlファイルに定義し、接続先名OracleASjms/MyQueueoc4j-connectors.xmlに定義してあることを前提とします。2フェーズ・コミット(2PC)をサポートするXA対応ファクトリを定義するか、または2PCサポートが必要でない場合は非XAファクトリを定義します。詳細は、第23章「メッセージ・サービスの構成」を参照してください。

例18-2    J2CAメッセージ・サービス・プロバイダのejb-jar.xml

<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メッセージ・サービス・プロバイダのコネクション・ファクトリ名」を参照してください。

直接メッセージ・サービス・プロバイダにアクセスするためのEJB 2.1 MDBの構成

(J2CAリソース・アダプタを使用せずに)直接メッセージ・サービス・プロバイダにアクセスするようEJB 2.1 MDBを構成できます。


注意

メッセージ・サービス・プロバイダには、Oracle JMSコネクタなどのJ2CAリソース・アダプタを使用してアクセスすることをお薦めします。詳細は、次を参照してください。

 

これを行うには、デプロイXMLを使用します(「デプロイXMLの使用方法」を参照)。

OC4Jでは、2フェーズ・コミット(2PC)トランザクション用のXAファクトリと、2PCを必要としないトランザクション用の非XAファクトリの両方がサポートされます。2PCサポートの詳細は、「グローバル・トランザクションまたは2フェーズ・コミット(2PC)トランザクションへの参加方法」を参照してください。

デプロイXMLの使用方法

(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)」を参照してください。

構成を行うには、次のようにします。

  1. 必要なアクティブ化構成プロパティを指定します。

    アクティブ化構成プロパティを指定するには、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章「メッセージ・サービスの構成」を参照してください。

例18-3    J2CA以外のメッセージ・サービス・プロバイダのejb-jar.xml

<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>

使用する実際の名前は、メッセージ・サービス・プロバイダのインストール環境によって決まります。詳細は、次を参照してください。

Windowsオペレーティング・システムでの高速アンデプロイのためのMDBの構成

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秒ごとにデータベースをポーリングします。

Oracle RACフェイルオーバー用のMDBの構成

MDBアプリケーションがOEMS JMSデータベースをOracle RACデータベースとともに使用する場合は、次のようにデータベース・フェイルオーバー・シナリオを処理するようにアプリケーションを構成する必要があります。

デプロイXMLの使用方法

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秒です。

例18-4    MDBでのOracle RACフェイルオーバー用のorion-ejb-jar.xml

<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/>
...

 

Javaの使用方法

Oracle RACフェイルオーバーをサポートするには、接続の取得に失敗した場合に再試行するように、Oracle RACデータベースに対して実行しているスタンドアロンOEMS JMSデータベース・クライアントを構成する必要があります。

接続オブジェクトが無効かどうかを判断するには、com.evermind.sql.DbUtilのメソッドoracleFatalErrorを使用することをお薦めします(例18-5を参照)。その場合、必要に応じてデータベース接続を再度確立します。

例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インスタンスを取得できるように、少なくとも受信スレッドの数と同じに設定する必要があります。

詳細は、次を参照してください。

デプロイXMLの使用方法

パラレル・メッセージ処理は、orion-ejb-jar.xmlファイルで構成します。このオプションの構成方法は、使用するメッセージ・サービス・プロバイダのタイプによって決まります。

どちらの場合も、OC4Jを再起動して変更を適用する必要があります。

J2CAアダプタ・メッセージ・サービス・プロバイダ

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を参照してください。

J2CA以外のアダプタ・メッセージ・サービス・プロバイダ

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)にメッセージを挿入します。

デプロイXMLの使用方法

orion-ejb-jar.xmlファイルで、最大配信数を設定します。この値の構成方法は、使用しているメッセージドリブン・プロバイダのタイプによって決まります。

J2CAアダプタ・メッセージ・サービス・プロバイダ

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を参照してください。

J2CA以外のアダプタ・メッセージ・サービス・プロバイダ

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リソース・アダプタを使用してアクセスすることをお薦めします。詳細は、次を参照してください。

 

EJB 2.1 MDBの接続障害リカバリの構成

ネットワークやJMSサーバーの停止などのイベントを原因とする接続障害に対し、メッセージドリブンBeanのリスナー・スレッドでどのように応答するかを構成できます。

これらのオプションは、メッセージドリブンBeanのコンテナ管理のトランザクションにのみ適用されます。

接続障害リカバリ・オプションは、orion-ejb-jar.xmlファイル(「デプロイXMLの使用方法」を参照)を使用して構成できます。

フェイルオーバーの詳細は、「OC4J EJBアプリケーション・クラスタリング・サービスについて」を参照してください。

デプロイXMLの使用方法

orion-ejb-jar.xmlファイルで、デキュー再試行カウントおよび間隔を設定します。この値の構成方法は、使用しているメッセージドリブン・プロバイダのタイプによって決まります。

どちらの場合も、OC4Jを再起動して変更を適用する必要があります。

J2CAアダプタ・メッセージ・サービス・プロバイダ

J2CAリソース・アダプタを使用してメッセージ・サービス・プロバイダにアクセスする場合、Oracle JMSコネクタは、JMSリソースのポーリングを無制限に再試行します。この再試行間隔は、例18-6に示すようにアクティブ化構成プロパティEndpointFailureRetryIntervalで構成できます。

再試行後のメッセージのリカバリでは、メッセージの順序は保証されません。また、JMSトピックに対するMDBサブスクリプションが非永続的な場合、メッセージは失われるか、重複する可能性があります。

詳細は、表B-2EndpointFailureRetryIntervalを参照してください。

例18-6    orion-ejb-jar.xmlでの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>

J2CA以外のアダプタ・メッセージ・サービス・プロバイダ

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リソース・アダプタを使用してアクセスすることをお薦めします。詳細は、次を参照してください。

 

EJB 2.1 MDBのライフ・サイクル・コールバック・メソッドの構成

次に、javax.ejb.MessageDrivenBeanインタフェースでの指定に従って、メッセージドリブンBeanが実装する必要のあるEJB 2.1ライフ・サイクル・メソッドを示します(「Javaの使用方法」を参照)。

詳細は、「メッセージドリブンBeanのライフ・サイクル」を参照してください。

Javaの使用方法

例18-7では、EJB 2.1メッセージドリブンBeanのライフ・サイクル・コールバック・メソッドの実装方法を説明します。

例18-7    EJB 2.1 MDBのライフ・サイクル・コールバック・メソッドの実装

public void ejbRemove() {
    // when bean is removed
}



戻る 次へ
Oracle
Copyright © 2002, 2008 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引