• 検索結果がありません。

: メ ッ セージを送り先に送信する

ドキュメント内 jms.book (ページ 89-142)

4 WebLogic JMS アプ リ ケーシ ョ ン の開発

手順 3 : メ ッ セージを送り先に送信する

メ ッ セージ を送 り 先に送信する には、 メ ッ セージ プ ロデューサ — キ ュー センダ

(PTP)

ま たは ト ピ ッ ク パブ リ ッ シ ャ (Pub/Sub) — と 以下の節で説明する メ ソ ッ ド を使用し ます。 Destinationオブジ ェ ク ト と MessageProducerオブジ ェ ク ト は、

4-4

ページの 「JMS アプ リ ケーシ ョ ンの設定」 で説明し た と お り 、 アプ リ ケー シ ョ ンの設定時に作成 されています。

注意: 同じ ト ピ ッ ク に対し て複数の ト ピ ッ ク サブス ク ラ イ バが定義 されている 場合、 各サブス ク ラ イ バは メ ッ セージの独自の ローカル コ ピーを受信し ます。 受信が済んだ ら、 ヘ ッ ダ フ ィ ール ド 値を変更する こ と はでき ます が、 メ ッ セージ プ ロパテ ィ と メ ッ セージ本文は読み込み専用です。 メ ッ セージ本文を変更する には、 対応する メ ッ セージ タ イ プの clearbody()

メ ソ ッ ド を実行し て、 既存の内容を消去し、 書き込みパー ミ ッ シ ョ ン を 有効に し ます。

MessageProducer

ク ラ スの詳細については、 2-15 ページの 「MessageProducer

と MessageConsumer」、 ま たはjavax.jms.MessageProducer

Javadoc

を参照し て く だ さ い。

キュー センダを使用し て メ ッ セージを送信する

メ ッ セージ を送信する には、 以下の 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 モニ タ統計に よ り 、 メ ッ セージ パ イ プ ラ イ ン内のバ ッ ク ロ グ メ ッ セージが、 コ ミ ッ ト ま たは確認応答 される までは ( キ ューおよび恒久サ ブス ク ラ イ バに対し て ) 保留中 と 報告 される。

パフ ォーマン ス — [ 最大 メ ッ セージ数 ] パイ プ ラ イ ン サ イ ズ を増やす と 、 ス ループ ッ ト の高いアプ リ ケーシ ョ ンのパフ ォーマン スが向上する可能性があ

ドキュメント内 jms.book (ページ 89-142)

関連したドキュメント