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

5 WebLogic JMS による ト ラ ンザク シ ョ ンの使い方

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

以下の節では、 WebLogic JMS で ト ラ ンザ ク シ ョ ン を使用する方法について説明 し ます。

ト ラ ンザ ク シ ョ ンの概要

JMS

ト ラ ンザ ク シ ョ ン セ ッ シ ョ ンの使い方

JTA

ユーザ ト ラ ンザ ク シ ョ ンの使い方

メ ッ セージ駆動型 Bean を使用し た JTA ユーザ ト ラ ンザ ク シ ョ ン内の非同期 メ ッ セージン グ

例 : JTA ユーザ ト ラ ンザ ク シ ョ ンにおけ る JMS と EJB

注意: こ の節で説明する JMS ク ラ スの詳細については、 Sun Microsystems の

Java Web

サ イ ト にあ る以下の最新の JMS 仕様 と Javadoc を参照し て く だ さ い。 (http://java.sun.com/products/jms/docs.html)

ト ラ ンザク シ ョ ンの概要

ト ラ ンザ ク シ ョ ンを使用する と 、 アプ リ ケーシ ョ ンでは生成および消費さ れ る メ ッ セージのグループを調整し、 送受信する複数の メ ッ セージを基本単位 と し て 処理で き ます。

アプ リ ケーシ ョ ンが ト ラ ンザ ク シ ョ ン を コ ミ ッ ト する と 、 ト ラ ンザ ク シ ョ ン内で 受信し た全 メ ッ セージは メ ッ セージ ング シ ス テムか ら削除さ れ、 ト ラ ンザ ク シ ョ ン内で送信し た メ ッ セージが実際に配信さ れます。 アプ リ ケーシ ョ ンに よ っ て ト ラ ンザ ク シ ョ ンが ロールバ ッ ク さ れた場合、 ト ラ ンザ ク シ ョ ン内で受信し た メ ッ セージは メ ッ セージング シ ス テムに戻さ れ、 送信し た メ ッ セージは破棄 さ れます。

5 WebLogic JMS

に よ る ト ラ ンザク シ ョ ンの使い方

ト ピ ッ ク サブス ク ラ イ バに よ っ て ロールバ ッ ク さ れた受信 メ ッ セージはサブス ク ラ イ バに再配信 さ れます。 キ ュー レ シーバに よ っ て ロールバ ッ ク さ れた受信 メ ッ セージは、 コ ンシ ューマではな く キ ューに再配信さ れます。 それに よ っ て、

キ ュー内の他のコ ンシ ューマが メ ッ セージを受信で き る よ う に し ます。

た と えばオン ラ イ ン シ ョ ッ ピ ングでは、 品物を選択し、 それをオン ラ イ ン シ ョ ッ ピ ン グ カー ト に入れます。 注文し た品物は ト ラ ンザ ク シ ョ ンの一部 と し て格納 さ れますが、 チェ ッ ク ア ウ ト し て注文を確定する ま でユーザの支払い義務 は発生し ません。 ユーザはいつで も注文を キ ャ ンセル し、 カー ト を空にする こ と がで き ます。 キ ャ ンセルに よ って、 現在の ト ラ ンザ ク シ ョ ン内で注文が ロール バ ッ ク さ れます。

JMS

で ト ラ ンザ ク シ ョ ン を使用する方法には以下の 3 種類があ り ます。

ト ラ ンザ ク シ ョ ンで JMS のみを使用する場合は、 JMS ト ラ ンザ ク シ ョ ン セ ッ シ ョ ン を作成で き ます。

EJB

な どの他の処理 と JMS を混在さ せる場合は、 JMS 非 ト ラ ンザ ク シ ョ ン セ ッ シ ョ ンで Java Transaction API (JTA) ユーザ ト ラ ンザ ク シ ョ ン を使用し ます。

メ ッ セージ駆動型 Bean を使用し ます。

1

つの JTA ユーザ ト ラ ンザ ク シ ョ ンで複数の JMS サーバを有効にする場合、 ま たは JMS の処理 と 非 JMS の処理 (EJB な ど) を組み合わせる場合は、 2 フ ェー ズ コ ミ ッ ト ラ イ セン スが必要です。 詳細については、

5-5

ページの 「JTA ユーザ

ト ラ ンザ ク シ ョ ンの使い方」 を参照し て く だ さ い。

以降の節では、 JMS ト ラ ンザ ク シ ョ ン セ ッ シ ョ ン と JTA ユーザ ト ラ ンザ ク シ ョ ンの使い方について説明し ます。

注意: ト ラ ンザ ク シ ョ ン を使用する場合、 ト ラ ンザ ク シ ョ ンが コ ミ ッ ト ま たは ロールバ ッ ク さ れる前に発生する問題に対処する ために、

4-50

ページの

「セ ッ シ ョ ン例外 リ スナの定義」 で説明し てい る よ う にセ ッ シ ョ ン例外 リ スナを定義し てお く こ と をお勧め し ます。

acknowledge() メ ソ ッ ド は、 ト ラ ンザ ク シ ョ ン内で呼び出さ れて も無視 さ れます。 メ ソ ッ ド が ト ラ ンザ ク シ ョ ン内で呼び出さ れる と 、

JMS

ト ラ ンザ ク シ ョ ン セ ッ シ ョ ンの使い方

JMS ト ラ ンザク シ ョ ン セ ッ シ ョ ンの使い方

JMS

ト ラ ンザ ク シ ョ ン セ ッ シ ョ ンは、 セ ッ シ ョ ン内にあ る ト ラ ンザ ク シ ョ ンを サポー ト し ます。 JMS ト ラ ンザ ク シ ョ ン セ ッ シ ョ ンの ト ラ ンザ ク シ ョ ンはセ ッ シ ョ ン外には影響を及ぼ し ません。 た と えば、 セ ッ シ ョ ン を ロールバ ッ ク し て も、 そのセ ッ シ ョ ンの送受信が ロールバ ッ ク さ れ るだけで、 データベース更新は ロールバ ッ ク さ れません。 JTA ユーザ ト ラ ンザ ク シ ョ ンは JMS ト ラ ンザ ク シ ョ ン セ ッ シ ョ ンでは無視 さ れます。

JMS

ト ラ ンザ ク シ ョ ン セ ッ シ ョ ンの ト ラ ンザ ク シ ョ ンは、 最初の送受信処理が 発生し た後で暗黙的に開始 さ れ、 互いに結び付け ら れます。 ト ラ ンザ ク シ ョ ン を

コ ミ ッ ト ま たはロールバ ッ クする と 、 他の ト ラ ンザ ク シ ョ ンが自動的に始ま り ま す。

『管理者ガ イ ド 』 の 「

JMS

の管理」 の説明に従っ て、 シ ステ ム管理者は、 JMS ト ラ ンザ ク シ ョ ン セ ッ シ ョ ン を使用する前に、 アプ リ ケーシ ョ ン開発環境の必要 性に応じ て、 接続フ ァ ク ト リ の属性 ( ト ラ ンザ ク シ ョ ン タ イ ムア ウ ト ) と セ ッ シ ョ ン プールの属性 ( ト ラ ンザ ク シ ョ ン) を調整する必要があ り ます。

JMS

ト ラ ンザ ク シ ョ ン セ ッ シ ョ ンの設定および使用に必要な手順を次の図に示 し ます。

5-1 JMS ト ラ ンザク シ ョ ンセ ッ シ ョ ンの設定と使用

5 WebLogic JMS

に よ る ト ラ ンザク シ ョ ンの使い方

手順 1 : JMS アプ リ ケーシ ョ ンを設定し、 ト ラ ンザ ク シ ョ ン セ ッ シ ョ ン を作成する

4-4

ページの 「JMS アプ リ ケーシ ョ ンの設定」 の説明に従っ て JMS アプ リ ケー シ ョ ン を設定し ますが、

4-8

ページの 「手順 3 : 接続を使用し てセ ッ シ ョ ンを作 成する」 でセ ッ シ ョ ン を作成する際に、 ブール値 transactedtrueに設定し てセ ッ シ ョ ン を ト ラ ンザ ク シ ョ ン処理さ れる よ う に指定し ます。

た と えば、 PTP および Pub/sub メ ッ セージ ング モデルの ト ラ ンザ ク シ ョ ン セ ッ シ ョ ン を作成する方法を次の各 メ ソ ッ ド で示し ます。

qsession = qcon.createQueueSession(

true,

Session.AUTO_ACKNOWLEDGE );

tsession = tcon.createTopicSession(

true,

Session.AUTO_ACKNOWLEDGE );

定義し た ら、 次のセ ッ シ ョ ン メ ソ ッ ド でセ ッ シ ョ ン を ト ラ ンザ ク シ ョ ン処理す る かど う かを決定で き ます。

public boolean getTransacted(

) throws JMSException

注意:

acknowledge

値は ト ラ ンザ ク シ ョ ン セ ッ シ ョ ンでは無視さ れます。

手順 2 : 必要な処理を実行する

現在の ト ラ ンザ ク シ ョ ンで必要な処理を実行し ます。

JTA

ユーザ ト ラ ンザ ク シ ョ ンの使い方

手順 3 : JMS ト ラ ンザク シ ョ ン セ ッ シ ョ ンを コ ミ ッ ト またはロールバッ クする

必要な処理を実行し た ら、 以下の メ ソ ッ ド のいずれかを実行し て ト ラ ンザ ク シ ョ ン を コ ミ ッ ト ま たはロールバ ッ ク し ます。

ト ラ ンザ ク シ ョ ンを コ ミ ッ ト する には、 次の メ ソ ッ ド を実行し ます。

public void commit(

) throws JMSException

commit() メ ソ ッ ド では、 現在の ト ラ ンザ ク シ ョ ンの送受信 メ ッ セージがすべて コ ミ ッ ト さ れます。 受信 メ ッ セージは メ ッ セージン グ シ ス テ ムか ら削除 さ れま すが、 送信 メ ッ セージは表示さ れ る よ う にな り ます。

ト ラ ンザ ク シ ョ ンを ロールバ ッ ク する には、 次の メ ソ ッ ド を実行し ます。

public void rollback(

) throws JMSException

rollback() メ ソ ッ ド では、 現在の ト ラ ンザ ク シ ョ ンの送信 メ ッ セージがキ ャ ン セル さ れ、 受信 メ ッ セージが メ ッ セージング シ ス テムに戻さ れます。

commit() メ ソ ッ ド ま たは rollback()メ ソ ッ ド が JMS ト ラ ンザ ク シ ョ ン セ ッ シ ョ ン以外で発行さ れた場合、IllegalStateExceptionが送出 さ れます。

JTA ユーザ ト ラ ンザク シ ョ ンの使い方

Java Transaction API

(JTA) は、 複数のデータ リ ソース にわた る ト ラ ンザ ク シ ョ ン をサポー ト し ます。 JTA は WebLogic Server の一部 と し て実装 さ れ、 ト ラ ンザ ク シ ョ ン管理を実装する ための標準 Java イ ン タ フ ェース を提供し ます。

ト ラ ンザ ク シ ョ ンを開始、 コ ミ ッ ト 、 ロールバ ッ クする ための

javax.transaction.UserTransaction

オブジ ェ ク ト を使用し て JTA ユーザ ト

ラ ンザ ク シ ョ ン アプ リ ケーシ ョ ン をプロ グ ラ ミ ング し ます。 JTA ユーザ ト ラ ン

5 WebLogic JMS

に よ る ト ラ ンザク シ ョ ンの使い方

ザ ク シ ョ ン内に JMS と EJB を混在さ せる場合、 『WebLogic JTA プ ロ グ ラ マーズ ガ イ ド 』 の 「

EJB

アプ リ ケーシ ョ ンの ト ラ ンザ ク シ ョ ン」 で説明し てい る と お り に EJB か ら ト ラ ンザ ク シ ョ ン を開始する こ と も でき ます。

ト ラ ンザ ク シ ョ ン セ ッ シ ョ ンの開始後に JTA ユーザ ト ラ ンザ ク シ ョ ン を開始で き ます。 ただ し、 JTA ユーザ ト ラ ンザ ク シ ョ ンは ト ラ ンザ ク シ ョ ン セ ッ シ ョ ン に無視 さ れ、 ト ラ ンザ ク シ ョ ン セ ッ シ ョ ンは JTA ユーザ ト ラ ンザ ク シ ョ ンに無 視 さ れます。

WebLogic Server は 2 フ ェーズ コ ミ ッ ト (2PC) プ ロ ト コルをサポー ト し ていま

す。 2PC では、 複数の リ ソ ース マネージ ャ間で 1 つの JTA ト ラ ンザ ク シ ョ ン を 効率的に調整でき る よ う にな り ます。 こ れに よ り 、 ト ラ ンザ ク シ ョ ンに よ る更新 を関連する リ ソース マネージ ャ のすべてで コ ミ ッ ト するか、 ま たはすべての リ ソ ース マネージ ャか ら完全に ロール バ ッ ク し、 ト ラ ンザ ク シ ョ ン開始前の状態 に戻す こ と で、 データの完全性が保証さ れます。

注意: こ のプロ ト コルをサポー ト するには、 独自の 2PC ト ラ ンザ ク シ ョ ン ラ イ セン スが必要です。 2PC が関連する ト ラ ンザ ク シ ョ ンの移行の詳細につ いては、

6-1

ページの 「WebLogic JMS アプ リ ケーシ ョ ンの移植」 を参照 し て く だ さ い。

『Administration Console オン ラ イ ン ヘルプ』 の 「

JMS

接続フ ァ ク ト リ」 の説明 に従っ て、 シ ス テ ム管理者は、 JTA ト ラ ンザ ク シ ョ ン セ ッ シ ョ ン を使用する前 に、 [ ユーザ ト ラ ンザ ク シ ョ ン を有効化 ] チェ ッ ク ボ ッ ク ス をオンに し て、 JTA ユーザ ト ラ ンザ ク シ ョ ン をサポー ト する よ う に接 続フ ァ ク ト リ を コ ン フ ィ グ レーシ ョ ンする必要があ り ます。

JTA

ユーザ ト ラ ンザ ク シ ョ ンの設定および使用に必要な手順を次の図に示し ま す。

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

関連したドキュメント