外部クライアント (すなわち、WebSphere Process Server の外側) が、WebSphere Process Server 内にインストールされたアプリケーションと対話する必要がある場合があります。
サービスは、JMS バインディングを使用してエクスポートされ、これによって外部クライアントがサービスを使用できるようになります。
外部クライアントが WebSphere Process Server とは別個の Java 仮想マシン (JVM) 内にある場合、JMS エクスポートとの接続および対話を作成するためにいくつかのステップを実行する必要があります。クライアントは、正しい値が指定された InitialContext を取得して、JNDI を使用してリソースを検索します。次にクライアントは、JMS 1.1 仕様のクライアントを使用して宛先にアクセスし、宛先の送信メッセージおよび受信メッセージにアクセスします。 ランタイムにより自動作成されるリソースのデフォルトの JNDI 名は、テーブル xyz にリストされます。事前に作成済みのリソースがある場合は、その 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(); }
(c) Copyright IBM Corporation 2005, 2006. All rights reserved.
(c) Copyright IBM Japan 2006
このインフォメーション・センターでは、Eclipse テクノロジー (http://www.eclipse.org) が採用されています。