WebSphere Application Server for z/OS, Version 6.0.x   
             オペレーティング・システム: z/OS

             目次と検索結果のパーソナライズ化

メッセージ駆動型 Bean を使用するエンタープライズ・アプリケーションの開発

このタスクを使って、メッセージ駆動型 Bean を使用するエンタープライズ・アプリケーションを開発します。 メッセージ駆動型 Bean は、リスナーがモニターしている入力宛先にメッセージが到着すると、J2C アクティベーション・スペックまたは JMS リスナーによって呼び出されます。

このタスクについて

着信メッセージのビジネス・プロセスを、別のエンタープライズ Bean で代行するように、メッセージ駆動型 Bean を開発することをお勧めします。 そうすることにより、メッセージ処理とビジネス・プロセスを明確に分離することができます。 さらに、ビジネス・プロセスを、着信メッセージの到着により呼び出したり、 あるいは WebSphere J2EE クライアントなどから呼び出したりすることができるようになります。 応答は、送信側 Bean として動作している別のエンタープライズ Bean で処理することも、 メッセージ駆動型 Bean で処理することもできます。

メッセージ駆動型 Bean を使用するエンタープライズ・アプリケーションは、 メッセージ駆動型 Bean がホーム・インターフェースやリモート・インターフェースを持たないことを除いて、 他のエンタープライズ Bean と同様に開発します。

メッセージ駆動型 Bean クラスの作成の詳細については、Rational Application Developer ヘルプ・ブックシェルフの『 メッセージ駆動型 Bean の作成』を参照してください。

メッセージ駆動型 Bean を使用するエンタープライズ・アプリケーションを開発するには、以下のステップを実行します。

プロシージャー

  1. エンタープライズ・アプリケーション・プロジェクトを作成します。
  2. メッセージ駆動型 Bean クラスを作成します。

    Rational Application Developer の 「新規エンタープライズ Bean」ウィザードを使用すると、Bean タイプが メッセージ駆動型 Bean であるエンタープライズ Bean を作成できます。このウィザードで、Bean のタイプに応じてメソッドが作成されます。

    命名規則により、メッセージ Bean クラスの名前は nameBean となります。 ここで name は、そのメッセージ Bean に割り当てた名前です。 例を以下に示します。
    public class MyJMSppMDBBean implements MessageDrivenBean, javax.jms.MessageListener

    すべてのメッセージ駆動型 Bean は、MessageDrivenBean インターフェースをインプリメントする必要があります。 JMS メッセージングでは、メッセージ駆動型 Bean は、 メッセージ・リスナー・インターフェース javax.jms.MessageListener もインプリメントする必要があります。他の JCA 準拠リソース・アダプターは、 インプリメントする必要がある独自のメッセージ・リスナー・インターフェースを提供する場合があります。

    メッセージ駆動型 Bean は、javax.ejb.TimedObject インターフェースおよび タイマー・コールバック・メソッド void ejbTimeout(Timer) もインプリメントする場合、 時間ベースのイベント通知を行う EJB タイマー・サービスを用いて登録することができます。スケジュールした時間に、コンテナーはメッセージ駆動型 Bean の ejbTimeout メソッドを呼び出します。

    メッセージ駆動型 Bean クラスでは、以下のメソッドを定義してインプリメントしなければなりません。
    • onMessage(message)。次の要件を満たさなければなりません。
      • このメソッドが、javax.jms.Message タイプの引数を 1 つ持つこと。
      • throws 文節で、アプリケーション例外を定義しない こと。
      • メッセージ駆動型 Bean が Bean 管理トランザクションを使用するように構成されている場合、 javax.transaction.UserTransaction インターフェースを呼び出してトランザクションの有効範囲を定めること。 これらの呼び出しは、onMessage() メソッド内部で行われるため、 トランザクションの有効範囲に初期メッセージの受信は含まれません。 詳しくは、メッセージ駆動型 Bean - トランザクション・サポート を参照してください。

      onMessage() メソッド内でメッセージを処理する (例えば、メッセージを別の Enterprise Bean に渡す) には、 標準 JMS を使用します。 (これは Bean 管理メッセージングとして知られています。)

      別のメッセージ・リスナー・インターフェースを含む JCA 準拠 リソース・アダプターを使用している場合は、onMessage() 以外の別のメソッドが必要になることがあります。必要なメッセージ・リスナー・インターフェースについて詳しくは、 JCA リソース・アダプターの資料を参照してください。

    • ejbCreate()。

      Enterprise Bean の新規のインスタンスを作成する方法ごとに、 ejbCreate メソッドを定義してインプリメントしなければなりません。

    • ejbRemove()

      このメソッドは、Enterprise Bean のホーム・インターフェースが javax.ejb.EJBHome インターフェースから継承した remove メソッドを、クライアントが呼び出すときに、コンテナーによって呼び出されます。 このメソッドには、Enterprise Bean インスタンスがコンテナーから除去される前 (そして関連付けられているデータがデータ・ソースから除去される前) に実行したいコードはすべて含まれなければなりません。

    • ejbTimeout(Timer)

      このメソッドは、タイマー・サービスからの通知をサポートするためにのみ必要となります。このメソッドには、受信したタイム・イベントを処理するビジネス・ロジックが含まれます。

    例えば、次のコードの抜粋は、 TextMessage タイプの JMS メッセージから、テキストおよび JMS メッセージ ID にアクセスする方法を示しています。
    図 1. コード例: メッセージ Bean の onMessage() メソッド. この図は、サンプル・メッセージ駆動型 Bean の基本的な onMessage() メソッドの、コードの抜粋を示したものです。 メソッドは、着信テキスト・メッセージをアンパックしてテキストとメッセージ ID を抽出し、 private putMessage メソッド (同じメッセージ Bean クラス内で定義済み) を呼び出して、 メッセージを別のキューに入れます。
    public void onMessage(javax.jms.Message msg)
    {
            String text      = null;
            String  messageID                 = null;
    
            try
            {
                    text = ((TextMessage)msg).getText();
    
                    System.out.println("senderBean.onMessage(), msg text2: "+text);
    
                    //
                    // store the message id to use as the Correlator value
                    //
                    messageID = msg.getJMSMessageID();
    
                    // Call a private method to put the message onto another queue
                    putMessage(messageID, text);
            }
            catch  (Exception err)
            {
                    err.printStackTrace();
            }
            return;
    }
    
    このステップの結果、メッセージ駆動型 Bean が生成されます。これは、デプロイメント用の EAR ファイルにアセンブルすることができます。
  3. オプション: EJB デプロイメント記述子エディターを使用し、デプロイメント・プロパティーを検討し、必要に応じて変更します。 EJB デプロイメント記述子エディターを使用して 、EJB 作成ウィザード (トランザクション・タイプやメッセージ・セレクターなど) で指定した デプロイメント・プロパティーおよび他のデフォルトのデプロイメント・プロパティーを検討することができます。

    必要に応じて、エンタープライズ・アプリケーションをデプロイメント用に EAR ファイルにエクスポートした後、これらのプロパティーの値をオーバーライドすることができます。

    1. プロパティー・ペインで、「Bean」タブを選択します。
    2. 一般的なデプロイメント・プロパティーを指定します。
      トランザクション・タイプ
      メッセージ Bean が自らトランザクションを管理するか、コンテナーが Bean の代わりに トランザクションを管理するかを指定します。
      Bean
      メッセージ Bean 自体がトランザクションを管理します。
      コンテナー
      コンテナーが Bean の代わりにトランザクションを管理します。
    3. 拡張デプロイメント・プロパティーを指定します。

      「Activation Configuration」の下で、以下のプロパティーを検討します。

      応答モード
      セッションが受信したメッセージに応答する方法。

      このプロパティーは、Bean 管理トランザクション境界を使用するメッセージ駆動型 Bean にのみ適用されます (トランザクション・タイプ は「Bean」に設定されます)。

      自動応答
      セッションは、メッセージが受信呼び出しから正常に戻されたとき、 あるいはメッセージを処理するために呼び出したメッセージ・リスナーが正常に戻されたときに、 メッセージに自動的に応答します。
      重複 OK 応答
      このセッションは、メッセージの送達に応答するのに時間を要します。 JMS で障害が発生すると、重複するメッセージが送達されることがあるため、 メッセージの重複が気にならないユーザーのみご利用ください。

      EJB 仕様で定義されているように、クライアントは Message.acknowledge() を使用してメッセージに応答することはできません。 CLIENT_ACKNOWLEDGE の値が createxxxSession 呼び出しに渡されると、メッセージは、アプリケーション・サーバーによって自動確認され、Message.acknowledge() は使用されません。

      宛先タイプ
      メッセージ Bean がキューまたはトピックのいずれの宛先を使用するかを指定します。
      キュー
      メッセージ Bean はキュー宛先を使用します。
      トピック
      メッセージ Bean はトピック宛先を使用します。
      耐久性
      JMS トピック・サブスクリプションが永続的か非永続的かを指定します。
      永続的
      サブスクライバーは、 JMS に保存された固有の ID を持つ永続的サブスクリプションを登録します。 同一 ID を持つ後続のサブスクライバー・オブジェクトが再開するサブスクリプションは、 先行するサブスクライバーが残した状態のままです。 永続的サブスクリプションのアクティブ・サブスクライバーがない場合、JMS は、サブスクリプションのメッセージを、サブスクリプションが受信するまで、あるいはメッセージの有効期限が切れるまで保管します。
      非永続的
      非永続的サブスクリプションは、 所有するサブスクライバー・オブジェクトの存続時間中は持続します。 すなわち、トピックにパブリッシュされたメッセージをクライアントが確認できるのは、 サブスクライバーがアクティブの間だけです。 サブスクライバーがアクティブでない場合、クライアントはそのトピックに関して公開されたメッセージを見られません。

      非永続サブスクライバーは、 そのサブスクライバーが作成されたときに存在していたものと同じトランザクション・コンテキスト (例えば、 グローバル・トランザクションまたは指定解除されたトランザクション・コンテキスト) でしか使用できません。 このコンテキストの制約事項について詳しくは、非永続的なサブスクライバーに対するトランザクション・コンテキストの影響を参照してください。

      メッセージ・セレクター
      メッセージ Bean が受信するメッセージを決定するために使用する JMS メッセージ・セレクター。 例を以下に示します。
      JMSType='car' AND color='blue' AND weight>2500

      セレクター・ストリングは、JMS メッセージ・ヘッダー内のフィールド、およびメッセージ・プロパティー内のフィールドを参照できます。メッセージ・セレクターは、メッセージ本体の値を参照することはできません。

      これらのプロパティーの詳細については、メッセージ駆動型 Bean デプロイメント記述子・プロパティーを参照してください。

    4. バインディング・デプロイメント・プロパティーを指定します。

      「WebSphere バインディング」の下で、JCA アダプターのオプションを選択してから、 バインディング・デプロイメント・プロパティーを指定します。

      ActivationSpec JNDI 名
      このメッセージ駆動型 Bean をデプロイするために使用される J2C アクティベーション・スペックの JNDI 名を入力します。 この名前は、WebSphere Application Server に対して定義する J2C アクティベーション・スペックの名前と一致しなければなりません。
      ActivationSpec 許可別名
      JCA リソース・アダプターへの接続の認証に使用される J2C 認証エイリアスの名前。 J2C 認証エイリアスは、 JCA リソース・アダプターへの新規接続の作成を認証するために使用されるユーザー ID およびパスワードを指定します。
      宛先 JNDI 名
      メッセージ駆動型 Bean が JNDI ネーム・スペースで JMS 宛先を検索するために使用する JNDI 名を入力します。
  4. アプリケーションをデプロイメント用にアセンブルおよびパッケージ化します。

結果

このタスクの結果として生成される EAR ファイルには、エンタープライズ・アプリケーション用のメッセージ駆動型 Bean が含まれ、WebSphere Application Server でデプロイすることができます。

次の作業

メッセージ駆動型 Bean を使用するためにエンタープライズ・アプリケーションを開発したら、 そのアプリケーションを構成してデプロイします。例えば、メッセージ駆動型 Bean の J2C アクティベーション・スペックを定義し、 オプションでアプリケーションのデプロイメント記述子属性を変更します。 メッセージ駆動型 Bean を使用するアプリケーションの構成およびデプロイについて詳しくは、メッセージ駆動型 Bean を使用するエンタープライズ・アプリケーションのデプロイを参照してください。



サブトピック
メッセージ駆動型 Bean デプロイメント記述子・プロパティー
関連タスク
メッセージ駆動型 Bean を JCA 1.5 準拠リソースに対して使用するためのエンタープライズ・アプリケーションのデプロイ
メッセージ駆動型 Bean を使用するためのプログラミング
タスク・トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 10:52:11 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.zseries.doc/info/zseries/ae/tmb_devap.html