Upload
oracle-fusion-middleware
View
11
Download
1
Embed Size (px)
DESCRIPTION
WebLogic ServerでJMSアプリケーションを使用する方法を紹介します。メッセージングの概念や基本的なJMSプログラミングの方法からWebLogic ServerにおけるJMSサービスの設定方法までWebLogic ServerでJMSアプリケーションを使用するまでの基本的な流れを解説します。日本オラクル オラクル ユニバーシティ 岡田 大輔
Citation preview
Copyright© 2012, Oracle. All rights reserved. 2
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。
Copyright© 2012, Oracle. All rights reserved.
JMSとは
• Java Messaging Services • Javaからメッセージング・サービスを利用するための標準API
• Java EE 6: JMS 1.1
• WebLogic ServerはJMSプロバイダとしてメッセージング・サービスを提供する
4
Copyright© 2012, Oracle. All rights reserved.
JMSのアーキテクチャ
5
Producer Consumer Producer Consumer アプリケーション A アプリケーション B
JMSクライアント (メッセージ・プロデューサ)
JMSクライアント (メッセージ・コンシューマ) JMSプロバイダ
JMSプロバイダ JMSに対応したメッセージングシステムの実装(MOM)
またはMOMサービスをJava EEに提供する機能
JMSクライアント JMS APIを使用してメッセージの送受信を行うプログラム。送信側はプロデューサ、受信側はコンシューマと呼ぶ
JMSメッセージ JMSクライアント間でやり取りされるデータ
JMSメッセージ JMSメッセージ
Copyright© 2012, Oracle. All rights reserved.
• メッセージングサービスへの接続情報を提供する
• JMS接続ファクトリ
• JMS送り先
• 参照情報がJNDIにバインドされる(管理オブジェクト)
WebLogic Server
JMSサーバ
QueueX
TopicX
JMS接続ファクトリ
JMSプロバイダ
6
JNDI JMSプロバイダを構成するとJNDIに管理オブジェクトが登録される
JMSプロバイダ (メッセージング・サービス)
Copyright© 2012, Oracle. All rights reserved.
メッセージングタイプ
PTPドメイン • ポイント・ツー・ポイント
• 1対1のメッセージング (プルモデル)
• メッセージは特定のキュー・レシーバにのみ配信される
• メッセージはキューで管理
7
アプリケーション B-1
アプリケーション B-2 アプリケーション A
アプリケーション B-3
メッセージ・プロデューサ (キュー・センダ)
メッセージ・コンシューマ (キュー・レシーバ) メッセージ・キュー
JMSメッセージ JMSメッセージ
NOTE:
JMSメッセージの送受信方式を『メッセージング・ドメイン』と呼びます。
WebLogic Serverのドメインとは無関係です。
Copyright© 2012, Oracle. All rights reserved.
メッセージング・タイプ
Pub/Subドメイン • パブリッシュ・サブスクライブ
• 1対多のメッセージング (プッシュモデル)
• メッセージはすべてのトピック・サブスクライバに配信される
• メッセージはトピックで管理
8
アプリケーション B-1
アプリケーション B-2 アプリケーション A
アプリケーション B-3
メッセージ・プロデューサ (トピック・パブリッシャ)
メッセージ・コンシューマ (トピック・サブスクライバ) メッセージ・トピック
JMSメッセージ JMSメッセージ
Copyright© 2012, Oracle. All rights reserved.
JMSクライアント (メッセージ・プロデューサ)
JMSクライアント (メッセージ・コンシューマ)
JMSプログラミングの流れ
9
createConnection
createSession
createMessage
send receive
Session
ConnectionFactory
Connection
Destination
Message
MessageProducer MessageConsumer
JNDIルックアップ
Copyright© 2012, Oracle. All rights reserved.
JMSメッセージの構造
• メッセージはヘッダ、プロパティ、ボディから構成される
10
Headers
JMSDestination, JMACorrelationID, JMSDeliveryMode, JMSExpiration …
Properties
JMS仕様: JMSX…
...
Body
Message
StreamMessage
BytesMessage
ObjectMessage
MapMessage
TextMessage
• JMSヘッダ
メッセージ・コンシューマで利用できる標準のヘッダー・フィールド
• JMSプロパティ
送信側アプリケーションによって追加されたヘッダー・フィールド アプリケーション固有のカスタム・プロパティも定義可能
•ボディ
メッセージ本文。送信する内容によって選択 (WLSではXMLMessageも使用可)
Copyright© 2012, Oracle. All rights reserved.
JMSクライアント例:プロデューサ
11
@Resource(mappedName = "jms/connectionFactory")
private ConnectionFactory factory;
@Resource(mappedName = "jms/demoQueue")
private Destination destination;
public void sendMessage(String payload) {
Connection conn = null;
try {
conn = factory.createConnection();
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(destination);
TextMessage message = session.createTextMessage();
message.setText(payload);
producer.send(message);
} catch (JMSException e) {
// 例外処理
} finally {
// クローズ処理
}
}
1. JMS管理オブジェクト(接続ファクトリと送り先)をJNDIルックアップ
2. Conectionを生成してSession, MessageProducerを生成
3. メッセージ送信
4. クローズ処理を忘れずに
Copyright© 2012, Oracle. All rights reserved.
JMSクライアント例: コンシューマ
12
@MessageDriven(mappedName = "jms/demoQueue")
public class SessionReceiver implements MessageListener {
@Override
public void onMessage(Message message) {
try {
TextMessage txtMsg = (TextMessage) message;
String payload = txtMsg.getText();
System.out.println("*** MDB received msg: " + payload);
} catch (JMSException e) {
// 例外処理
}
}
}
1. JMS管理オブジェクト(接続ファクトリと送り先)のルックアップはEJBコンテナが制御
2. MessageListenerインタフェースのメソッドonMessageをオーバーライド
3. Messageを任意の型にキャストして受信処理
Copyright© 2012, Oracle. All rights reserved.
まとめ
• JMSはメッセージング・サービスにアクセスするための標準API
• 2つのメッセージング方式(PTP, Pub/Sub)をサポート
• JMSクライアントはJMS管理オブジェクトを取得してメッセージングを行う
• JMS接続ファクトリ
• 送り先
• JMSプロバイダを構成するとアプリケーションサーバのJNDI
に管理オブジェクトがバインドされる
13
Copyright© 2012, Oracle. All rights reserved.
WebLogic ServerでJMSを使えるようにするには?
• JMSプロバイダの設定を行う
• WebLogic Serverのメッセージングサービスを使用する場合
• JMSサーバ
• JMSモジュール
15
JMSSystemResourceMBean
etc
ServerMBean
JMSServerMBean
JMSBean
SubDeployment MBean
QueueBean
TopicBean
JMSConnection FactoryBean
QuotaBean
TemplateBean
DestinationKeyBean
ForeignServerBean
DomainMBean
config.xml
<jmsmodule>-jms.xml
Copyright© 2012, Oracle. All rights reserved.
JMSサーバとJMSモジュール
• JMSサーバ
• メッセージング・サービス
• 特定のサーバ上でのみアクティブになる固定サービス
• JMSモジュール
• JMSサーバで使用するリソースをまとめたもの
• 送り先、割り当て、接続ファクトリ …
• デプロイメント対象はサーバ単位(複数サーバ指定可)
• 異なるスコープを指定する場合はサブデプロイメントを使用
16
Copyright© 2012, Oracle. All rights reserved.
設定 – JMSモジュールの作成
18
ディスクリプタ名とドメイン内の場所は空欄でOK
$DOMAIN/config/jms配下に作成される
Copyright© 2012, Oracle. All rights reserved.
リソースの対象指定
• サブデプロイメント / 高度な対象指定
• JMSモジュールとは異なるデプロイメント・スコープを指定する場合に使用する (同じ場合は不要)
• 送り先(キュー/トピック)では必須
22
サプデプロイメントが定義されていない場合は作成
Copyright© 2012, Oracle. All rights reserved.
WebLogic Server
JMSサーバA
WebLogic Server JMSサーバB
JMSモジュール1
まとめ: JMSサーバとJMSモジュール
24
トピックX
キューY
トピックY
テンプレート
割当
JMS接続ファクトリ
キューX
JMSモジュールのデプロイ対象はサーバ単位なので複数サーバ上のJMSサーバで共有可能
JMSモジュールと同じ対象指定を使用できるリソースにはサブデプロイメントは不要
キューやトピックはJMSサーバ毎に作られるためサブデプロイメントが必要
JMSサーバは固定サービスのためサーバごとに定義
Copyright© 2012, Oracle. All rights reserved.
モニタ – JMSサーバ
25
送り先の制御: (休止・再開可能)
生成 - JMSクライアントがメッセージを作成・送信
挿入 - 送り先にメッセージを配置
消費 - JMSクライアントがメッセージを受信
Copyright© 2012, Oracle. All rights reserved.
JMSメッセージの表示
27
送り先に滞留しているメッセージが表示される
送り先のメッセージは[削除]や[移動]可能
Copyright© 2012, Oracle. All rights reserved.
まとめ:
• WebLogic ServerでJMSサービスを使用するには
• JMSサーバを設定
• JMSモジュールを設定
• 必要に応じてJMSリソースを定義
• JMSリソースの種類によってはサブデプロイメントが必要
• JMSは固定サービス
• 複数のサーバでJMSを使う場合はサーバごとにJMSサーバを定義する必要がある
28
Copyright© 2012, Oracle. All rights reserved.
問題: 1
• ここまでの設定を行ったJMSサーバにメッセージが滞留した状態でサーバが再起動するとどうなる?
a. メッセージは再起動後も保持される
b. メッセージは消失する
30
Copyright© 2012, Oracle. All rights reserved.
JMSで設定しておきたいこと①
• 永続メッセージング
• デフォルトのJMSメッセージングは永続化されない
• サーバ障害時はメッセージが消失する
• 非同期処理では致命的な問題
• JMSサーバはメッセージを永続化可能
• 永続ストアを設定して、JMSサーバごとに指定
• 永続方式はJDBC / File
• 信頼性の高いストアを選択する
• メッセージングの永続化指定
• 接続ファクトリ: デフォルト配信モードは永続
• JMSクライアント: Message. setJMSDeliveryMode(int)
• デフォルトは永続(DeliveryMode.PERSISTENT)
• 送り先: 永続モードをオーバライド可能
31
Copyright© 2012, Oracle. All rights reserved.
永続メッセージング
32
Consumer Consumer
アプリケーション A アプリケーション B
JMSクライアント (メッセージ・プロデューサ)
JMSクライアント (メッセージ・コンシューマ) JMSプロバイダ
JMSメッセージ JMSメッセージ
永続ストア
送信完了時にはメッセージは永続化された状態
サーバ停止時に永続化されていたメッセージはサーバ再起動後に使用可能
Copyright© 2012, Oracle. All rights reserved.
永続ストアの作成
33
非XAドライバでデータソースを作成
JDBCストアで生成されるテーブルの接頭辞
テーブル名は <prefix>WLSTORE
永続ストアを定義したらJMSサーバで永続ストアを指定
Copyright© 2012, Oracle. All rights reserved.
• Pub/Subではサブスクライバが非アクティブ時のイベントは受信できない
• 恒久サブスクライバを使うと非アクティブ時のメッセージを後から受信可能
恒久サブスクリプション
34
アプリケーション B-1
アプリケーション B-2 アプリケーション A
アプリケーション B-3
メッセージ・プロデューサ (トピック・パブリッシャ)
メッセージ・コンシューマ (恒久サブスクライバ) メッセージ・トピック
JMSメッセージ JMSメッセージ
永続ストア
恒久サブスクライバはサブスクリプションIDを通知
Subscribe
すべての恒久サブスクライバにメッセージ配信するまで永続ストアで保持
Copyright© 2012, Oracle. All rights reserved.
問題: 2
• JMSサーバが保持できるメッセージ数/サイズに上限は設定できるか?
a. できる
b. できない
35
Copyright© 2012, Oracle. All rights reserved.
WebLogic Server
• 割当(Quota)
• JMSサーバはWLS上のメモリリソースを消費
• メッセージが多数滞留するとそれだけヒープを消費する
• JMSサーバ単位: JMSサーバのプロパティ
• 送り先単位: JMSリソース
JMSサーバ
キュー
JMSで設定しておきたいこと②
36
アプリケーション A
メッセージ・プロデューサ (トピック・パブリッシャ)
JMSメッセージ 割当
割当を超える メッセージは 受け付けない
Copyright© 2012, Oracle. All rights reserved.
割当の設定
37
割当を超過した時のメッセージ処理ポリシー
FIFO(先入れ先出し) – 着順に処理
PREEMPTIVE(割り込み) – 処理できる順
割当を定義したら送り先で指定する
Copyright© 2012, Oracle. All rights reserved.
問題: 3
• コンシューマが処理できないメッセージはデフォルトではどうなる?
a. 送り先から削除される
b. 送り先から削除されない
38
Copyright© 2012, Oracle. All rights reserved.
• 再配信制限
• JMSコンシューマが正常に処理できないメッセージは送り先に不正に滞留し続ける (ポイズン・メッセージ)
• メッセージの存続時間が0(無制限)だとメッセージは消えない
• 送り先毎に再配信の上限を設定可能 (デフォルトでは再配信回数に制限はない)
• 上限に達したメッセージの処理を選択可能
• 破棄(ログなし)
• ログ(その後に破棄)
• リダイレクト(エラー送り先)
送り先
JMSで設定しておきたいこと③
39
アプリケーション B
JMSクライアント (メッセージ・コンシューマ)
JMSサーバ
JMSメッセージ
例外
エラーになった メッセージは 送り先に滞留
Copyright© 2012, Oracle. All rights reserved.
再配信制限 – 送り先
40
再配信回数の上限: -1は制限なし
再配信までの遅延時間(ミリ秒)
再配信を超えた場合の処理ポリシー:
ログを選択する場合は[ロギング]でJMSロギングを有効化しておく
有効期限ポリシーがリダイレクトの場合の送り先を指定
Copyright© 2012, Oracle. All rights reserved.
メッセージの存続時間
41
• JMSメッセージプロパティでメッセージの存続時間(JMSTimeToLive)を指定可能
• 接続ファクトリ(デフォルト配信) / プロデューサで指定可能
• 送り先でオーバライド可能
Copyright© 2012, Oracle. All rights reserved.
こんなこともできます – 他のメッセージング・サービスとの連携
• SAF (Store And Forward) • 2つのJMSサーバ間でメッセージ転送を行う機能
• メッセージ転送の信頼性はSAFサービスが保証
• Messaging Bridge • JMSサーバとJCAアダプタで接続したメッセージング・サービスとの間でメッセージ転送を行う機能
• JMS非対応のメッセージング・サービスとの連携
• WebLogic Server 8.1以下のJMSサーバとの連携
• 外部JMSサーバ
• 外部のJMS対応メッセージング・サービス(Oracle AQなど)を参照するための設定
42
Copyright© 2012, Oracle. All rights reserved.
こんなこともできます - メッセージングの拡張機能
• Unit of Order (順序単位)
• メッセージの着順を保証する機能
• JMSサーバはコンシューマへのメッセージの配信順を制御
• 順序単位はプロデューサが定義する
• 接続ファクトリの設定かWebLogic JMS APIで設定
• WLMessageProducer#setUnitOfOrder("myOrder")
• Unit of Work(作業単位)
• メッセージをグループ化する機能
• JMSサーバはUOWメッセージをひとかたまりのメッセージとしてコンシューマに配信
• 作業単位はプロデューサがメッセージプロパティで指定
• JMS_BEA_UnitOfWork - UOW名
• JMS_BEA_UnitOfWorkSequenceNumber - UOWシーケンス番号
• JMS_BEA_IsUnitOfWorkEnd - UOW終端指定
43
Copyright© 2012, Oracle. All rights reserved.
まとめ
• 設定しておきたいJMSリソースの設定
• 永続メッセージング
• 永続ストア(ファイル/JDBC)は信頼性を第一に検討
• 割当
• JMSメッセージがヒープを専有し過ぎないための設定
• JMSサーバ、送り先毎に設定可能
• 再配信制限
• ポイズンメッセージを回避するための設定
• 要件に応じて有効期限ポリシーを選択
• メッセージの存続時間もあわせて検討
44
Copyright© 2012, Oracle. All rights reserved.
今回のまとめ
• WebLogic Serverはエンタープライズクラスのメッセージング環境を提供します
• JMS標準仕様に則ったメッセージング
• PTPドメイン, Pub/Subドメイン
• 既存のJMS対応メッセージング・システムとの連携
• UOOやUOWによる最適化
• WebLogic JMS設定はアプリケーション側(API)とインフラ側(
設定)で設定できるものがあります
• 設定に関する責任範囲を明確にしておきましょう
45
Copyright© 2012, Oracle. All rights reserved.
Oracle Universityからのお知らせ
• JMSの設定をはじめとしたWebLogic Serverの管理方法を学習したい方に最適な研修コースをご提供しています。 • Classroomトレーニングだけでなく、Live Virtual Class、『Oracle トレーニング・オンデマンド』など多様な受講形態から選択いただけます。
46
Copyright© 2012, Oracle. All rights reserved.
コース内容
■Oracle Fusion Middleware の概要 ■WebLogic Serverのアーキテクチャ
■Oracle WebLogic Serverのインストール ■管理コンソールおよび他の管理ツールの概要
■WebLogic Server ドメインのコンフィグレーション ■Oracle WebLogic Server の管理およびロギングの使用
■アプリケーションのデプロイ ■データソース、JDBCドライバ、接続プールの設定
■JMS アプリケーションのコンフィグレーション ■WebLogic Serverの基本セキュリティのコンフィグレーション
■Oracle HTTP Server のコンフィグレーション ■Oracle WebLogic クラスタのコンフィグレーション
■バックアップおよびリカバリの管理 ■全体バックアップ、増分バックアップ
受講
前提条件
・Linux の基本コマンドおよびデスクトップのナビゲーション
・クライアント/サーバーの概念における TCP/IP ネットワークに関する基本的な知識
・Java EE の基礎知識(サーブレットや JSP など) ※推奨
対象者 ・Oracle WebLogic Server 11g/12c管理者
・Javaアプリケーション開発者
コース日程 5日間 日程の詳細は Oracle University Webサイト にてご確認ください。
受講料 定価¥363,825(税込) ※Oracle PartnerNetwork会員様は、パートナー割引価格で受講いただけます。
Oracle Application Gridの基盤を支える
Oracle WebLogic Server 11gの管理コース! このコースでは、Web管理者がOracle WebLogic Server 11gのインストールおよび設定
する方法について説明します。Web管理者が管理コンソールやコマンドライン、および
スクリプトツール(WLST)などを使用して、Java EEアプリケーションをOracle
WebLogic Server 11gにデプロイする方法についても説明します。
その他に、Oracle WebLogic Server のWebインタフェースとしてOracle HTTP Serverを設
定する方法を解説し、またOracle WebLogic Serverクラスタを設定してアプリケーションのフェイルオーバーとロードバランシングをサポートする方法を学習します。また、
WebLogic Server管理者の管理タスクの概要について説明します。
Oracle WebLogic Server 11g: 管理
ミドルウェア
次回開催日程 ■7/9(月) - 7 /13(金) トレーニングキャンパス青山
■8/27(月) - 8/31(金) 三田(芝浦)会場
Copyright© 2012, Oracle. All rights reserved.
WebLogic Server勉強会 参加者の皆さまの特典
http://education.oracle.co.jp/campaign_wlstudy/
48