Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)
この節では,CJMSプロバイダ使用時の注意事項について説明します。
デフォルトの設定では,CJMSプロバイダは次のように動作します。
CJMSプロバイダのメッセージ送信では,優先順位の高いメッセージが最初に実行されることが保証されません。例えば,優先順位を1,2,3と設定した「メッセージ1」「メッセージ2」および「メッセージ3」というの三つのメッセージをプロデューサーから送信した場合に,コンシューマーでは「メッセージ1」「メッセージ3」「メッセージ2」のように異なる順番で処理が実行されることがあります。
優先順位と処理順の相違は,次のような要因で発生します。
送信先があるマシンのシステム時間を変更した場合,クライアントは期限切れのメッセージを受信することがあります。
メッセージの有効期限は,JMSExpirationヘッダフィールドにメッセージを送信したメソッドによって設定されます。もし,誤ってシステムの時間設定が変更されていた場合,有効期限が過ぎたメッセージがコンシューマーに送信されるおそれがあります。
メッセージプロパティの処理順序は保証されません。
メッセージプロパティは,順序性を維持した構造で管理されていません。このため,例えば,「プロパティ1」「プロパティ2」「プロパティ3」というプロパティがある場合に,この順序で送信先に送信しても,同じ順序で処理されるとは限りません。ただし,プロパティとその値は,送信前と受信時で変わりません。
メッセージプロパティでは,バイトメッセージを使用しないでください。
バイトメッセージでは,すべてのデータ型のデータを読み出すことができます。例えば,long型の値を含むメッセージをshort型のメソッドで呼び出して処理した場合,意味的には不正な値ですが,最初の2バイトの読み出しには成功してしまいます。これは,ほかのメッセージのデータ型では禁止されている処理です。
CJMSプロバイダでは,データのデータ型を保持し,正しい変換規則の適用に対応するよう,データを管理しています。
BytesMessageインタフェースのwriteUTF()メソッドを使用した場合,65,535バイトより大きいメッセージを書き込まないでください。writeUTF()メソッドに文字列長が65,535バイトより大きい文字列を渡した場合,例外が発生します。
デッドメッセージキューから受け取ったメッセージに対してロールバックを繰り返すと,そのメッセージは送信されない状態になり,そのままデッドメッセージキューに残ります。デッドメッセージキューに残ったメッセージを再度受信するためには,CJMSPブローカーを再起動してください。
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.