前へ 目次 索引 DocHome 次へ |
iPlanet Application Server 開発者ガイド |
第 7 章 メッセージ駆動 Beans の使用
この章では、メッセージ駆動 Beans とそのプロパティについて説明します。また、メッセージ駆動 Beans を作成して iPlanet Application Server に配置するための追加のガイドラインも用意してあります。
メッセージ駆動 Beans のコンポーネント
iPlanet Application Server 機能へのアクセス
注 iPlanet Application Server 内でのメッセージ駆動 Beans の機能は、開発者だけが使用します。運用環境では、テストも認定もされていません。
メッセージ駆動 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 の管理」を参照してください。
次のステップで、クライアントリクエストに基づくアクションを説明します。
アプリケーションサーバが起動すると、配置されたすべてのメッセージ駆動 Beans が読み込まれ、メッセージリスナが起動します。
次の図は、配置された Bean のリクエストフローパスです。
ブラウザ、Servlet、スタンドアロンアプリケーションなどのクライアントは、JMS デスティネーションへメッセージを送信します。
- アプリケーションサーバは、iPlanet Application Server の ServerSessionPool を使用して、デスティネーション固有の代理人を JMS で登録します。
JMS は、指定されたデスティネーションにリクエストを処理させるために、アプリケーションサーバのコールバックを呼び出します。
JMS セッションの MessageListener が、メッセージ駆動 Beans のインスタンスのコンテナになります。
iPlanet Application Server では、トランザクション、セキュリティなどのサポート対象のサービスが処理され、リクエストの処理は Bean のビジネスメソッドに委任されます。
- メッセージが着信すると、コンテナは、そのメッセージを処理するためにメッセージ駆動 Beans の onMessage メソッドを呼び出します。onMessage メソッドは通常、メッセージを 5 つの JMS メッセージタイプのうちの 1 つにキャストし、アプリケーションのビジネスロジックに従って処理します。onMessage メソッドは、ヘルパーメソッドを呼び出すことができ、また、セッションまたはエンティティ Beans を呼び出して、メッセージ内の情報を処理したりデータベースに格納したりすることもできます。
- メッセージをトランザクションコンテキスト内でメッセージ駆動 Beans に配信することもできるので、onMessage メソッド内のすべてのオペレーションは、1 つのトランザクションの一部です。メッセージ処理がロールバックされると、メッセージは再度送信されます。
JMS はメッセージをキューから削除し、メッセージ内に応答を求めるプロパティがあった場合は、クライアントに ACK を送信します。
図 7-1   
リクエストフローパス
ConnectionConsumer と Session は、JMS プロバイダの一部です。ServerSessionPool、ServerSession およびメッセージリスナは、iPlanet Application Server の一部です。
メッセージ駆動 Beans のコンポーネント
メッセージ駆動 Beans を作成するには、次のクラスファイルを準備する必要があります。
クラス定義の作成
メッセージ駆動 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 つ使います。次のようにします。
各 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 からトリガできます。
まず、 javax.ejb.SessionContext または javax.ejb.EntityContext を IServerContext にタイプ変換して、com.kivasoft.IContext インスタンスを取得します。
次に、 GXContext クラスの GetAppEventMgr() メソッドを使って、IAppEventMgr オブジェクトを作成します。
さらに、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 の選択
配置ツールの配置記述子ダイアログボックスに次の情報を指定する必要があります。
デスティネーションタイプ (キューまたはトピック)
永続名 (トピックサブスクリプション専用 -- オプション)
セキュリティ ID のタイプ (指定されたユーザとして実行が許可された場合のみ)
注 ユーザロールがメッセージ駆動 Beans にアクセスされるデータに対して管理権限を持っている場合は、セキュリティ上のリスクがあります。メッセージ駆動 Beans を認証するユーザは、指定されたセキュリティロールの権限を受け継ぎます。
トランザクションマネージャタイプ (ローカルまたはグローバル -- 指定しないと、このモジュールの Transaction Manager Type が使用される)
手動による配置記述子の作成
<!-- これは EJB 2.0 DTD ベースの配置記述子から抽出--<&/tt>
<ejb-class>mycompany.mypackage.MyMDB1</ejb-class>
<transaction-type>Container</transaction-type>
<jms-destination-type>javax.jms.Topic</jms-destination-type>
<!-- これには ias 特有のすべての配置情報が含まれる --<&/tt>
<max-pool-size>100</max-pool-size>
<min-pool-size>10</min-pool-size>
詳細については、iASInstallDir/ias/dtd 内の EJB JAR ファイル用 XML DTD (IASEjb_jar_1_1.dtd) を参照してください。
前へ 目次 索引 DocHome 次へ
Copyright © 2002 Sun Microsystems, Inc. All rights reserved.
最新更新日 2002 年 3 月 6 日