Java コラボレーション定義でエラーが発生したとき (たとえば、一意のキーを持つと定義されているデータベーステーブルに重複する行を挿入しようとした場合) に、アウトバウンド MSMQ メッセージをロールバックするには、次の手順に従います。
アウトバウンド MSMQ アダプタのコネクティビティーマップのプロパティーで、「MSMQ 接続モード」として「手動」を選択します。
次の JCD コードを使用します。
try { MSMQClient_1.getEwayConfiguration().setOutMSMQName( "public" ); MSMQClient_1.getEwayConfiguration().setOutMSMQShareMode( "DENY_RECEIVE_SHARE" ); MSMQClient_1.getEwayConfiguration().setOutMSMQReceiveActionCode ( "ACTION_PEEK_CURRENT" ); MSMQClient_1.connect(); MSMQClient_1.getMSMQMessage(); TestDB_1.getTEST1().insert(); TestDB_1.getTEST1().setTESTSTRING( "From JCD" ); TestDB_1.getTEST1().insertRow(); MSMQClient_1.getEwayConfiguration().setOutMSMQReceiveActionCode ( "ACTION_RECEIVE" ); MSMQClient_1.getMSMQMessage(); MSMQClient_1.disconnect(); } catch ( Exception Catch ) { MSMQClient_1.disconnect(); } |
重要なコード項目は太字になっています。例外をキャッチする場合は、try/catch ブロックも使用します (この例では、データベースへの挿入に失敗した場合)。
次の設定でキューを開きます。
MSMQ 共有モード – DENY_RECEIVE_SHARE: ほかのアプリケーションがこのキューを受信モードで開くことができないように、キューをロックします。アプリケーションでキューを閉じるまで、ほかのどのアプリケーションもこのキューを開いてメッセージを受信することはできません。
MSMQ 受信アクションコード – ACTION_PEEK_CURRENT: メッセージを「のぞく」(表示する) ことができるようにキューを開きます。
次に、キューから受信したメッセージでデータベースの更新を試行します。更新に失敗した場合は、手順 7 (キューインスタンスを閉じる) に進みます。正常に更新された場合は、この方法でメッセージをプログラムで受信するようにアダプタ設定プロパティーを変更します。
次に、メッセージを受信します。これで、メッセージがキューから消去されます。
キューを切断します。
最後に、MSMQClient_1.disconnect() を使用してキューを閉じます。これで現在のキューインスタンスが閉じられ、キューのロックが解除されます。