メッセージセレクタ
QueueSession.createReceiverメソッドまたはcreateBrowserメソッドの引数に,メッセージセレクタを指定できます。メッセージセレクタは,受信するメッセージの条件を指定するためのjava.lang.String型の構文です。受信側アプリケーションはメッセージセレクタを使用することによって,構文の条件に合うヘッダの値を持つメッセージをキューから受信できます。
メッセージセレクタには,識別子,比較演算子,リテラル,および論理演算子を組み合わせた構文を指定します。
識別子
次に示す識別子を指定できます。
-
ヘッダのJMSMessageID
-
ヘッダのJMSCorrelationID
識別子は半角英字であり,大文字と小文字が区別されます。識別子はそれぞれ1回だけ指定できます。不正な識別子を指定した場合,または同じ識別子を複数回指定した場合は,InvalidSelectorExceptionが発生します。
比較演算子
等号(=)だけを指定できます。比較演算子は半角記号です。不正な比較演算子を指定した場合は,InvalidSelectorExceptionが発生します。
リテラル
各識別子に指定できるリテラルを次に示します。不正なリテラルを指定した場合は,InvalidSelectorExceptionが発生します。
-
ヘッダのJMSMessageIDまたはJMSCorrelationIDの場合
文字列リテラルを指定できます。
文字列リテラルはアポストロフィ(')で囲んでください。文字列リテラルにアポストロフィ(')を含む場合はアポストロフィ(')を二つ記述します。例えば"literal's"を指定する場合は,次に示すとおり記述します。
'literal''s'
なお,リテラルは次のどちらかの形式で指定できます。指定されたリテラルは受信時に,JMSMessageIDヘッダはMQMDのMsgIdフィールドに,JMSCorrelationIDヘッダはMQMDのCorrelIdフィールドに変換されます。
-
文字列の先頭が「ID:」ではない場合,UTF-8ストリングとしてエンコードされます。String型から長さ24バイトのbyte型配列(TP1/Message QueueのMQBYTE24型)に変換された結果,24バイトを超える部分は切り捨てられます。
-
文字列の先頭が「ID:」の場合,「ID:+16進数」と解釈されて16進数がMQBYTE24型に変換されます。この場合,16進数の部分が48けたに満たないときは,不足部分は48けたまで「0」を補われてMQBYTE24型に変換されます。また,16進数の部分が48けたを超えるときは,超える部分は切り捨てられます。
次に示す1.〜4.の文字列にあてはまる場合は無効な文字列と見なされ,対応するMQMD構造体のフィールドにはMQMI_NONE,またはMQCI_NONEが格納されます。
-
nullの場合
-
先頭が「ID:」で,後続の文字がない場合
-
先頭が「ID:」で,後続の文字は48文字目まですべて「0」の場合
-
先頭が「ID:」で,後続の文字が16進数として解釈できない場合
-
論理演算子
ANDだけを指定できます。論理演算子は半角英字であり,大文字だけを指定できます。論理演算子の前後には空白が必要です。
上記条件を満たさない場合は,InvalidSelectorExceptionが発生します。
指定できる構文の例
メッセージセレクタに指定できる構文の例を次に示します。
JMSMessageID = 'aaa' JMSCorrelationID = 'bbb' JMSMessageID = 'aaa' AND JMSCorrelationID = 'bbb' JMSCorrelationID = 'aaa' AND JMSMessageID = 'bbb'