![]() ![]() ![]() ![]() |
JMS SAF (ストア アンド フォワード) 機能は、WebLogic SAF サービス上に構築され、高可用性を備えた JMS メッセージ生成を行います。たとえば、ローカル サーバ インスタンスに接続された JMS メッセージ プロデューサは、メッセージ送信時にリモートの送り先が一時的に利用できない場合でも、リモートの JMS 送り先に確実にメッセージを転送できます。JMS SAF は JMS アプリケーションからは透過的なので、JMS クライアント コードは既存の JMS API を使用して、リモート送り先にアクセスできます。
以下の節では、コンフィグレーションの詳細について説明します。
注意 : | WebLogic SAF クライアントが提供するメカニズムにより、ネットワークに接続できない (一時的なエラー、ネットワーク障害など) ために SAF クライアントが JMS 送り先にアクセスできない場合でも、スタンドアロン クライアントはサーバ サイドの JMS 送り先に JMS メッセージを確実に送信できます。接続が切断されている間、SAF クライアントによって送信されたメッセージはクライアント上でローカルに格納され、クライアントが再接続されたときにサーバ サイドの JMS 送り先に転送されます。『スタンドアロン クライアント プログラマーズ ガイド』の「JMS SAF クライアントによる確実なメッセージ送信」を参照してください。 |
JMS コンフィグレーション リソースは、WebLogic ドメインの外部のモジュール記述子ファイルに格納されます。これらのファイルは、weblogic-jmsmd.xsd
スキーマに準拠する XML ドキュメントによって定義されます。JMS モジュールには、WebLogic Server での JMS メッセージの格納と転送を可能にする、SAF リソースのコンフィグレーションも含まれます。JMS モジュールの詳細については、『WebLogic JMS のコンフィグレーションと管理』の「JMS リソースのコンフィグレーションについて」を参照してください。
JMS モジュールに対して SAF リソースをコンフィグレーションする場合には、JMS システム モジュールまたはアプリケーション モジュールで以下のリソースをコンフィグレーションする必要があります。
JMS SAF リソースがコンフィグレーションされると、コンフィグレーションされた SAF 送信エージェントによって、受信側へのメッセージの転送、確認応答が時間内に戻らなかった場合のメッセージの再送信、およびメッセージの永続性が必要になる場合の永続ストレージへのメッセージの一時的な格納が行われます。SAF エージェントのコンフィグレーションの詳細については、「ストア アンド フォワード サービスについて」を参照してください。
JMS SAF は JMS アプリケーションからは透過的です。既存の JMS アプリケーションは、コードを変更することなく、この機能を利用できます。実際には、JMS モジュールでインポート済み JMS 送り先をコンフィグレーションし、その後、リモートの JMS 送り先をローカルの JNDI 名に関連付ける必要があるだけです。JMS クライアント コードは既存の JMS API を使用して、インポート済み送り先にアクセスします。メッセージの生成のみが JMS ストア アンド フォワードの対象となるので、JMS クライアントは引き続き、インポート済み送り先から直接メッセージを消費する必要があります。
SAF 送り先 (キューまたはトピック) は、リモートのサーバ インスタンスやクラスタに関連付けられた JMS モジュール内の JMS 送り先 (キューまたはトピック) をローカルに表現したものです。このようなリモート送り先は、ローカルのクラスタやサーバ インスタンスに「インポート」されます。これにより、ローカルのサーバ インスタンスやクラスタから、リモートのサーバ インスタンスやクラスタにメッセージを送信することが可能になります。送り先に対する [SAF エクスポート ポリシー] パラメータが明示的に無効化されていない限り、デフォルトではすべての JMS 送り先が自動的にエクスポートされます。
インポートされた SAF 送り先の集合は、SAF インポート済み送り先と呼ばれます。インポート済み送り先の各集合は、SAF リモート コンテキストと関連付けられます。また、それらは同じ JNDI プレフィックス、生存時間のデフォルト (メッセージの有効期限)、および SAF エラー処理オブジェクトを共有します。
JMS プロデューサが SAF 送り先にメッセージを送信すると、これらのメッセージは後の配信に備えて SAF 送り先に格納されます。SAF エージェントは、(インポート済み送り先が表す) リモート JMS 送り先へ、その送り先がアクセス可能であれば SAF リモート コンテキストを使用してメッセージを転送します。
SAF リモート コンテキストでは、JMS 送り先のエクスポート元である、リモートのサーバ インスタンスまたはクラスタの URL が定義されます。また、リモートのサーバ インスタンスまたはクラスタで認証および認可されるためのセキュリティ資格も含まれます。インポート済み送り先を使用する場合は、SAF リモート コンテキストのコンフィグレーションが必須です。SAF リモート コンテキストは、複数の SAF インポート済み送り先のコンフィグレーションで再利用できます。
次に示す URL は、SAF リモート コンテキストで、スタンドアロン JMS 送り先をインポートするリモート管理対象サーバを 1 つ定義した場合の例です。
<URL>
t3://123.0.0.1:7001
</URL>
リモート クラスタから分散送り先をインポートする場合は、DNS サーバ名または IP アドレスをカンマで区切って指定します。次に示す URL は、SAF リモート コンテキストで、分散送り先のメンバーをインポートするリモート クラスタを定義した場合の例です。
<URL>
t3://123.0.0.1:7001,123.0.0.1:7002,123.0.0.1:7003
</URL>
WebLogic クラスタとの最初の接続ポイントを指定する方法については、『WebLogic JNDI プログラマーズ ガイド』の「クラスタ環境での WebLogic JNDI の使い方」を参照してください。
SAF エラー処理リソースでは、SAF サービスがリモート送り先へのメッセージ転送に失敗した場合に行うアクションを定義します。SAF エラー処理リソースは、SAF インポート済み送り先を使用する場合でも必須ではありませんが、ベスト プラクティスとしてお勧めします。
コンフィグレーション オプションには、以下のパラメータが含まれます。
図 3-1 に、Domain1 の Domain1Module-jms.xml
モジュール内の QueueSend
キューに生成された JMS メッセージが、SAF エージェントによって Domain2 の Domain2Module-jms.xml
モジュール内の QueueReceive
キューに転送される仕組みを示します。
JMS モジュールの SAF リソースは、以下のいずれかの方法で作成できます。
SAFImportedDestinationsBean
、SAFRemoteContextBean
、および SAFErrorHandlingBean
管理 MBean にアクセスして、JMS モジュールの SAF リソースを作成および管理できます。詳細については、『JMX によるカスタム管理ユーティリティの開発』の「WebLogic Server サブシステム MBean の概要」を参照してください。JMSModuleHelper
の Javadoc を参照してください。
Administration Console を使用して、リモート送り先に JMS メッセージを転送するために SAF リソースをコンフィグレーションする主な手順は次のとおりです。
詳細については、『WebLogic JMS のコンフィグレーションと管理』の「JMS システム モジュール」を参照してください。
以下の節では、JMS メッセージを格納および転送するために WebLogic SAF を設計およびコンフィグレーションする場合に役立つ情報について説明します。
永続 JMS メッセージは、SAF サービスによって常に「必ず 1 回」の QOS で転送されます。非永続メッセージでは、SAF インポート済みキューとトピックに対して以下の 3 種類の QOS レベルを定義できます。
SAF アプリケーションでは、メッセージごとに配信モードを指定することもできます。
クラスタ内では、JMS プロデューサをメッセージ順序単位に関連付けることができます。これにより、スタンドアロンのメッセージ プロデューサまたは 1 つのプロデューサとして機能するプロデューサのグループは、処理順序に関して複数のメッセージを 1 つの単位にグループ化できるようになります。JMS 順序単位の詳細については、『WebLogic JMS プログラマーズ ガイド』の「メッセージ順序単位の使用」を参照してください。
SAF インポート済み送り先ではハッシュ マップまたはパス サービスのいずれかを使用して、クラスタ内の順序付けされたメッセージをグループ化できます。ただし、パス サービスをコンフィグレーションするのがベスト プラクティスです。パス サービスは、メッセージのグループとメッセージング リソース (SAF エージェントなど) との間のマッピングを格納できる永続マップです。パス サービスのコンフィグレーションの詳細については、『WebLogic JMS のコンフィグレーションと管理』の「WebLogic パス サービスの使用」を参照してください。
アプリケーションのメッセージがトランザクション内にある場合、「必ず 1 回」のセマンティクスを維持するために、永続ストレージへのメッセージの保存はそのユーザ トランザクションの一環として行われます。
特に、メッセージの永続ストレージからの削除は、アプリケーションでトランザクションのロールバックが決定された場合にトランザクション ロールバックの一環として行われます。一方、転送はアプリケーション トランザクションの一環としては行われません。トランザクションがコミットされるまで、トランザクション メッセージは送信エージェントによって転送されません。トランザクション内では、メッセージの順序はメッセージが送信された時間に基づいて保持されます。
JMS ストア アンド フォワードでは、別々のクラスタ間でメッセージが転送される場合、メッセージを圧縮できます。メッセージ圧縮のしきい値は、WLMessageProducer
インタフェースの JMS API 拡張機能を使用することによってプログラム的に設定するか、または接続ファクトリまたは SAF リモート コンテキストでデフォルトの圧縮しきい値を指定することによって管理的に設定できます。
JMS メッセージ圧縮の使用方法の詳細については、『WebLogic Server パフォーマンス チューニング ガイド』の「メッセージの圧縮」を参照してください。
SAF リモート コンテキストの圧縮しきい値を超える非圧縮メッセージは、SAF 境界を越えて転送されるときに圧縮されます。メッセージは、リモート エンドポイントで受信されるまで、圧縮されたままです。接続ファクトリで圧縮が有効になっているために SAF 境界を越えるときにメッセージがすでに圧縮されている場合は、SAF 圧縮がトリガされるかどうかに関係なく、メッセージは圧縮されたまま SAF 境界を越えて転送されます。
リモート エンドポイントは分散送り先であってもかまいません。リモート分散送り先へのメッセージは、スタンドアロンのリモート送り先に転送されるメッセージと同様に格納および転送されます。SAF 送信エージェントは、一般的な方法と同じ方法で分散送り先のメンバーにメッセージをルーティングします。分散送り先のコンフィグレーションの詳細については、『WebLogic JMS のコンフィグレーションと管理』の「分散送り先リソースのコンフィグレーション」を参照してください。
一般的に、JMS アプリケーションは JMSReplyTo
ヘッダ フィールドを使用して、一時的な送り先の名前を他のアプリケーションに対して公開できます。ただし、JMSReplyTo
フィールドを使用した一時的な送り先の使用は、SAF インポート済み送り先ではサポートされていません。
JMS 一時送り先の使用方法の詳細については、『WebLogic JMS プログラマーズ ガイド』の「一時的な送り先の使い方」を参照してください。
SAF インポート済み送り先では、以下のセキュリティ対策が適用されています。
JMSXUserID
が SAF 境界を越えて保持されることはない。JMSXUserID とは、メッセージの送信者であるユーザを識別するシステム生成のプロパティであり、JMS 仕様で定義されています。
![]() ![]() ![]() |