5 MDBのプログラミングと構成:主なステップ

EJB 3.0以前の型式のXML記述子を使用してMDBの動作を構成するためのMDB実装に関して、ステップごとの説明を調べます。

MDBの主要デプロイメント要素のまとめは、MDBのデプロイメント要素とアノテーションを参照してください。トピックMDBの主要デプロイメント要素の紹介は、JMSトピックを使用したMDBの構成とデプロイを参照してください。

この章には次の項が含まれます:

必須のJMS構成

JMS接続ファクトリおよびJMS宛先を構成するステップを調べます。

次の項のステップは、次の適切なJMSコンポーネントへのアクセス権を持っているものと想定しています。

  • JMS接続ファクトリ。

    接続ファクトリは、トランザクションMDBをサポートするために、XAトランザクション(グローバルJTAトランザクション)に対応している必要があります。

    デフォルトのWebLogic JMS MDB接続ファクトリはXAに対応しており、WebLogicクラスタ上で自動生成され、WebLogic JMS宛先から消費するMDBの大部分には十分です。WebLogic JMSのデフォルト接続ファクトリの詳細は、『Oracle WebLogic Server JMSリソースの管理』WebLogic Serverにより定義されたデフォルト接続ファクトリの使用に関する項を参照してください。

    カスタムWebLogic JMS接続ファクトリを作成する方法の手順は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプシステム・モジュールにおける接続ファクトリの作成に関する項を参照してください。

    他のJMSプロバイダでは、デフォルトの動作と構成方法は異なります。Oracle以外のJMSプロバイダ接続ファクトリを使用する場合は、そのベンダー提供のドキュメントを参照してください。

  • JMS宛先

    WebLogic JMS宛先の構成手順については、Oracle WebLogic Server管理コンソール・オンライン・ヘルプメッセージングの構成に関する項を参照してください。

    ノート:

    JMSプロバイダがリモートのOracle WebLogic Server JMSプロバイダか外部JMSプロバイダであり、「外部JMSサーバー・マッピングを使用するかどうか」でお薦めされているラッパー手法を使用する場合は、ローカルではないJMSコンポーネントを構成するだけでなく、ローカルのJNDIツリーで外部接続ファクトリと外部JMS宛先も構成する必要があります。

MDBクラスの作成とデプロイメント要素の構成

Oracle WebLogic ServerでメッセージドリブンBeanを実装するステップを調べます。.

メッセージドリブンBeanを実装するには、次のステップを実行します。

  1. javax.ejb.MessageDrivenBeanインタフェースとjavax.jms.MessageListenerインタフェースの両方を実装するソース・ファイル(メッセージドリブンBeanクラス)を作成します。

    MDBクラスでは、以下のメソッドを定義する必要があります。

    • MDBの各新規インスタンス作成後にコンテナが呼び出す1つのejbCreate()メソッド。

    • EJBのコンテナがメッセージを受け取ったときに呼び出すonMessage()メソッドを1つ。このメソッドには、メッセージを処理するビジネス・ロジックが格納されます。

    • 環境について情報(特定のデプロイメント記述子の値)をBeanのインスタンスに提供するsetMessageDrivenContext{}メソッドを1つ。「メッセージドリブンBeanコンテキストの使用」を参照してください。

    • メッセージドリブンBeanインスタンスをフリー・プールから削除するejbRemove()メソッドを1つ。

    ノート:

    大半のEJB 3.2アプリケーションは、単一のメソッドonMessage()を定義するjavax.jms.MessageListenerのみを実装します。ただし、メッセージドリブンBeanはメソッドのないリスナー・インタフェースの実装を許可されています。メソッドのないインタフェースを実装するBeanは、Beanクラス、およびjava.lang.Objectを除いた任意のスーパークラスのすべての非静的パブリック・メソッドをメッセージ・リスナー・メソッドとして公開します。

  2. 次の例のように、ejb-jar.xmlでMDBを宣言します。
    <ejb-jar>
        <enterprise-beans>
            <message-driven>
                <ejb-name>...</ejb-name>
                <ejb-class>...</ejb-class>
                <transaction-type>Container</transaction-type>
                <acknowledge-mode>auto_acknowledge</acknowledge-mode>
                <message-driven-destination>
                    <destination-type>javax.jms.Topic</destination-type>
                    <subscription-durability>Durable</subscription-durability>
                </message-driven-destination>
            </message-driven>
        </enterprise-beans>
        <assembly-descriptor>
            <container-transaction>
                <method>
                    <ejb-name>...</ejb-name>
                    <method-name>onMessage()</method-name>
                </method>
                <trans-attribute>Required</trans-attribute>
            </container-transaction>
        </assembly-descriptor>
    </ejb-jar>
    

    構成する主要な動作は以下のとおりです。

  3. weblogic-ejb-jar.xmlmessage-driven-descriptor要素でMDBのWebLogic固有の動作を構成します。たとえば:
    <weblogic-ejb-jar>
        <weblogic-enterprise-bean>
            <ejb-name>exampleMessageDrivenA</ejb-name>
            <message-driven-descriptor>
                <pool>...</pool>
                <timer-descriptor>...</timer-descriptor>
                <destination-jndi-name>...</destination-jndi-name>
                <initial-context-factory>...</initial-context-factory>
                <provider-url>...</provider-url>
                <connection-factory-jndi-name>...</connection-factory-jndi-name>
                <jms-polling-interval-seconds>...</jms-polling-interval-seconds>
                <jms-client-id>...</jms-client-id>
                <generate-unique-jms-client-id>...</generate-unique-jms-client-id>
                <durable-subscription-deletion>...</durable-subscription-deletion>
                <max-messages-in-transaction>...</max-messages-in-transaction>
                <init-suspend-seconds>...</init-suspend-seconds>
                <max-suspend-seconds>...</max-suspend-seconds>
            </message-driven-descriptor>
        </weblogic-enterprise-bean>
    </weblogic-ejb-jar>
    

    構成する際の重要な要素は、宛先へのアクセス方法の指定です。通常、ベスト・プラクティスに従うアプリケーションでは、initial-context-factoryprovider-urlフィールドを指定する必要はありません。手順については、「宛先用のMDBの構成」を参照してください

  4. 『Oracle WebLogic Server Enterprise JavaBeansバージョン2.1の開発』Javaソースのコンパイルに関する項の手順に従い、MDBクラスをコンパイルして生成します。
  5. 『Oracle WebLogic Serverへのアプリケーションのデプロイ』アプリケーションおよびモジュールのデプロイメント準備に関する項の手順に従い、BeanをOracle WebLogic Serverにデプロイします。

    デプロイメント時にOracle WebLogic ServerでMDBのJMS宛先を見つけることができない場合、デプロイメントは成功しますが、宛先が見つからなかったことを示すメッセージがOracle WebLogic Serverから出力されます。その場合、MDBは、JMSキューへの接続が成功するまで、定期的に接続を試行します。詳細については、「クラスタ化MDBの移行とリカバリ」を参照してください