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