外部クライアントの使用

外部クライアント (すなわち、WebSphere Process Server の外側) が、WebSphere Process Server 内にインストールされたアプリケーションと対話する必要がある場合があります。

このタスクを実行する理由と実行時期

外部クライアントの処理を説明するために、外部クライアントが WebSphere Process Server 上の一般アプリケーションとの対話を求める、非常に単純なシナリオを考えてみます。以下の図は、標準的な単純なシナリオを表しています。
図 1. 単純なユース・ケースのシナリオ。外部クライアントが WebSphere Process Server アプリケーションと対話する。非 WepSphere Process Server クライアントから成るクライアント Java 仮想マシン (JVM) が示されています。WebSphere Process Server ベースのサービスを特徴とする WebSphere Process Server のインストール済み環境が示されています。
この 2 つが双方向の矢印によってリンクされており、「サービス呼び出し」というラベルが付いています。

サービスは、JMS バインディングを使用してエクスポートされ、これによって外部クライアントがサービスを使用できるようになります。

外部クライアントが WebSphere Process Server とは別個の Java 仮想マシン (JVM) 内にある場合、JMS エクスポートとの接続および対話を作成するためにいくつかのステップを実行する必要があります。クライアントは、正しい値が指定された InitialContext を取得して、JNDI を使用してリソースを検索します。次にクライアントは、JMS 1.1 仕様のクライアントを使用して宛先にアクセスし、宛先の送信メッセージおよび受信メッセージにアクセスします。 ランタイムにより自動作成されるリソースのデフォルトの JNDI 名は、テーブル xyz にリストされます。事前に作成済みのリソースがある場合は、その JNDI 名を使用します。

このタスクのためのステップ

  1. メッセージを送信するための JMS の宛先と接続ファクトリーを構成する必要があります。
  2. SIB リソース・アダプター用の正しい JNDI コンテキストとポート、およびメッセージング・ブートストラッピング・ポートが必要です。

    WebSphere Process Server はいくつかのデフォルト・ポートを使用しますが、それより多くのサーバーがそのマシンにインストールされている場合は、ほかのサーバー・インスタンスとの競合を避けるために、インストール時に代わりのポートが作成されます。管理コンソールを使用して、WebSphere Process Server が使用するポートを調べることができます。「サーバー」 > 「アプリケーション・サーバー」 > サーバーの名前 > 「構成」と進んで、「通信 (Communication)」の下で 「ポート」をクリックします。「ポート」または 「詳細」をクリックして、使用中のポートを編集することができます。

  3. クライアントは、正しい値が指定された初期コンテキストを取得し、JNDI を使用してリソースを検索します。
  4. クライアントは、JMS 1.1 仕様を使用して宛先にアクセスし、宛先で送信メッセージおよび受信メッセージにアクセスします。

    ランタイムにより自動作成されるリソースのデフォルトの JNDI 名については、関連トピックで説明します。

    事前に作成済みのリソースがある場合は、作成したリソースの JNDI 名を使用します。

例: 注文処理アプリケーションの要求/応答操作

例: 注文処理アプリケーションの要求/応答操作

要求/応答操作のクライアント・ソース・コードを以下に示します。
ConnectionFactory conFact;
Connection conn;
Session sess;
Destination requestQueue, responseQueue;
MessageProducer requestProducer;
MessageConsumer replyConsumer;
String jmsRequestQName = "jms/ExportIn";
String jmsReplyQName = "jms/ExportOut";
String jmsFactoryName = "jms/MyCF";
// JNDI 初期コンテキストを取得するために使用する初期コンテキスト・ファクトリー
String jndiFactoryName = "com.ibm.websphere.naming.WsnInitialContextFactory";
// ブートストラッピング用の URL。WPS ホスト・マシンおよび
// ブートストラッピング・ポートの IP アドレスを含みます。デフォルトは 2809 で、
// これを host:port の値に変更する必要があります
String jmsContextURL = "iiop://9.26.237.246:2809/";
TextMessage jmsRequestMessage, jmsReplyMessage;
// これは直列化されたビジネス・オブジェクト「order」です
// このサンプルに対する直列化を必要以上に複雑にしないため、
// 既に String として直列化させています。
String message = " " String message = "<order:Order xsi:type=¥"order:Order¥"
xmlns:xsi=¥"http://www.w3.org/2001/XMLSchema-instance¥" 
xmlns:order=¥"http://OrderProcessing¥"> "
+ "<orderId>123</orderId>"
+ "<customerId>456</customerId>"
+ "<orderDate>2002-01-01Z</orderDate>"
+ "<orderStatus>Reject</orderStatus>"
+ "<totalPrice>1000.0</totalPrice>"
+ "</order:Order>";

System.out.println("JMS Factory name:" + jmsFactoryName);
System.out.println("Queue Factory name:" + jmsRequestQName);
System.out.println("Initial Context Provider URL:" + jmsContextURL);
System.out.println();

try {
  Hashtable jndiHash = new Hashtable();
jndiHash.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
jndiFactoryName);
 jndiHash.put(javax.naming.Context.PROVIDER_URL, jmsContextURL);
 javax.naming.Context ctx = new InitialContext(jndiHash);
 System.out.println("Got Initial Context from provider: " +
jmsContextURL);

 conFact = (ConnectionFactory) ctx.lookup(jmsFactoryName);
 if (conFact != null) {
  System.out.println("Got Connection Factory: "	+ jmsFactoryName);
  System.out.println(conFact.toString());
 }

 conn = conFact.createConnection();
 conn.start();
 System.out.println("Created Queue Connection...");
 System.out.println(conn.toString());
   
 sess = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
 System.out.println("created Session...");
 System.out.println(sess.toString());
 System.out.println(conn.toString());

 requestQueue = (Queue) ctx.lookup(jmsRequestQName);
 if (requestQueue != null) {
System.out.println("Found JMS request Destination " + jmsRequestQName);
  System.out.println(requestQueue.toString());
 }
 responseQueue = (Queue) ctx.lookup(jmsReplyQName);
 if (requestQueue != null) {
  System.out.println("Found JMS reply-to Queue " + jmsReplyQName);
 }

 requestProducer = sess.createProducer(requestQueue);
 System.out.println("Created Sender...");

 jmsRequestMessage = sess.createTextMessage();
 System.out.println("Creating Message...");
 jmsRequestMessage.setText(message);
 jmsRequestMessage.setJMSReplyTo(responseQueue);
 jmsRequestMessage.setStringProperty("TargetFunctionName",
"submitOrderRequestResponse");

 requestProducer.send(jmsRequestMessage);
 sess.commit();

 System.out.println("MESSAGE SENT!");
 System.out.println();
 System.out.println("JMS Correlation ID: ");
 String corrID = jmsRequestMessage.getJMSCorrelationID();
 if (corrID != null) {
  System.out.println(jmsRequestMessage.getJMSCorrelationID());
 }
 else {
  System.out.println("NULL");
 }
 System.out.println();
 System.out.println("JMS Message: ");
 System.out.println(jmsRequestMessage.toString());

 System.out.println();
 System.out.println("WAITING FOR THE RESPONSE...");
 System.out.println();

 responseQueue = (Queue) ctx.lookup(jmsReplyQName);
 if (responseQueue != null) {
  System.out.println("Found JMS response Destination " +
jmsReplyQName);
  System.out.println(responseQueue.toString());
 }
 else {
  System.out.println("JMS response Destination not found: " +
jmsReplyQName);
 }

 replyConsumer = sess.createConsumer(responseQueue);
 jmsReplyMessage= (TextMessage)replyConsumer.receive(10000);
 if (jmsReplyMessage != null) {
  System.out.println("MESSAGE RECEIVED!!");
  System.out.println();
  System.out.println("JMS Message: ");
  System.out.println(jmsRequestMessage.toString());
 }
 else {
  System.out.println("DIDN'T FIND MESSAGE IN THE REMOTE QUEUE: " +
jmsReplyQName);
 }
 sess.commit();
requestProducer.close();
 replyConsumer.close();
 sess.close();
 conn.close();
  
} catch (Exception j) {
 System.out.println("There was an exception, (for whole stack trace look
in SystemErr.log): " + j.getMessage());
 j.printStackTrace();

}
関連概念
JMS エクスポート・バインディングの構成

(c) Copyright IBM Corporation 2005, 2006. All rights reserved.
(c) Copyright IBM Japan 2006
このインフォメーション・センターでは、Eclipse テクノロジー (http://www.eclipse.org) が採用されています。