メッセージコンポーネント
メッセージは次の部分からなります。
- ヘッダー メッセージの識別とルーティングのために、クライアントとサーバの両方で使用される情報。
- プロパティ 追加のヘッダープロパティ。プロパティにはアプリケーション特有のプロパティ、標準プロパティ、サーバ特有のプロパティがあります。
- 本文 メッセージの本文。メッセージ本文には、テキスト、オブジェクト、バイトなど、定義済みタイプのいずれかを使用できます。
メッセージヘッダーフィールド
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
インターフェイスは、TextInterface
や MapInterface
などのコンテンツ特有のメッセージインターフェイスにより拡張されます。
メッセージプロパティ
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 プログラミングテクニック」で説明します。