参照によるメッセージ・ペイロードの受け渡し: 処理ステップごとの考えられる利点

JMS メッセージング・アプリケーションで行われる処理ステップごとに、関連する接続ファクトリーまたはアクティベーション・スペックで「参照によるメッセージ・ペイロードの受け渡し」プロパティーを使用可能にした場合に得られる可能性があるパフォーマンス上の利点について、そのタイミングと理由をこの表で確認してください。

ラージ・オブジェクト・メッセージまたはバイト・メッセージを送信する際、メッセージ・ペイロードのシリアライズ、デシリアライズ、およびコピーのためのメモリーのコストおよびプロセッサー使用量はかなりのものになることがあります。 接続ファクトリーまたはアクティベーション・スペックで「pass message payload by reference」プロパティーを使用可能にする場合は、JMS 1.1 の指定をオーバーライドするようにデフォルト・メッセージング・プロバイダーに通知することで、このデータ・コピーの量が減ったり、行われなくなったりすることがあります。

注意:
JMS 仕様の中のこれらのプロパティーが使用しない部分は、メッセージのデータ保全性を確保する目的で定義されています。 これらのプロパティーを使用するすべての JMS アプリケーションでは、トピック『参照による JMS メッセージ・ペイロードの受け渡す理由とタイミング』に記載されているルールを厳密に守る必要があります。 そうしないと、データ保全性が失われる危険性があります。
参照によってメッセージ・ペイロードを渡すには、 接続ファクトリーおよびアクティベーション・スペックで次のプロパティーを設定します。
producerDoesNotModifyPayloadAfterSet (接続ファクトリーの場合) または forwarderDoesNotModifyPayloadAfterSet (アクティベーション・スペックの場合)
このプロパティーを使用可能にすると、接続ファクトリーによって作成されたオブジェクトやバイト・メッセージ、 またはアクティベーション・スペックによって転送されたオブジェクトやバイト・メッセージは、 メッセージへの設定時にはコピーされず、どうしても必要な場合にのみシリアライズされます。 このようなメッセージを送信するアプリケーションは、メッセージにデータを設定した後で、そのデータを変更してはなりません。
consumerDoesNotModifyPayloadAfterGet
このプロパティーを使用可能にすると、接続ファクトリーまたはアクティベーション・スペックを使用して受信したオブジェクト・メッセージは、 どうしても必要な場合にのみシリアライズされます。 こうしたメッセージから取得したデータは、アプリケーションにより変更を加えてはなりません。
表 1. プロデューサー、コンシューマー、または転送機能アプリケーションによって実行される処理ステップごとの考えられるパフォーマンス上の利点. 表の最初の列には、オブジェクト・メッセージおよびバイト・メッセージの処理ステップがリストされます。 2 番目の列には、パフォーマンスの向上の可能性の有無が示されます。 3 番目の列には、処理およびプロパティーに関する簡単な説明が示されます。
処理ステップ パフォーマンスの向上の可能性の有無 説明
プロデューサーおよびコンシューマー・アプリケーションを使用するオブジェクト・メッセージ    
オブジェクト・メッセージは、同じ JVM 内のコンシューマー・アプリケーションに送信されます。producerDoesNotModifyPayloadAfterSet と consumerDoesNotModifyPayloadAfterGet の両方のプロパティーが使用可能になっています。 はい 一定の条件下では、ペイロード・オブジェクトは、参照によってコンシューマー・アプリケーションに渡されます。

メッセージが非パーシスタントまたはトランザクションの場合は、コンシューマー・アプリケーションは即時に使用可能になり、ペイロード・オブジェクトはシリアライズされないことがあります。

オブジェクト・メッセージは、producerDoesNotModifyPayloadAfterSet プロパティーを使用可能にして生成され、次に consumerDoesNotModifyPayloadAfterGet プロパティーが使用可能になっていないコンシューマー・アプリケーションによって受信されます。 いいえ コンシューマー・アプリケーションでは consumerDoesNotModifyPayloadAfterGet プロパティーが使用可能になっていないため、利点は得られません。
オブジェクト・メッセージは、異なる JVM 内の単一のコンシューマー・アプリケーションに送信されます。producerDoesNotModifyPayloadAfterSet と consumerDoesNotModifyPayloadAfterGet の両方のプロパティーが使用可能になっています。 いいえ 単一のコンシューマー・アプリケーションは別の JVM 内にあるため、利点は得られません。
オブジェクト・メッセージは、すべてで consumerDoesNotModifyPayloadAfterGet プロパティーが使用可能になっており、同じ JVM 内で実行されている複数のコンシューマー・アプリケーションによって受信されます。 はい consumerDoesNotModifyPayloadAfterGet プロパティーが使用可能になっているすべてのコンシューマー・アプリケーションが、同じオブジェクトへの参照を受け取る可能性がありますが、これは保証されません。
転送機能アプリケーションを使用するオブジェクト・メッセージ    
オブジェクト・メッセージが転送され、転送機能アプリケーションはメッセージのペイロードにアクセスします。consumerDoesNotModifyPayloadAfterGet と producer/forwarderDoesNotModifyPayloadAfterSet のプロパティーが使用可能になっています。 はい 以下の場合に、パフォーマンス上の利点が得られる可能性があります。
  • 転送されるメッセージのプロデューサーで producerDoesNotModifyPayloadAfterSet プロパティーが使用可能になっており、このプロデューサーが転送機能アプリケーションと同じ JVM にある場合。
  • 転送されるメッセージのプロデューサーで consumerDoesNotModifyPayloadAfterGet プロパティーが使用可能になっており、このプロデューサーが転送機能アプリケーションと同じ JVM にある場合。
オブジェクト・メッセージが転送され、転送機能アプリケーションはメッセージのペイロードにアクセスします。producer/forwarderDoesNotModifyPayloadAfterSet プロパティーのみが使用可能になっています。 はい 転送されるメッセージのコンシューマーで consumerDoesNotModifyPayloadAfterGet プロパティーが使用可能になっており、このコンシューマーが転送機能アプリケーションと同じ JVM にある場合は、パフォーマンス上の利点を得られる可能性があります。
オブジェクト・メッセージが転送され、転送機能アプリケーションはメッセージのペイロードにアクセスしません。 いいえ オブジェクト・メッセージのペイロードが転送機能アプリケーションによってアクセスされない場合は、producer/forwarderDoesNotModifyPayloadAfterSet と consumerDoesNotModifyPayloadAfterGet のプロパティーは転送機能アプリケーションで影響を与えません。元のプロデューサー・アプリケーションおよび最終的なコンシューマー・アプリケーションから得られる利点はそのままです。
メディエーションを使用するオブジェクト・メッセージ    
オブジェクト・メッセージは、仲介されたサービス統合バス宛先に送信されます。 いいえ オブジェクト・メッセージが仲介された宛先に送信される場合は、producerDoesNotModifyPayloadAfterSet プロパティーを使用可能にすることによって得られるパフォーマンス上の利点はありません。
コンシューマー・アプリケーションを使用するバイト・メッセージ    
バイト・メッセージは、任意のコンシューマー・アプリケーションに送信されます。 producerDoesNotModifyPayloadAfterSet プロパティーが使用可能になっています。 はい メッセージへの設定時にデータをコピーしなければならない JMS 仕様の部分はバイパスされ、バイト・データのコピーが保存されます。
バイト・メッセージは、consumerDoesNotModifyPayloadAfterGet プロパティーが使用可能にされて受信されます。 いいえ JMS API では、バイト・データを参照によってコンシューマー・コード (BytesMessage.readBytes メソッド) に渡して戻すことはできません。
バイト・メッセージは、すべてで consumerDoesNotModifyPayloadAfterGet プロパティーが使用可能になっている複数のコンシューマー (トピック) によって受信されます。 いいえ JMS API では、バイト・データを参照によってコンシューマー・コード (BytesMessage.readBytes メソッド) に渡して戻すことはできません。
転送機能アプリケーションを使用するバイト・メッセージ    
バイト・メッセージは転送されます。 いいえ いずれかの「参照によるメッセージ・ペイロードの受け渡し (pass message payload by reference)」プロパティーを使用可能にすることで得られる利点はありません。

トピックのタイプを示すアイコン 概念トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjn_passbyref_steps
ファイル名:cjn_passbyref_steps.html