2.5.2 メッセージ要素のアクセスモード
JMSメッセージのメッセージ要素(ヘッダ,プロパティ,およびペイロード)の値を取得したり,設定したりするには,メッセージインタフェースが提供するメソッドを使用します。各要素には,次に示すアクセスモードがあります。
-
読み取り書き込み両用モード(Read/Write mode)
読み取りも書き込みもできるモードです。ヘッダ,プロパティおよびペイロードで発生するモードです。
-
情報の読み取りだけができるモードです。このモードのときにメッセージ要素に情報を書き込もうとするとMessageNotWriteableExceptionが発生します。プロパティとペイロードで発生するモードです。
-
情報の書き込みだけができるモードです。このモードのときにメッセージ要素から情報を読み取ろうとするとMessageNotReadableExceptionが発生します。ペイロードで発生するモードです。
メッセージ要素とアクセスモードの関係を次の表に示します。
項番 |
メッセージ要素 |
読み取り書き込み両用モード |
読み取り専用モード |
書き込み専用モード |
---|---|---|---|---|
1 |
ヘッダ |
○ |
× |
× |
2 |
プロパティ |
○ |
○ |
× |
3 |
ペイロード |
○ |
○ |
○ |
- 〈この項の構成〉
(1) メッセージ生成時のアクセスモード
メッセージインタフェースのインスタンスは,次に示すメソッドの発行によって生成します。
-
QueueSession.createMessage()メソッド:Messageインタフェースの場合
-
QueueSession.createBytesMessage()メソッド:BytesMessageインタフェースの場合
-
QueueSession.createObjectMessage()メソッド:ObjectMessageインタフェースの場合
-
QueueSession.createTextMessage()メソッド:TextMessageインタフェースの場合
メッセージ生成時のメッセージ要素のアクセスモードを次の表に示します。
項番 |
インタフェース |
メッセージ要素 |
モード |
---|---|---|---|
1 |
Message |
ヘッダ |
読み取り書き込み両用モード |
2 |
プロパティ |
||
3 |
BytesMessage |
ヘッダ |
読み取り書き込み両用モード |
4 |
プロパティ |
||
5 |
ペイロード |
書き込み専用モード |
|
6 |
ObjectMessage |
ヘッダ |
読み取り書き込み両用モード |
7 |
プロパティ |
||
8 |
ペイロード |
||
9 |
TextMessage |
ヘッダ |
|
10 |
プロパティ |
||
11 |
ペイロード |
(2) メッセージ受信時のアクセスモード
受信側アプリケーションは,QueueReceiver.receive()またはreceiveNoWait()メソッドの戻り値として,メッセージを受信します。
メッセージ受信時のメッセージ要素のアクセスモードを次の表に示します。
項番 |
インタフェース |
メッセージ要素 |
モード |
---|---|---|---|
1 |
Message |
ヘッダ |
読み取り書き込み両用モード |
2 |
プロパティ |
読み取り専用モード |
|
3 |
BytesMessage |
ヘッダ |
読み取り書き込み両用モード |
4 |
プロパティ |
読み取り専用モード |
|
5 |
ペイロード |
||
6 |
ObjectMessage |
ヘッダ |
読み取り書き込み両用モード |
7 |
プロパティ |
読み取り専用モード |
|
8 |
ペイロード |
||
9 |
TextMessage |
ヘッダ |
読み取り書き込み両用モード |
10 |
プロパティ |
読み取り専用モード |
|
11 |
ペイロード |
また,メッセージ要素のアクセスモードは,メッセージ受信後に特定のタイミングによって移行することがあります。アクセスモードが移行するタイミングを次の表に示します。
項番 |
タイミング |
メッセージ要素 |
移行前 |
移行後 |
---|---|---|---|---|
1 |
Message.clearProperties()メソッドの発行 |
プロパティ |
読み取り専用モード |
読み取り書き込み両用モード |
2 |
ObjectMessage.clearBody()メソッドの発行 TextMessage.clearBody()メソッドの発行 |
ペイロード |
||
3 |
BytesMessage.clearBody()メソッドの発行 |
書き込み専用モード |
||
4 |
BytesMessage.reset()メソッドの発行 |
書き込み専用モード |
読み取り専用モード |