ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server Microsoft .NET対応のWebLogic JMSクライアントの使用
11gリリース1 (10.3.6)
B55555-05
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

3 WebLogic JMS .NET APIを使用した基本的なJMSアプリケーションの開発

この章では、JMS .NET APIを使用してC#で基本的なJMSアプリケーションを開発するために必要な手順について説明します。WebLogic JMS .NETクライアントを使用するJMSアプリケーションの開発プロセスは、Javaクライアントの開発プロセスとよく似ています。

JMS .NETクライアント・アプリケーションの作成

以下のフローチャートは、基本的なJMS .NETアプリケーションの手順を示したものです。

図3-1 JMS .NETクライアント・アプリケーションの基本的な手順

図3-1の説明が続きます
「図3-1 JMS .NETクライアント・アプリケーションの基本的な手順」の説明


注意:

リソースの作成やクローズは、メッセージの送信や受信と比べると、比較的オーバーヘッドが高くなります。スレッド間でコンテキストを共有し、他のリソースは再利用のためにキャッシュすることをお薦めします。詳細は、「ベスト・プラクティス」を参照してください。

例:基本的なPTP JMS .NETクライアント・アプリケーションの記述

以下の例では、C#で記述する基本的なJMS .NETクライアント・アプリケーションの作成方法を示します。自動確認応答モードを使用するように構成されたキューにおいて、同期受信を使用します。この例の完全なコピーは、付録A「JMS .NETクライアント・サンプル・アプリケーション」に記載されています。

このサンプルで使用されている.NET APIのクラスとメソッドの詳細は、「WebLogic JMS .NET APIについて」または.NETクライアント用のWebLogicメッセージングAPIリファレンスのドキュメントを参照してください。

前提条件

先に進む前に、WebLogic Serverの構成を担当するシステム管理者は、以下のものを構成しておく必要があります。

基本的な手順

以下の手順では、プログラムの最初で必要な変数(WebLogic Serverホスト、接続ファクトリ、キューおよびトピック名など)を定義済みであることを前提としています。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;


using WebLogic.Messaging;

public class MessagingSample
{
  private string host      = "localhost";
  private int    port      = 7001;
  private string cfName    = "weblogic.jms.ConnectionFactory";
  private string queueName = "jms.queue.TestQueue1";

手順1

WebLogic Serverホストへのネットワーク接続を確立して、必要な場合はログインするために、コンテキストを作成します。

IDictionary<string, Object> paramMap = new Dictionary<string, Object>();
    
paramMap[Constants.Context.PROVIDER_URL] =
 "t3://" + this.host + ":" + this.port;

IContext context = ContextFactory.CreateContext(paramMap);

注意:

Provider_URLには、カンマで区切って複数のアドレスを格納できます。複数のアドレスの指定の詳細は、「URLフォーマットの指定」を参照してください。

複数のアドレスを指定した場合、コンテキストは、いずれかのアドレスが成功するか、すべてのアドレスが失敗するまで、各アドレスを順に試行します。アドレスのリスト内のランダムな位置から開始し、すべてのアドレスをローテーションします。様々なクライアント・コンテキストが様々な.NETクライアント・ホスト・サーバーにネットワーク接続をランダムにロード・バランシングするので、ランダムな位置から開始すると、複数のクライアントのロード・バランシングが容易になります。



注意:

初期コンテキストで次のようにユーザー名とパスワードを指定することもできます。
paramMap[Constants.Context.SECURITY_PRINCIPAL] = username;
paramMap[Constants.Context.SECURITY_CREDENTIALS] = password;

手順2

JMS接続ファクトリをルックアップします。

IConnectionFactory cf = context.LookupConnectionFactory(this.cfName);

手順3

構成されたJNDI名を使用して、コンテキストでJMS宛先リソースをルックアップします。

IQueue queue = (IQueue)context.LookupDestination(this.queueName);

手順4

接続ファクトリを使用して接続を作成します。.NETクライアント・ホストからJMS接続ホストへのJMS接続が確立されます。接続ホストは、接続ファクトリで構成されているターゲット・リスト内のいずれかのサーバーです。.NETクライアント・ホストと同じでもかまいません。

IConnection connection = cf.CreateConnection();

手順5

コンシューマがメッセージを取得できるように接続を開始します。

connection.Start();

手順6

AUTO_ACKNOWLEDGE確認応答モードを使用してセッションを作成します。


注意:

セッションはスレッド・セーフではありません。プロデューサとコンシューマを同時に実行する必要がある場合は、複数のセッションを使用します。複数のセッションを使用する例については、付録A「JMS .NETクライアント・サンプル・アプリケーション」の非同期サンプルを参照してください。

ISession session = connection.CreateSession(
Constants.SessionMode.AUTO_ACKNOWLEDGE);

手順7

メッセージ・プロデューサを作成して、永続メッセージを送信します。

IMessageProducer producer = session.CreateProducer(queue);

producer.DeliveryMode = Constants.DeliveryMode.PERSISTENT;

ITextMessage sendMessage = session.CreateTextMessage("My q message");

producer.Send(sendMessage);

手順8

メッセージ・コンシューマを作成して、メッセージを受信します。手順6で示したように、セッションがAUTO_ACKNOWLEDGEモードで作成されたため、メッセージはサーバーから自動的に削除されます。

IMessageConsumer consumer = session.CreateConsumer(queue);

IMessage recvMessage = consumer.Receive(500);

手順9

接続を閉じます。接続を閉じると、その子セッション、コンシューマ、およびプロデューサも閉じられます。

connection.Close();     

手順10

コンテキストを閉じます。

context.CloseAll();

注意:

context.Close()では、すべてのIConnectionが閉じられるまで、ネットワーク接続を終了しません。context.CloseAll()では、ネットワーク接続と、開いているすべてのIConnectionを閉じます。

JMS .NETクライアント・アプリケーションでの高度な概念の使用

付録A「JMS .NETクライアント・サンプル・アプリケーション」では、C#で記述されたJMS .NETクライアント・アプリケーションの完全な例を紹介し、以下の高度な概念の一部が例示されています。

相互運用性、セキュリティ、ベスト・プラクティスなど、JMS .NETクライアントのその他の高度な概念を使用する際のガイドラインについては、第4章「プログラミングの考慮事項」を参照してください。