前へ     目次     索引     DocHome     次へ     
iPlanet Application Server 開発者ガイド



第 7 章   メッセージ駆動 Beans の使用


この章では、メッセージ駆動 Beans とそのプロパティについて説明します。また、メッセージ駆動 Beans を作成して iPlanet Application Server に配置するための追加のガイドラインも用意してあります。

この章には次の節があります。



メッセージ駆動 Beans の概要

iPlanet Application Server は、JMS 仕様を実装するメッセージングミドルウェアのアプリケーションとして、iPlanet Message Queue for Java, 2.0 SP1 を使います。iPlanet Application Server でメッセージ駆動 Beans を使う前に、iMQ for Java, 2.0 SP1 をインストールしておく必要があります。

iMQ for Java, 2.0 SP1 は、iPlanet Application Server インストール CD に含まれています。このインストール CD がない場合は、http://www.iplanet.com/products/iplanet_message_queue/home_message_queue.html から無料の開発者用エディションをダウンロードできます。


メッセージ駆動 Beans にアクセスする方法

メッセージ駆動 Beans は、Java Message Service (JMS) インタフェースを使用します。つまり、メッセージ駆動 Beans は JMS リスナです。JMS ミドルウェアとメッセージ駆動 Beans のコンンテナが一緒になって、JMS MessageListener オブジェクトへのメッセージの配信を制御します。



メッセージ駆動 Beans を使うには、まず JMS プロバイダを設定し、メッセージキューオブジェクトを設定する必要があります。JMS プロバイダを設定する方法については、『iPlanet Application Server 管理者ガイド』の 11 章「メッセージ駆動 Bean の管理」を参照してください。



次のステップで、クライアントリクエストに基づくアクションを説明します。

  1. アプリケーションサーバが起動すると、配置されたすべてのメッセージ駆動 Beans が読み込まれ、メッセージリスナが起動します。

    アプリケーションサーバは、iPlanet Application Server の ServerSessionPool を使用して、デスティネーション固有の代理人を JMS で登録します。

  2. ブラウザ、Servlet、スタンドアロンアプリケーションなどのクライアントは、JMS デスティネーションへメッセージを送信します。

  3. JMS は、指定されたデスティネーションにリクエストを処理させるために、アプリケーションサーバのコールバックを呼び出します。

  4. JMS セッションの MessageListener が、メッセージ駆動 Beans のインスタンスのコンテナになります。

    メッセージが着信すると、コンテナは、そのメッセージを処理するためにメッセージ駆動 Beans の onMessage メソッドを呼び出します。onMessage メソッドは通常、メッセージを 5 つの JMS メッセージタイプのうちの 1 つにキャストし、アプリケーションのビジネスロジックに従って処理します。onMessage メソッドは、ヘルパーメソッドを呼び出すことができ、また、セッションまたはエンティティ Beans を呼び出して、メッセージ内の情報を処理したりデータベースに格納したりすることもできます。

    メッセージをトランザクションコンテキスト内でメッセージ駆動 Beans に配信することもできるので、onMessage メソッド内のすべてのオペレーションは、1 つのトランザクションの一部です。メッセージ処理がロールバックされると、メッセージは再度送信されます。

  5. iPlanet Application Server では、トランザクション、セキュリティなどのサポート対象のサービスが処理され、リクエストの処理は Bean のビジネスメソッドに委任されます。

  6. JMS はメッセージをキューから削除し、メッセージ内に応答を求めるプロパティがあった場合は、クライアントに ACK を送信します。

  7. 失敗した場合は、JMS が再度メッセージを送信します。

次の図は、配置された Bean のリクエストフローパスです。

図 7-1   

リクエストフローパス

ConnectionConsumer と Session は、JMS プロバイダの一部です。ServerSessionPool、ServerSession およびメッセージリスナは、iPlanet Application Server の一部です。



メッセージ駆動 Beans のコンポーネント



メッセージ駆動 Beans を作成するには、次のクラスファイルを準備する必要があります。

  • Enterprise JavaBeans クラス定義

  • Enterprise JavaBeans メタデータ (配置記述子 (DD) およびほかの設定情報)


クラス定義の作成

メッセージ駆動 Beans の場合、Bean のクラスは、abstract ではなく public として定義する必要があります。Bean クラスは、javax.ejb.MessageDrivenBean インタフェースを実装する必要があります。次のようにします。

import javax.jms.*;
import javax.ejb.*;
public class MySessionBean implements MessageDrivenBean, MessageListener {
// メッセージ駆動 Beans の実装。これらのメソッドは常に取り込む必要があります。
public void ejbRemove() throws RemoteException{
}
public void setMessageDrivenContext(MessageDrivenContext ctx) throws RemoteException {
}

// 他のコードは省略します。
}

メッセージ駆動 Beans は、1 つまたは複数の ejbCreate(...) メソッドを実装する必要もあります。クライアントが Bean を呼び出すときは、必ずこのメソッドを 1 つ使います。次のようにします。

public void ejbCreate() {
}

ejbCreate(...) メソッドは public として宣言し、void を返し、ejbCreate という名前を付ける必要があります。throws 句には、java.rmi.RemoteException または java.ejb.CreateException を含めることができます。



メッセージ駆動 Beans のガイドライン



メッセージ駆動 Beans として表すことができるアプリケーションの各部を決める前に、メッセージ駆動 Beans について理解すべき事項がいくつかあります。これらには、メッセージ駆動 Beans の EJB 仕様に関連する事項と、iPlanet Application Server および iPlanet Application Server によるメッセージ駆動 Beans のサポートに固有の事項があります。



iPlanet Application Server 機能へのアクセス



この節には次のトピックがあります。

開発可能なメッセージ駆動 Beans には、EJB 仕様に厳密に準拠しているメッセージ駆動 Beans、その仕様と iPlanet Application Server の付加価値機能の両方を活用しているメッセージ駆動 Beans、および iPlanet Application Server 以外の環境における仕様に準拠してはいるが利用できる iPlanet Application Server 機能も活用するメッセージ駆動 Beans があります。希望の配置シナリオに最適な Bean を選択します。

iPlanet Application Server は、iPlanet Application Server コンテナを介していくつかの機能を提供します。また、iPlanet Application Server API によって、アプリケーションは特定の iPlanet Application Server 環境の機能をプログラムで利用できるようになります。iPlanet Application Server 環境だけでメッセージ駆動 Beans を使う予定であれば、これらの Bean に API 呼び出しを組み込みます。

たとえば、次の手順および例に従って IAppEventMgr インタフェースを使い、指定したアプリケーションイベントを EJB からトリガできます。

  1. まず、 javax.ejb.SessionContext または javax.ejb.EntityContext IServerContext にタイプ変換して、com.kivasoft.IContext インスタンスを取得します。

  2. 次に、 GXContext クラスの GetAppEventMgr() メソッドを使って、IAppEventMgr オブジェクトを作成します。

  3. さらに、triggerEvent() を使ってアプリケーションイベントをトリガします。

    javax.ejb.SessionContext m_ctx;
    ....
    com.netscape.server.IServerContext sc;
    sc = (com.netscape.server.IServerContext) m_ctx;
    com.kivasoft.IContext kivaContext = sc.getContext();
    IAppEventMgr mgr = com.kivasoft.dlm.GXContext.GetAppEventMgr(ic);
    mgr.triggerEvent("eventName");


トランザクションの管理

メッセージ駆動 Beans はデータベースと対話します。Bean のプロパティファイルの設定値を使って、Bean のトランザクションを制御します。これにより、Bean 配置時にトランザクション属性を指定できます。Bean 操作のトランザクション管理があるので、Bean のデータベースアクセスメソッドのトランザクションを明示的に「起動」、「ロールバック」、または「コミット」する必要はありません。

トランザクション管理をコンテナレベルに移すことによって、Bean のアクティビティがデータベースアクセスと直接結び付いていなくても、データベース呼び出しと同じトランザクション制御環境ですべての Bean アクティビティを配置できます。これにより、メッセージ駆動 Beans によって制御されるアプリケーションのすべての部分が、同じトランザクションの一部として動作しますが、失敗すると、Bean が管理していたものはすべてコミットされるか、ロールバックされます。実際には、コンテナ管理トランザクションのステートによって、同期ルーチンをプログラミングせずにアプリケーションの同期をとることができます。


トランザクションのコミット

コミットが発生し、メッセージ駆動 Beans の有効な作業が終了したことがコンテナに伝わると、コンテナは、基礎となっているデータソースとステートの同期をとるように指示されます。コンテナはトランザクションの終了を許可し、Bean を解放します。

コンテナからのトランザクションは暗黙的にコミットされていることに注意してください。また、トランザクションに関連した Bean であれば、トランザクションをロールバックできます。トランザクションの詳細については、第 8 章「EJB のトランザクション処理」を参照してください。


データベースへのアクセス

多くのメッセージ駆動 Beans はデータにアクセスしてデータを更新します。メッセージ駆動 Beans は一時的なので、アクセスがどのように発生するかに注意してください。一般に、JDBC API を使って呼び出し、第 8 章「EJB のトランザクション処理」 に記述されているトランザクションおよびセキュリティ管理メソッドを使って、トランザクション分離レベルおよびトランザクション要件を Bean レベルで管理します。

データベースへのアクセスについては、第 9 章「JDBC を使ったデータベースアクセス」を参照してください。



配置ツールの使用法



メッセージ駆動 Beans の標準 ejb-jar 配置記述子は、iPlanet Application Server の配置ツールを使って簡単に作成できます。

メッセージ駆動 Beans の配置は、配置ツールを使用したほかのアプリケーションの配置と似ています。

既存の EJB モジュールを開くか、または新しい EJB モジュールを作成することによって開始します。EJB クラスファイルに EJB モジュールが追加されていれば、次の図のように、Bean 上で右クリックし、その記述子を編集できます。

図 7-2   

配置ツール内でのメッセージ駆動 Beans の選択



iPlanet Application Server 配置ツール内で EJBの 配置記述子の作成を開始し、ツールにアプリケーションを保存し、手動でファイルを編集してツールに戻ることができます。

ただし、この作業を行う場合、配置記述子を編集する前に、必ずツール内の EJB モジュールあるいは J2EE アプリケーションを再び開き、変更後にツールにアプリケーションを保存してください。失敗した場合は、ユーザインタフェースでの変更は配置記述子に反映されません。



配置ツールの配置記述子ダイアログボックスに次の情報を指定する必要があります。


J2EE 特有の配置記述子のフィールド

  • Bean 名

  • Bean タイプ (メッセージ駆動 Beans)

  • 実装クラス名

  • トランザクション管理タイプ (コンテナ管理または Bean 管理)


メッセージ駆動 Beans 特有のパラメータ

  • デスティネーションタイプ (キューまたはトピック)

  • デスティネーション名

  • 永続名 (トピックサブスクリプション専用 -- オプション)

  • 永続的トピックサブスクリプション (オプション)

  • メッセージセレクタ (オプション)

  • 通知モード (自動通知または重複自動通知)

  • 最大メッセージ制限

  • セキュリティ ID のタイプ (指定されたユーザとして実行が許可された場合のみ)

  • ロール名として実行



    ユーザロールがメッセージ駆動 Beans にアクセスされるデータに対して管理権限を持っている場合は、セキュリティ上のリスクがあります。メッセージ駆動 Beans を認証するユーザは、指定されたセキュリティロールの権限を受け継ぎます。



  • 最大プールサイズ

  • 最小プールサイズ

  • トランザクションマネージャタイプ (ローカルまたはグローバル -- 指定しないと、このモジュールの Transaction Manager Type が使用される)



手動による配置記述子の作成


配置記述子ファイルの例

<ias-mdbs>

<!-- これは EJB 2.0 DTD ベースの配置記述子から抽出--<&/tt>

 <ejb-jar>

  <enterprise-beans>

    <message-driven>

      <ejb-name>MyMDB1</ejb-name>

      <ejb-class>mycompany.mypackage.MyMDB1</ejb-class>

       <transaction-type>Container</transaction-type>

      <message-driven-destination>

       <jms-destination-type>javax.jms.Topic</jms-destination-type>

      </message-driven-destination>

       <security-identity>

        <run-as-specified-identity>

          <role-name>asmith</role-name>

        </run-as-specified-identity>

       </security-identity>

    </message-driven>

  </enterprise-beans>

 </ejb-jar>

<!-- これには ias 特有のすべての配置情報が含まれる --<&/tt>

 <ias-ejb-jar>

  <ias-enterprise-bean>

    <ejb-name>MyMDB1</ejb-name>

    <message-driven-descriptor>

      <jms-destination>

         <jndi-name>MyMDB1</jndi-name>

         <jms-topic-subscription>

            <durable>true</durable>

         </jms-topic-subscription>

      </jms-destination>

      <pool>

        <max-pool-size>100</max-pool-size>

        <min-pool-size>10</min-pool-size>

      </pool>

    </message-driven-descriptor>

  </ias-enterprise-bean>

 </ias-ejb-jar>

詳細については、iASInstallDir/ias/dtd 内の EJB JAR ファイル用 XML DTD (IASEjb_jar_1_1.dtd) を参照してください。


前へ     目次     索引     DocHome     次へ     
Copyright © 2002 Sun Microsystems, Inc. All rights reserved.

最新更新日 2002 年 3 月 6 日