Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)

[目次][用語][索引][前へ][次へ]

7.19 CJMSプロバイダ使用時の注意事項

この節では,CJMSプロバイダ使用時の注意事項について説明します。

<この節の構成>
(1) デフォルトの設定でのCJMSプロバイダの動作
(2) メッセージ処理の優先順位についての注意事項
(3) 有効期限が過ぎたメッセージの扱い
(4) メッセージプロパティの順序性
(5) メッセージプロパティでのバイトメッセージの扱い
(6) BytesMessageインタフェースでのメッセージの扱い
(7) デッドメッセージキューでのメッセージの扱い

(1) デフォルトの設定でのCJMSプロバイダの動作

デフォルトの設定では,CJMSプロバイダは次のように動作します。

(2) メッセージ処理の優先順位についての注意事項

CJMSプロバイダのメッセージ送信では,優先順位の高いメッセージが最初に実行されることが保証されません。例えば,優先順位を1,2,3と設定した「メッセージ1」「メッセージ2」および「メッセージ3」というの三つのメッセージをプロデューサーから送信した場合に,コンシューマーでは「メッセージ1」「メッセージ3」「メッセージ2」のように異なる順番で処理が実行されることがあります。

優先順位と処理順の相違は,次のような要因で発生します。

(3) 有効期限が過ぎたメッセージの扱い

送信先があるマシンのシステム時間を変更した場合,クライアントは期限切れのメッセージを受信することがあります。

メッセージの有効期限は,JMSExpirationヘッダフィールドにメッセージを送信したメソッドによって設定されます。もし,誤ってシステムの時間設定が変更されていた場合,有効期限が過ぎたメッセージがコンシューマーに送信されるおそれがあります。

(4) メッセージプロパティの順序性

メッセージプロパティの処理順序は保証されません。

メッセージプロパティは,順序性を維持した構造で管理されていません。このため,例えば,「プロパティ1」「プロパティ2」「プロパティ3」というプロパティがある場合に,この順序で送信先に送信しても,同じ順序で処理されるとは限りません。ただし,プロパティとその値は,送信前と受信時で変わりません。

(5) メッセージプロパティでのバイトメッセージの扱い

メッセージプロパティでは,バイトメッセージを使用しないでください。

バイトメッセージでは,すべてのデータ型のデータを読み出すことができます。例えば,long型の値を含むメッセージをshort型のメソッドで呼び出して処理した場合,意味的には不正な値ですが,最初の2バイトの読み出しには成功してしまいます。これは,ほかのメッセージのデータ型では禁止されている処理です。

CJMSプロバイダでは,データのデータ型を保持し,正しい変換規則の適用に対応するよう,データを管理しています。

(6) BytesMessageインタフェースでのメッセージの扱い

BytesMessageインタフェースのwriteUTF()メソッドを使用した場合,65,535バイトより大きいメッセージを書き込まないでください。writeUTF()メソッドに文字列長が65,535バイトより大きい文字列を渡した場合,例外が発生します。

(7) デッドメッセージキューでのメッセージの扱い

デッドメッセージキューから受け取ったメッセージに対してロールバックを繰り返すと,そのメッセージは送信されない状態になり,そのままデッドメッセージキューに残ります。デッドメッセージキューに残ったメッセージを再度受信するためには,CJMSPブローカーを再起動してください。