プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebLogic Server JMSアプリケーションの開発
12
c
(12.2.1.3.0)
E90332-02
次へ
目次
タイトルおよび著作権情報
はじめに
ドキュメントのアクセシビリティについて
表記規則
1
概要とロードマップ
ドキュメントのスコープおよび対象読者
このドキュメントの手引き
関連ドキュメント
JMS開発者向けのサンプルとチュートリアル
Avitek Medical Recordsアプリケーション(MedRec)とチュートリアル
このリリースでのJMSの新機能と変更された機能
2
WebLogic JMSの理解
Java Message ServiceとWebLogic JMSの概要
Java Message Serviceとは
Java仕様の実装
WebLogic JMSのアーキテクチャ
メッセージング・モデルの理解
ポイント・ツー・ポイント・メッセージング
パブリッシュ/サブスクライブ・メッセージング
メッセージの永続性
JMSパブリックAPIの付加価値拡張機能
WebLogic Serverの付加価値JMS機能
JMS APIの理解
ConnectionFactory
デフォルト接続ファクトリの使い方
接続ファクトリの構成とデプロイメント
ConnectionFactoryクラス
JMSContext
Connection
Session
WebLogic JMSセッションのガイドライン
Sessionのサブクラス
非トランザクション・セッション
トランザクション・セッション
Destination
宛先の分散
MessageProducerとMessageConsumer
メッセージ
メッセージ・ヘッダー・フィールド
メッセージ・プロパティ・フィールド
メッセージ本文
ServerSessionPoolFactory
ServerSessionPool
ServerSession
ConnectionConsumer
3
アプリケーション設計のベスト・プラクティス
メッセージの設計
アプリケーション・オブジェクトのシリアライズ
文字列のシリアライズ
サーバー側のシリアライズ
選択
メッセージの圧縮
メッセージ・プロパティとメッセージ・ヘッダー・フィールド
メッセージの順序
トピックとキュー
非同期コンシューマと同期コンシューマ
永続メッセージと非永続メッセージ
確認応答とコミットの延期
非恒久サブスクライバでのAUTO_ACKの使用
代替のサービス品質、マルチキャスト、NO_ACKNOWLEDGE
MULTICAST_NO_ACKNOWLEDGEの使用
NO_ACKNOWLEDGEの使用
マルチスレッドの回避
JMSXUserIDプロパティの使用
パフォーマンスおよびチューニング
4
WebLogic JMSをEJBやサーブレットと組み合せて使用するために拡張されたサポート
WebLogic JMSラッパーの有効化
@Injectアノテーションを使用したJMSContextオブジェクトの宣言
JMSContextインジェクションでのルックアップ名の指定
JMSContextインジェクションのための認証タイプの決定
EJBまたはサーブレットのデプロイメント記述子におけるJMSオブジェクトのリソースとしての宣言
デプロイメント記述子を使用したラップJMSファクトリの宣言
デプロイメント記述子を使用したJMS宛先の宣言
jms-destination要素を使用したJMS宛先の宣言
resource-env-ref要素を使用したJMS宛先の宣言
デプロイメント記述子ファイルでパッケージ化JMSアプリケーション・モジュールを参照する
weblogic-application.xml記述子でアプリケーション・モジュールを参照する
WebLogicアプリケーションでJMSリソースを参照する
Java EEアプリケーションでJMSリソースを参照する
アノテーションを使用したJMS宛先および接続ファクトリの宣言
クラスにリソース依存性を注入する
非注入EJB 3.0リソース参照アノテーション
トランザクションXAインタフェースの回避
ラッピングとプーリングの無効化
JMSラッパーの内部での処理
トランザクションの自動登録
コンテナ管理のセキュリティ
接続テスト
Java EEの準拠
プールされたJMS接続オブジェクト
プールされた接続のモニター
プールによるパフォーマンスの向上
セッション・オブジェクトのプールによるJNDIルックアップの高速化
キャッシングによるオブジェクト作成の高速化
適切なトランザクション・モードの登録
外部JMSプロバイダへのアクセスの簡略化
JMSラッパー関数の例
JMSラッパー関数の例
ejb-jar.xml
weblogic-ejb-jar.xml
PoolTest.java
PoolTestHome.java
PoolTestBean.java
Java EEコンテナによるJMSメッセージの送信
comp/envの使用
依存関係インジェクション
インジェクションを使用しないEJB 3.0ラッパー
5
簡略化APIプログラミング・モデルの理解
JMS 2.0簡略化APIについて
簡略化JMS APIの新しいインタフェース
JMSContext
JMSProducer
JMSConsumer
JMS 2.0でのメッセージを簡略化する新しいメソッド
メッセージから直接ボディを抽出するメソッド
メッセージ・ボディを直接受信するメソッド
セッションを作成するメソッド
6
基本的なJMSアプリケーションの開発
必要なパッケージのインポート
JMSアプリケーションの設定
簡略化APIを使用したJMSアプリケーションの設定
JNDIでの接続ファクトリのルックアップ
キューまたはトピックのルックアップ
JMSContextオブジェクトの作成
JMSProducerおよびJMSConsumerオブジェクトの作成
簡略化APIを使用したメッセージの送受信
クラシックAPIを使用したJMSアプリケーションの設定
ステップ1: JNDIで接続ファクトリをルックアップする
ステップ2: 接続ファクトリを使用して接続を作成する
キュー接続の作成
トピック接続の作成
ステップ3: 接続を使用してセッションを作成する
createSessionメソッドを使用したセッションの作成
キュー・セッションの作成
トピック・セッションの作成
ステップ4: 宛先(キューまたはトピック)をルックアップする
JNDI名の使用
参照の使用
ステップ5: メッセージ・プロデューサとメッセージ・コンシューマを作成する
QueueSenderとQueueReceiverの作成
TopicPublisherとTopicSubscriberの作成
ステップ6a: メッセージ・オブジェクトを作成する(メッセージ・プロデューサ)
ステップ6b: 非同期メッセージ・リスナーを登録する(オプション)
ステップ7: 接続を開始する
例: クラシックAPIを使用したポイント・ツー・ポイントJMSアプリケーションの設定
例: クラシックAPIを使用したパブリッシュ/サブスクライブJMSアプリケーションの設定
メッセージの送信
簡略化JMS APIを使用したメッセージの送信
クラシックJMS APIを使用したメッセージの送信
メッセージ・オブジェクトを作成する
メッセージを定義する
MessageProducerを使用してメッセージを宛先に送信する
メッセージの非同期送信
JMSProducerおよびMessageProducer属性の設定
例: ポイント・ツー・ポイント・アプリケーション内でのメッセージの送信
例: パブリッシュ/サブスクライブ・アプリケーション内でのメッセージの送信
メッセージの受信
簡略化APIを使用したメッセージの非同期受信
クラシックAPIを使用したメッセージの非同期受信
非同期メッセージ・パイプライン
メッセージ・パイプラインの構成
パイプライン・メッセージの動作
簡略化APIを使用したメッセージの同期受信
クラシックAPIを使用したメッセージの同期受信
例: PTPアプリケーション内でのメッセージの同期受信
例: Pub/Subアプリケーション内でのメッセージの同期受信
プリフェッチ・モードを使用した同期メッセージ・パイプラインの作成
受信メッセージの回復
受信メッセージの確認応答
オブジェクト・リソースの解放
7
アプリケーションの管理
ロールバック/リカバリ/再配信された、または期限切れになったメッセージの管理
メッセージの再配信遅延の設定
再配信遅延の設定
宛先での再配信遅延のオーバーライド
メッセージの再配信制限の設定
宛先のメッセージ再配信制限の構成
配信されなかったメッセージに対するエラー宛先の構成
メッセージの再配信の順序付け
メッセージング・ブリッジおよびMDBで必須のメッセージ・パイプライン設定
パフォーマンスの制限
期限切れメッセージの処理
メッセージ配信時間の設定
プロデューサに対する配信時間の設定
メッセージに対する配信時間の設定
配信時間のオーバーライド
存続時間の値との関係
相対配信時間のオーバーライドの設定
スケジューリング済み配信時間のオーバーライドの設定
JMSスケジュール・インタフェース
接続の管理
接続例外リスナーの定義
接続メタデータへのアクセス
接続の開始、停止、クローズ
セッションの管理
セッション例外リスナーの定義
セッションのクローズ
宛先の管理
宛先の動的作成
宛先の動的削除
宛先を削除するために必要な条件
宛先削除後の動作
削除された宛先のトラブルシューティングに使用するメッセージのタイムスタンプ
削除した宛先の統計
一時的な宛先の使い方
一時的なキューの作成
一時的なトピックの作成
一時的な宛先の削除
恒久サブスクリプションの設定
永続ストアの定義
クライアントIDポリシーの設定
クライアントIDの定義
共有サブスクリプション・ポリシーの作成
恒久サブスクリプション用のサブスクライバの作成
JMS 2.0 APIの使用
JMS 1.1 APIの使用
ベスト・プラクティス:問題が発生したJMS ClientIDは常に閉じる
恒久サブスクリプションの削除
恒久サブスクリプションの変更
恒久サブスクリプションの管理
メッセージ・ヘッダー・フィールドおよびメッセージ・プロパティ・フィールドの設定と参照
メッセージ・ヘッダー・フィールドの設定
メッセージ・プロパティ・フィールドの設定
メッセージ・ヘッダー・フィールドおよびメッセージ・プロパティ・フィールドの参照
メッセージのフィルタ処理
SQL文を使用したメッセージ・セレクタの定義
XMLセレクタ・メソッドを使用したXMLメッセージ・セレクタの定義
メッセージ・セレクタの表示
トピック・サブスクライバのメッセージ・セレクタへの索引付けによるパフォーマンス最適化
XMLメッセージの送信
WebLogic XML API
String表現の使用
DOM表現の使用
8
JMSモジュール・ヘルパーを使用したアプリケーションの管理
JMSModuleHelperを使用したJMSシステム・リソースの構成
JMSサーバーとストア・アンド・フォワード・エージェントの構成
JMSModuleHelperのサンプル・コード
JMSシステム・リソースの作成
JMSシステム・リソースの削除
匿名ユーザーのセキュリティの考慮事項
JMSModuleHelper使用時のベスト・プラクティス
9
WebLogic JMSでのマルチキャストの使い方
マルチキャストを使用する利点
マルチキャストを使用する上での制限事項
WebLogic Serverユニキャストの使用
WebLogic Serverでのマルチキャストの構成
マルチキャストの前提条件
ステップ1: JMSアプリケーション、マルチキャスト・セッション、およびトピック・サブスクライバを設定する
ステップ2: メッセージ・リスナーを設定する
マルチキャストの構成属性の動的構成
例: マルチキャストの存続時間
10
分散宛先の使用
分散宛先とは
分散宛先を使用する理由
分散宛先の作成
分散宛先の種類
共通分散宛先
重み設定された分散宛先
分散宛先の使用
分散キューの使用
キューの転送
QueueSender
QueueReceiver
QueueBrowser
レプリケートされた分散トピックの使用
TopicPublisher
TopicSubscriber
分散トピックへのメッセージドリブンBeanのデプロイ
パーティション化された分散トピックの使用
分散宛先メンバーへのアクセス
分散宛先のフェイルオーバー
分散宛先でのメッセージドリブンBeanの使用
分散宛先の一般的な使用例
生成の最大化
可用性の最大化
キューの使用
トピックの使用
メッセージのスタック
11
メッセージ順序単位の使用
メッセージ順序単位とは
順序単位によるメッセージ処理の理解
JMS仕様に準拠したメッセージ処理
順序単位によるメッセージ処理
順序単位によるメッセージ配信
メッセージ順序単位のケース・スタディ
Joeによる本の注文
Joeの注文の処理
メッセージ順序単位による問題解決
順序単位の作成方法
順序単位をプログラム的に作成する
順序単位を管理者が作成する
接続ファクトリと宛先の順序単位を構成する
順序単位のネーミング・ルール
現在の順序単位の取得
メッセージ順序単位の高度なトピック
処理中にメッセージが遅延した場合の処理
フィルタのせいでメッセージを配信できない場合の処理
宛先ソート・キーを使用している場合の処理
分散宛先で順序単位を使用する
パス・サービスを使用する
ハッシュ・ベースのルーティングを使用する
共通分散宛先でのルーティングを構成する
トピックで順序単位を使用する
順序単位と分散トピック
順序単位、トピック、およびメッセージドリブンBean
JTAトランザクションを使用する
プール・サイズを1に設定する
JMSメッセージ管理で順序単位を使用する
WebLogicストア・アンド・フォワードで順序単位を使用する
WebLogicメッセージング・ブリッジで順序単位を使用する
メッセージ順序単位の制限事項
12
作業単位メッセージ・グループの使用
作業単位メッセージ・グループとは
作業単位によるメッセージ処理の理解
UOWに関連する基本用語
UOWメッセージを処理する場合のルール
メッセージ作業単位のケース・スタディ
作業単位メッセージ・グループの作成方法
UOWメッセージ・プロパティを設定するプロデューサの記述方法
UOWプロデューサのサンプル・コード
UOW例外
中間宛先のUOWコンシューマおよびプロデューサの記述方法
最終宛先の構成
UOWメッセージの最終分散宛先へのルーティング
最終宛先のUOWコンシューマの記述方法
メッセージ作業単位の高度なトピック
メッセージ・プロパティの処理
システム生成のプロパティ
最後の構成メッセージのプロパティ
構成メッセージの不均一性
ReplyToメッセージ・プロパティ
UOWと共通分散宛先
UOWとストア・アンド・フォワード宛先
UOWメッセージ・グループの制限事項
13
WebLogic JMSによるトランザクションの使い方
トランザクションの概要
JMSトランザクション・セッションの使い方
ステップ1: JMSアプリケーションを設定し、トランザクション・セッションを作成する
ステップ2: 必要な処理を実行する
ステップ3: JMSトランザクション・セッションをコミットまたはロールバックする
JTAユーザー・トランザクションの使い方
ステップ1: JMSアプリケーションを設定し、非トランザクション・セッションを作成する
ステップ2: JNDIでユーザー・トランザクションをルックアップする
ステップ3: JTAユーザー・トランザクションを開始する
ステップ4: 必要な処理を実行する
ステップ5: JTAユーザー・トランザクションをコミットまたはロールバックする
メッセージドリブンBeanを使用したJTAユーザー・トランザクション
例: JTAユーザー・トランザクションにおけるJMSとEJB
ステップ1: JMSアプリケーションを設定する
ステップ2: ユーザー・トランザクションをルックアップする
ステップ3: JTAユーザー・トランザクションを開始する
ステップ4: 必要な処理を実行する
ステップ5: JTAユーザー・トランザクションをコミットする
クロス・ドメイン・セキュリティの使用
14
拡張パブリッシュ/サブスクライブ・アプリクーションの開発
拡張高可用性の概念の概要
WebLogicメッセージングの高可用性機能
レプリケートされた分散トピック使用時のアプリケーション設計の制限
拡張トピック機能
高可用性のための拡張トピック・メッセージング機能
共有サブスクリプションおよびクライアントIDポリシー
サブスクリプション・キーとは
共有サブスクリプションの構成
非恒久サブスクリプションの共有が機能する仕組み
非恒久サブスクリプション用の共有サブスクリプション・ポリシーが決定される仕組み
非恒久サブスクリプションが終了する仕組み
恒久サブスクリプションの共有が機能する仕組み
恒久サブスクリプション用の共有サブスクリプション・ポリシーが決定される仕組み
恒久サブスクリプションのサブスクライブを解除する方法
恒久サブスクライバのサブスクライブ解除時に考慮する点
恒久サブスクリプションの管理
JMSDurableSubscriberRuntimeMbeanのネーミング・ルール
トピック使用時の設計方針
「インスタンスごとに1つのコピー」設計方針
「アプリケーションごとに1つのコピー」設計方針
JMS 2.0共有サブスクリプション使用時の考慮事項
レプリケートされた分散トピックの置換
レプリケートされた分散トピックを置換する理由
RDTの置換前の重要な前提条件
スタンドアロン・トピックによるRDTの置換
PDTによるRDTの置換
分散トピックのベスト・プラクティス
15
サーバー障害からの回復
JMSクライアントの自動フェイルオーバー
自動再接続の制限事項
JMSプロデューサの自動フェイルオーバー
プロデューサのサンプル・コード
再使用可能なConnectionFactoryオブジェクト
再使用可能なDestinationオブジェクト
再接続されるConnectionオブジェクト
再接続されるConnectionの特殊なケース
再接続されるSessionオブジェクト
再接続されるSessionの特殊なケース
再接続されるMessageProducerオブジェクト
分散宛先の特殊ケース
JMSコンシューマの自動フェイルオーバーの構成
コンシューマ・クライアントのサンプル・コード
クライアントの自動リフレッシュ・オプションの構成
再接続されるConsumerの一般的なケース
同期コンシューマ
非同期コンシューマ
再接続されるConsumerの特殊なケース
分散宛先のコンシューマ
メッセージドリブンEJB
恒久サブスクリプションのClientIDが指定されたコンシューマ接続
非恒久サブスクリプションとメッセージの破棄
重複メッセージ
確認応答モードによる違い
クラスタ内の移行したJMS宛先の再接続
JMSクライアントの自動フェイルオーバーを明示的に無効にする
プログラムを使用する場合
管理機能を使用する場合
自動フェイルオーバーを使用したJMSクライアントのベスト・プラクティス
常に例外をキャッチ
トランザクションを使用してメッセージ作業をグループ化する
JMSクライアントで必ずclose()メソッドを呼び出す
新しいサーバーへのJMSデータの手動移行
16
WebLogic JMS C API
WebLogic JMS C APIとは
システム要件
設計上の原則
ハンドルへのJavaオブジェクトのマッピング
スレッドの利用
例外処理
型の変換
Integer (int)
Long (long)
Character (char)
String
メモリー割当てとガベージ・コレクション
接続のクローズ
ヘルパー関数
セキュリティの考慮事項
実装のガイドライン
クライアントのパッケージ化の要件
クライアントの失敗におけるスレッドのデタッチ問題の回避策
A
サーバー・セッション・プール(非推奨)
サーバー・セッション・プールの定義
ステップ1: JNDIでサーバー・セッション・プール・ファクトリをルックアップする
ステップ2: サーバー・セッション・プール・ファクトリを使用してサーバー・セッション・プールを作成する
キュー接続コンシューマで使用するサーバー・セッション・プールを作成する
トピック接続コンシューマで使用するサーバー・セッション・プールを作成する
ステップ3: 接続コンシューマを作成する
キュー用の接続コンシューマを作成する
トピック用の接続コンシューマを作成する
例: PTPクライアントのサーバー・セッション・プールの設定
ステップ1: サーバー・セッション・プール・ファクトリをルックアップする
ステップ2: サーバー・セッション・プールを作成する
ステップ3: 接続コンシューマを作成する
例: ブリッシュ/サブスクライブ・クライアントのサーバー・セッション・プールの設定
ステップ1
ステップ2: サーバー・セッション・プールを作成する
ステップ3
B
FAQ :リモートJMSプロバイダの統合
JMSおよびJNDIの用語の理解
トランザクションの理解
リモート・プロバイダと統合する方法
リモート・プロバイダを統合する場合のベスト・プラクティス
外部JMSサーバー定義の使用
EJB/サーブレットのJMSリソース参照の使用
WebLogicストア・アンド・フォワードの使用
WebLogic JMS SAFクライアントの使用
メッセージング・ブリッジの使用
メッセージングBeanの使用
AQ JMSの使用
C
宛先のルックアップ方法
JNDI名の使用
宛先識別子の作成の使用
デフォルトのWebLogic CDI構文
カスタムWebLogic CDI構文
宛先ルックアップ時のサーバー・アフィニティ
宛先のルックアップに使用する構文の例
非分散宛先
非分散宛先のJNDI構文
非分散宛先のCDI構文
共通分散宛先
JNDI構文(UDDの場合)
UDDのCDI構文
重み設定された分散宛先
WDDのJNDI構文
WDDのCDI構文
D
JMS宛先の可用性ヘルパーAPIを使用した分散宛先に関する拡張プログラミング
はじめに
DDプロデューサ・ロード・バランシングの制御
基本のJMS
分散キュー(DQ)およびパーティション化された分散トピック(PDT)へのセンダー
レプリケートされた分散トピック(RDT)へのセンダー
JMS宛先可用性ヘルパーAPIの使用
概要
一般的なフロー
weblogic.jms.extension.DestinationDetailの処理
コンシューマ・コンテナのベスト・プラクティス
登録と登録解除のタイミング
URLの処理
失敗の処理
JNDIコンテキストの処理
JMS接続の処理
相互運用性ガイドライン
APIの可用性
外部コンテキスト
宛先タイプのサポート
使用不可の通知
WebLogic Server 9.0以前の分散キューとの相互運用
WebLogic Server 10.3.4.0以前の分散トピックとの相互運用
DestinationDetailのフィールド
セキュリティの考慮事項
WebLogic Serverセキュリティ・モデル
スレッド間の資格証明の受渡し
同一スレッドの使用
匿名ユーザーとして渡す
初期コンテキストからの件名のキャッシュと再利用
クロス・ドメイン・セキュリティの使用タイミング
ユーザーの認証
JNDIコンテキストへの資格証明の指定
JMS接続への資格証明の指定
外部JMSサーバーJNDIコンテキストの資格証明の使用
外部JMSサーバー接続の資格証明の使用
宛先の保護
ワイヤー・データの保護
トランザクションについて
共通分散キュー・コンシューマ用の方針
一般的な戦略
ローカル・サーバー・コンシューマのベスト・プラクティス
共通分散トピックに関するサブスクライバ用の方針
インスタンスごとに1つのコピー
「インスタンスごとに1つのコピー」の一般的パターン設計方針
「インスタンスごとに1つのコピー」を使用したローカル・サーバー・コンシューマ向けベスト・プラクティス
アプリケーションごとに1つのコピー
「アプリケーションごとに1つのコピー」の一般的パターン設計方針
「アプリケーションごとに1つのコピー」を使用したローカル・サーバー・コンシューマ向けベスト・プラクティス