メッセージコンポーネント

メッセージは次の部分からなります。

メッセージヘッダーフィールド

JRun では、JMS メッセージヘッダーフィールドがサポートされていて、これらのフィールドは JMS メッセージ受信者に送信されます。JRun でサポートされている JMS メッセージヘッダーフィールドは、次の表のとおりです。
フィールド
内容
設定者
JMSDestination
メッセージの送信先を表す Destination オブジェクトが含まれています。
JRun
JMSDeliveryMode
配送モードが含まれています。有効な値は DeliveryMode.PERSISTENT と DeliveryMode.NON_PERSISTENT です。
JRun
JMSMessageID
固有のメッセージ ID が含まれています。
JRun
JMSTimestamp
メッセージが JRun に送信された時刻が含まれています。
JRun
JMSCorrelationID
レスポンスと、関連するリクエストをリンクするアプリケーション特有の文字列が含まれています。
JRun
JMSReplyTo
応答の送信先となる Destination オブジェクトが含まれています。応答は必須ではありませんが、Destination オブジェクトがこのフィールドに
含まれているのは応答が期待されていることを
示しています。
JRun
JMSRedelivered
メッセージを再配送するかどうかを表す boolean が含まれています。コンシューマにより、JMSRedelivered が true に設定されたメッセージが受信された場合、このメッセージは以前配送されたが、コンシューマが受信を認めていなかったと考えられます。
JRun
JMSType
メッセージタイプを表す String が含まれています。
クライアント
JMSExpiration
メッセージの有効期限を指定する long が含まれています。JRun では、クライアントにより指定された Time-to-Live の値に送信時間の GMT を
加えて、この時刻を設定します。
JRun
JMSPriority
メッセージの優先順位が含まれます。優先順位は 0 (最下位) 〜 9 (最上位) の間で指定します。
JRun
JMSXGroupID
メッセージのグループに使用する ID を指定します。
クライアント
JMSXGroupSeq
メッセージのグループに使用するシーケンスを
指定します。
クライアント
JMSXRcvTimestamp
メッセージの配送時刻です。
JRun

ヘッダーフィールドにアクセスするには、Message インターフェイスのメソッドを使用します。Message インターフェイスは、TextInterfaceMapInterface などのコンテンツ特有のメッセージインターフェイスにより拡張されます。

メッセージプロパティ

JRun は JMS 仕様で定義されているオプションの JMSX 接頭辞付きのメッセージプロパティをサポートしません。しかし、Message オブジェクトメソッドを使用してプロパティを取得および設定できます。たとえば、次のコードの一部分を使用して、メッセージを送信する前にプロパティを設定できます。

...
try {
  // ユーザー ID のプロパティを設定します。thisUser String 変数を想定します。
  if(message != null) {
    message.setStringProperty("UserID", thisUser);
    message.setText(text);
    // キューに送信します。メッセージは 5 分間存続します。
    sender.send(_message, delivery, priority, 5 * 60 * 1000);
  }else {
    // 1 つのサーブレットまたは JSP ページでの使用方法を想定します。
    out.println("<H1>メッセージは null でした</H1>"); 
  }
}
...

次のコードの一部分を使用して、メッセージを受信したときにプロパティを取リ出すことができます。

final TextMessage message = (TextMessage)(_receiver.receiveNoWait());
// すべてのプロパティを取得します。
Enumeration e = message.getPropertyNames();
if(!e.hasMoreElements()) {
  // 1 つのサーブレットまたは JSP ページでの使用方法を想定します。
  out.println("<h1>プロパティがありません</H1>"); 
} 
while(e.hasMoreElements()) {
  String prop = (String)e.nextElement();
  out.print("<p> " + prop);
  // すべてのプロパティが Strings であると想定します。
  out.println(":" + message.getStringProperty(prop));
} 

メッセージ本文のタイプ

JMS 1.0.2b 仕様には、メッセージ本文の形式について記載されています。これらの形式は、Message を拡張したインターフェイスにより定義されます。

次の表で、JMS メッセージ本文インターフェイスの概要を説明します。
インターフェイス
説明
コメント
StreamMessage
Java プリミティブ値のストリームが含まれています。
このタイプは値の挿入と読み込みが順次に行われます。
MapMessage
名前/値のペアのセットが含まれ
ます。名前は String オブジェクト、値は Java プリミティブタイプです。
これらには、列挙によって連続的にアクセスするか、名前によってランダムにアクセスします。
TextMessage
String オブジェクトを 1 つ含んでいます。
TextMessage はテキスト
メッセージまたは XML 形式のデータを持つメッセージで使用
します。
ObjectMessage
直列化可能な Java オブジェクトが含まれています。
いずれかの JDK 1.2 Collection クラスを使用できます。
BytesMessage
未解釈のバイト ストリームが含まれています。
通常、このタイプの本文は使用
しません。

メッセージ本文インターフェイスの使用方法を含む JMS のプログラミングについては、弟 16 章、「JMS プログラミングテクニック」で説明します。