JMSメッセージのヘッダとプロパティ
JMSメッセージとTP1/Message Queueのメッセージとの対応
MQCクライアント機能のJMSインタフェースで作成したメッセージ(JMSメッセージ)と,TP1/Message Queueのメッセージとの対応を次の図に示します。
JMSメッセージは,ヘッダ,プロパティ,およびメッセージ本体で構成されています。
一般的なJMSメッセージのヘッダは,クライアントとプロバイダの双方がメッセージを識別・送信するための値を含みます。プロパティは,アプリケーション固有の値を格納するためのフィールドを定義する組み込み機能を提供します。
TP1/Message Queue Accessでは,図7-3に示すとおり,JMSメッセージのヘッダとプロパティがMQMD構造体に対応づけられてキューに格納されます。また,プロパティは,MQMD構造体の各フィールドに値を設定・取得するために使用されます。アプリケーション固有のプロパティ値はTP1/Message Queueのキューには格納されません。
JMSヘッダと対応するMQMD構造体のフィールド,およびJMSプロパティと対応するMQMD構造体のフィールドを次の表に示します。設定者が「クライアント」以外のヘッダは指定できません。
- (凡例)
-
−:該当しません。
- 注※1
-
プロパティJMSXGroupIDの文字列が有効かどうか,またプロパティJMS_HITACHI_MQMF_LAST_MSG_IN_GROUPの値によって,MQMD構造体のMsgFlagsフィールドに次の値が代入されます。
JMSXGroupIDの文字列
JMS_HITACHI_MQMF_LAST_MSG_IN_GROUPの値
false
true
無効
MQMF_NONE
有効
MQMF_MSG_IN_GROUP
MQMF_LAST_MSG_IN_GROUP
- 注※2
-
String型から長さ24バイトのbyte型配列(TP1/Message QueueのMQBYTE24型)に変換された結果,24バイトを超える部分は切り捨てられます。
文字列の先頭が「ID:」ではない場合,UTF-8ストリングとしてエンコードされます。さらに,メッセージの送信を契機に,ヘッダとプロパティに格納された文字列は,先頭が「ID:」で以降が48けたの16進数の文字列に置き換えられます。
文字列の先頭が「ID:」の場合,「ID:+16進数」と解釈されて16進数がMQBYTE24型に変換されます。この場合,16進数の部分が48けたに満たないときは,不足部分は48けたまで「0」を補われてMQBYTE24型に変換されます。また,16進数の部分が48けたを超えるときは,超える部分は切り捨てられます。
次に示す1.〜4.の文字列にあてはまる場合は無効な文字列と見なされ,対応するMQMD構造体のフィールドにはMQCI_NONEまたはMQGI_NONEが格納されます。
-
nullの場合
-
先頭が「ID:」で,後続の文字がない場合
-
先頭が「ID:」で,後続の文字は48文字目まですべて「0」の場合
-
先頭が「ID:」で,後続の文字が16進数として解釈できない場合
-
- 注※3
-
String型から長さ8バイトのchar型配列(TP1/Message QueueのMQCHAR8型)に変換(UTF-8から7ビットASCIIに変換)された結果,8バイトを超える部分は切り捨てられます。
JMSプロパティ読み込み時の型変換
JMSプロパティに設定できる型は,boolean,byte,short,int,long,float,double,およびStringです。書き込まれたときとは異なる型でJMSプロパティを読み込む場合,次の表に示すように型が変換されます。
プロパティの型 |
読み込むときの型 |
||||||||
---|---|---|---|---|---|---|---|---|---|
boolean |
byte |
short |
int |
long |
float |
double |
String |
||
書き込まれたときの型 |
boolean |
○ |
○ |
||||||
byte |
○ |
○ |
○ |
○ |
○ |
||||
short |
○ |
○ |
○ |
○ |
|||||
int |
○ |
○ |
○ |
||||||
long |
○ |
○ |
|||||||
float |
○ |
○ |
○ |
||||||
double |
○ |
○ |
|||||||
String※ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
- (凡例)
-
○:型が変換されます。
空白:型が変換されません。この場合,読み込み時に例外がスローされます。
- 注※
-
String型で書き込まれた文字列が変換される場合,書き込まれた文字列が変換後の型のラッパークラスのvalueOfメソッドによって解釈ができないときは,例外がスローされる場合があります。