4 WebLogic JMS アプ リ ケーシ ョ ン の開発
手順 3 : メ ッ セージを送り先に送信する
メ ッ セージ を送 り 先に送信する には、 メ ッ セージ プ ロデューサ — キ ュー センダ
(PTP)
ま たは ト ピ ッ ク パブ リ ッ シ ャ (Pub/Sub) — と 以下の節で説明する メ ソ ッ ド を使用し ます。 Destinationオブジ ェ ク ト と MessageProducerオブジ ェ ク ト は、4-4
ページの 「JMS アプ リ ケーシ ョ ンの設定」 で説明し た と お り 、 アプ リ ケー シ ョ ンの設定時に作成 されています。注意: 同じ ト ピ ッ ク に対し て複数の ト ピ ッ ク サブス ク ラ イ バが定義 されている 場合、 各サブス ク ラ イ バは メ ッ セージの独自の ローカル コ ピーを受信し ます。 受信が済んだ ら、 ヘ ッ ダ フ ィ ール ド 値を変更する こ と はでき ます が、 メ ッ セージ プ ロパテ ィ と メ ッ セージ本文は読み込み専用です。 メ ッ セージ本文を変更する には、 対応する メ ッ セージ タ イ プの clearbody()
メ ソ ッ ド を実行し て、 既存の内容を消去し、 書き込みパー ミ ッ シ ョ ン を 有効に し ます。
MessageProducer
ク ラ スの詳細については、 2-15 ページの 「MessageProducer
と MessageConsumer」、 ま たはjavax.jms.MessageProducerJavadoc
を参照し て く だ さ い。キュー センダを使用し て メ ッ セージを送信する
メ ッ セージ を送信する には、 以下の QueueSender メ ソ ッ ド を使用し ます。
public void send(
Message message ) throws JMSException public void send(
Message message, int deliveryMode, int priority, long timeToLive ) throws JMSException public void send(
Queue queue, Message message ) throws JMSException public void send(
Queue queue, Message message, int deliveryMode,
4 WebLogic JMS
アプ リ ケーシ ョ ンの開発int priority, long timeToLive ) throws JMSException
まず、 メ ッ セージを定義する必要があ り ます。 ま た、 キ ュー名 ( 匿名 メ ッ セージ プ ロデューサ用 )、 配信モー ド (DeliveryMode.PERSISTENT
ま たは
DeliveryMode.NON_PERSISTENT
)
、 優先度 (0-9)
、 および存続時間 ( ミ リ 秒単位 ) も指定する必要があ り ます。 指定し ない場合、 配信モー ド、 優先度、 および存続 時間の各属性は以下のいずれかに設定されます。プ ロデューサに対し て定義された接続フ ァ ク ト リ ま たは送 り 先オーバー ラ イ ド コ ン フ ィ グ レーシ ョ ン属性 ( 『管理者ガ イ ド 』 の 「
JMS
の管理」 を参照 )メ ッ セージ プロデューサの set メ ソ ッ ド に よ っ て指定さ れた値 (
4-28
ページ の 「 メ ッ セージ プ ロデューサ属性の設定」 を参照 )注意:
WebLogic JMS
には、 以下の よ う な独自の属性も用意されています。 詳細については、
4-28
ページの 「 メ ッ セージ プ ロデューサ属性の設定」 を 参照し て く だ さい。TimeToDeliver
(
生成時間 )。 送信 さ れた メ ッ セージが、 対象送 り 先 で表示可能にな る ま での遅延を表し ます。RedeliveryLimit。 回復ま たはロールバ ッ ク の後に、 メ ッ セージが 再配信 される回数を示し ます。
配信モー ド を PERSISTENT と し て定義し た場合、 『管理者ガ イ ド 』 の 「JMS の管 理」 で説明し てあ る よ う に、 送 り 先のバ ッ キング ス ト アを コ ン フ ィ グ レーシ ョ ンする必要があ り ます。
注意: バ ッ キング ス ト アが コ ン フ ィ グ レーシ ョ ン されていない場合、 配信モー ド は NON_PERSISTENTに変更され、 メ ッ セージは永続ス ト レージに書き 込まれません。
キ ュー センダが匿名プ ロデューサであ る場合 ( つま り 、 キ ューが作成された と き にその名前が null に設定 された場合 )、 キ ュー名を指定し て ( 最後の 2 つの メ
ソ ッ ド のいずれかを使用する ) メ ッ セージの配信先を指示する必要があ り ます。
匿名プロデューサの定義の詳細については、
4-12
ページの 「QueueSender とQueueReceiver
の作成」 を参照し て く だ さい。メ ッ セージの送信
QueueSender.send(message, DeliveryMode.PERSISTENT, 4, 3600000);
QueueSenderク ラ ス メ ソ ッ ド の詳細については、javax.jms.QueueSender
Javadoc を参照し て く だ さい。
TopicPublisher を使用し て メ ッ セージを送信する
メ ッ セージ を送信する には、 以下の TopicPublisher メ ソ ッ ド を使用し ます。
public void publish(
Message message ) throws JMSException public void publish(
Message message, int deliveryMode, int priority, long timeToLive ) throws JMSException public void publish(
Topic topic, Message message ) throws JMSException public void publish(
Topic topic, Message message, int deliveryMode, int priority, long timeToLive ) throws JMSException
メ ッ セージ を指定する必要があ り ます。 ま た、 ト ピ ッ ク名、 配信モー ド
(
DeliveryMode.PERSISTENTま たは DeliveryMode.NON_PERSISTENT)
、 優先度(
0-9)
、 および存続時間 ( ミ リ 秒単位 ) も指定する必要があ り ます。 指定し ない場 合、 配信モー ド 、 優先度、 および存続時間の各属性は以下のいずれかに設定 され ます。プ ロデューサに対し て定義 された接続フ ァ ク ト リ ま たは送 り 先オーバーラ イ ド コ ン フ ィ グ レーシ ョ ン属性 ( 『管理者ガ イ ド 』 の 「
JMS
の管理」 を参照 )メ ッ セージ プ ロデューサの set メ ソ ッ ド に よ っ て指定 さ れた値 (
4-28
ページ の 「 メ ッ セージ プ ロデューサ属性の設定」 を参照 )注意:
WebLogic JMS
には、 以下の よ う な独自の属性も用意 されています。 詳細については、
4-28
ページの 「メ ッ セージ プロデューサ属性の設定」 を 参照し て く だ さ い。4 WebLogic JMS
アプ リ ケーシ ョ ンの開発TimeToDeliver
(
生成時間 )。 送信 さ れた メ ッ セージが、 対象送 り 先 で表示可能にな る ま での遅延を表し ます。RedeliveryLimit。 回復ま たはロールバ ッ ク の後に、 メ ッ セージが 再配信 される回数を示し ます。
配信モー ド を PERSISTENT と し て定義し た場合、 『管理者ガ イ ド 』 の 「
JMS
の管 理」 で説明し てあ る よ う にバ ッ キング ス ト アを コ ン フ ィ グ レーシ ョ ンする必要 があ り ます。注意: バ ッ キング ス ト アが コ ン フ ィ グ レーシ ョ ン されていない場合、 配信モー ド は NON_PERSISTENTに変更され、 メ ッ セージは保存 さ れません。
ト ピ ッ ク パブ リ ッ シ ャ が匿名プ ロデューサであ る場合 ( つま り 、 ト ピ ッ ク が作成 された と きにその名前が null に設定 された場合 )、 ト ピ ッ ク名を指定し て ( 最後 の 2 つの メ ソ ッ ド のいずれかを使用する ) メ ッ セージの配信先を指示する必要が あ り ます。 匿名プ ロデューサの定義の詳細については、
4-13
ページの「TopicPublisher と TopicSubscriber の作成」 を参照し て く だ さい。
た と えば、 次のコー ド は、 永続的 メ ッ セージ を優先度 4、 存続時間 1 時間で送信 し ます。
TopicPublisher.publish(message, DeliveryMode.PERSISTENT, 4,3600000);
TopicPublisherク ラ ス メ ソ ッ ド の詳細については、
javax.jms.TopicPublisher
Javadoc
を参照し て く だ さい。メ ッ セージ プロデューサ属性の設定
前節で説明し た よ う に、 メ ッ セージ を送信する と き には、 配信モー ド、 優先度、
および存続時間をオプシ ョ ンで指定でき ます。 指定し ない場合、 こ れ ら の属性は 接続フ ァ ク ト リ の コ ン フ ィ グ レーシ ョ ン属性に設定 されます。 詳細については、
『管理者ガ イ ド 』 の 「
JMS
の管理」 を参照し て く だ さ いま た、 メ ッ セージ プ ロデューサの set メ ソ ッ ド を使用し て、 配信モー ド 、 優先
メ ッ セージの送信
注意: 配信モー ド 、 優先度、 存続時間、 配信時間、 再配信遅延 ( タ イ ムア ウ ト
)
、 再配信制限の各属性値は、 [ 配信モー ド のオーバ ラ イ ド ]、 [ 優先順位 オーバ ラ イ ド ]、 [ 生存時間のオーバ ラ イ ド ]、 [ 配信時間のオーバ ラ イ ド]
、 [ 再配信遅延のオーバ ラ イ ド ]、 および [ 再配信の制限 ] の各コ ン フ ィ グ レーシ ョ ン属性を使用し て、 送 り 先に よ ってオーバーラ イ ド で き ます。詳細については、
Administration Console
オン ラ イ ン ヘルプを参照し て く だ さ い。注意:
JMS
では、 メ ッ セージ ID と タ イ ム ス タ ンプ情報を無効にする ための MessageProducer メ ソ ッ ド を定義する こ と も で き ます。 ただ し、 こ れ ら の メ ソ ッ ド は WebLogic JMS では無視されます。MessageProducer ク ラ ス メ ソ ッ ド の詳細については、 Sun の javax.jms.MessageProducer
Javadoc
ま たはweblogic.jms.extensions.WLMessageProducer
Javadoc
を参照し て く だ さい。表4-2 メ ッ セージ プロデューサの set メ ソ ッ ド および get メ ソ ッ ド
属性 set メ ソ ッ ド get メ ソ ッ ド
配信モー ド public void setDeliveryMode(
int deliveryMode ) throws JMSException
public int getDeliveryMode(
) throws JMSException
優先度 public void setPriority(
int defaultPriority ) throws JMSException
public int getPriority(
) throws JMSException
存続時間 public void setTimeToLive(
long timeToLive ) throws JMSException
public long getTimeToLive(
) throws JMSException
配信時間 public void setTimeToDeliver(
long timeToDeliver ) throws JMSException
public long getTimeToDeliver(
) throws JMSException
再配信の制限 public void setRedeliveryLimit(
int redeliveryLimit ) throws JMSException
public int getredeliveryLimit(
) throws JMSException
4 WebLogic JMS
アプ リ ケーシ ョ ンの開発例 : PTP アプ リ ケーシ ョ ン内での メ ッ セージの送信
次の例は、WL_HOME\samples\server\src\examples\jms\queue
デ ィ レ ク ト リ (
WL_HOMEは WebLogic Platform の イ ン ス ト ール先の最上位デ ィ レ ク ト リ ) にあ るWebLogic Server
付属の examples.jms.queue.QueueSendの例か ら の抜粋です。こ の例では、TextMessageを作成し、 メ ッ セージのテキ ス ト を設定し てキ ュー に送信する ために必要な コー ド を示し てあ り ます。
msg = qsession.createTextMessage();
. . .
public void send(
String message ) throws JMSException {
msg.setText(message);
qsender.send(msg);
}
QueueSenderク ラ ス と メ ソ ッ ド の詳細については、javax.jms.QueueSender
Javadoc
を参照し て く だ さい。例 : Pub/sub アプ リ ケーシ ョ ン内での メ ッ セージの 送信
次の例は、WL_HOME\samples\server\src\examples\jms\topicデ ィ レ ク ト リ
(
WL_HOMEは WebLogic Platform の イ ン ス ト ール先の最上位デ ィ レ ク ト リ ) にあ るWebLogic Server
付属の examples.jms.topic.TopicSendの例か ら の抜粋です。こ の例では、TextMessageを作成し、 メ ッ セージのテキ ス ト を設定し て ト ピ ッ ク に送信する ために必要な コー ド を示し てあ り ます。
msg = tsession.createTextMessage();
. . .
public void send(
メ ッ セージの受信
TopicPublisher ク ラ ス と メ ソ ッ ド の詳細については、
javax.jms.TopicPublisher
Javadoc
を参照し て く だ さい。メ ッ セージの受信
4-4
ページの 「JMS アプ リ ケーシ ョ ンの設定」 で説明し た と お り JMS アプ リ ケーシ ョ ン を設定し た ら、 メ ッ セージ を受信する こ と ができ ます。メ ッ セージ を受信する には、 以下の節で説明する と お り レ シーバ オブジ ェ ク ト を作成し、 メ ッ セージ を同期受信する か非同期受信するかを指定する必要があ り ます。
メ ッ セージ を受信する順序は、 以下の要素に よ っ て設定でき ます。
コ ン フ ィ グ レーシ ョ ン時に定義 される メ ッ セージ配信属性 ( 配信モー ド と ソー ト 条件 ) ( 『管理者ガ イ ド 』 の 「
JMS
の管理」 を参照 )、 ま たは send() メ ソ ッ ド の一部 と し て定義 される メ ッ セージ配信属性 (4-23
ページの 「 メ ッ セージの送信」 を参照 )送 り 先キーを使用し て設定 さ れる送 り 先ソ ー ト 順序 ( 『管理者ガ イ ド 』 の
「JMS の管理」 を参照 )
受信が済んだ ら、 ヘ ッ ダ フ ィ ール ド 値を変更する こ と はでき ますが、 メ ッ セー ジ プ ロパテ ィ と メ ッ セージ本文は読み込み専用です。 メ ッ セージ本文を変更す るには、 対応する メ ッ セージ タ イ プの clearbody()メ ソ ッ ド を実行し て、 既存 の内容を消去し、 書き込みパー ミ ッ シ ョ ン を有効に し ます。
メ ッ セージ を受信する ための JMS ク ラ ス と メ ッ セージ タ イ プの詳細について は、javax.jms.Message
Javadoc
を参照し て く だ さい。 メ ッ セージの送信につい ては、4-23
ページの 「 メ ッ セージの送信」 を参照し て く だ さい。メ ッ セージの非同期受信
こ の手順については、 アプ リ ケーシ ョ ンの設定手順の中で説明されています。 詳 細については、
4-16
ページの 「手順 6b : 非同期 メ ッ セージ リ スナを登録する ( オプシ ョ ン ) ( メ ッ セージ コ ンシ ューマ )」 を参照し て く だ さい。4 WebLogic JMS
アプ リ ケーシ ョ ンの開発JMS
接続フ ァ ク ト リ の コ ン フ ィ グ レーシ ョ ン時に [ 最大 メ ッ セージ数 ] 属性を設 定する と 、 非同期セ ッ シ ョ ンの間に存在し、 メ ッ セージ リ スナにまだ渡されて いない メ ッ セージの最大数を指定で き ます。非同期メ ッ セージ パイプ ラ イ ン
メ ッ セージの生成が、 それ ら を消費でき る非同期 メ ッ セージ リ スナ ( コ ンシ ュー マ ) よ り も速い場合、 バ ッ チ内でまだ消費 されていない複数の メ ッ セージが、 使 用可能な非同期 メ ッ セージ リ スナが存在する別のセ ッ シ ョ ンに送信 されます。 こ の よ う に し て別のセ ッ シ ョ ンに送信 さ れる メ ッ セージの こ と を、 メ ッ セージ パ イ プ ラ イ ン と 呼んだ り 、 JMS ベンダに よ っ ては メ ッ セージ バ ッ ク ロ グ と 呼んだ り し ます。 パ イ プ ラ イ ン ( ま たはバ ッ ク ロ グ ) のサ イ ズは、 非同期コ ンシ ューマ に蓄積 されなが ら、 まだ メ ッ セージ リ スナに渡 されていない メ ッ セージの数で 決ま り ます。
メ ッ セージ パイ プ ラ イ ンのコ ン フ ィ グレーシ ョ ン
ク ラ イ アン ト のパイ プ ラ イ ンの最大サ イ ズを指定するには、 ク ラ イ アン ト の接続 フ ァ ク ト リ の [ 最大 メ ッ セージ数 ] 属性を コ ン フ ィ グ レーシ ョ ン し ます。 パ イ プ ラ イ ンの最大サ イ ズは、 「 メ ッ セージ リ スナに渡 されていない状態で、 1 つの非 同期コ ンシ ューマに蓄積でき る メ ッ セージの最大数」 と 定義 されます。 デフ ォル
ト 設定は 10 です。
JMS
接続フ ァ ク ト リ の コ ン フ ィ グ レーシ ョ ンの詳細については、 『管理者ガ イ ド 』 の 「JMS
の管理」 を参照し て く だ さ い。パイ プ ラ イ ン化された メ ッ セージの動作
コ ン フ ィ グ レーシ ョ ン し た メ ッ セージ パ イ プ ラ イ ンは以下の よ う に動作し ます。
統計 — JMS モニ タ統計に よ り 、 メ ッ セージ パ イ プ ラ イ ン内のバ ッ ク ロ グ メ ッ セージが、 コ ミ ッ ト ま たは確認応答 される までは ( キ ューおよび恒久サ ブス ク ラ イ バに対し て ) 保留中 と 報告 される。
パフ ォーマン ス — [ 最大 メ ッ セージ数 ] パイ プ ラ イ ン サ イ ズ を増やす と 、 ス ループ ッ ト の高いアプ リ ケーシ ョ ンのパフ ォーマン スが向上する可能性があ