![]() ![]() ![]() ![]() |
以下の節では、接続プロトコルとしての JMS 転送の使用について説明します。
警告 : | この機能は、JAX-RPC 1.1 ベースの Web サービスに対してのみ実装可能です。JAX-WS 2.0 Web サービスに対しては実装できません。 |
通常、クライアント アプリケーションから WebLogic Web サービスを呼び出すときは、接続プロトコルとして HTTP/S が使用されます。しかし、クライアント アプリケーションが転送に JMS を使用するように WebLogic Web サービスをコンフィグレーションすることもできます。JWS アノテーションか、後の節で説明する jwsc
Ant タスクの子要素のどちらかを使用して、転送をコンフィグレーションします。
WebLogic Web サービスで、接続転送に JMS を使用するようにコンフィグレーションを行った場合、Web サービスの生成済み WSDL における対応するポートに対して指定されたエンドポイント アドレスの URL では、http://
ではなく jms://
が使用されます。JMS エンドポイントのアドレスの例を次に示します。
jms://myHost:7001/transports/JMSTransport?URI=JMSTransportQueue
URL の URI=JMSTransportQueue
セクションでは、JMS 転送機能用にコンフィグレーションされた JMS キューを指定しています。HTTP を使用して Web サービスを呼び出すことはできませんが、HTTP を使用してその Web サービスの WSDL を参照することはできます。それにより、clientgen
はやはり Web サービスの JAX-RPC スタブを生成することができます。
指定する各転送に対し、WebLogic Server は WSDL 内に追加のポートを生成します。このため、Web サービス呼び出し時に使用できる転送 (JMS、HTTP、または HTTPS) をクライアント アプリケーションで選択できるようにするには、適切な JWS アノテーションまたは jwsc
の子要素を使用して、明示的に転送を追加する必要があります。
警告 : | JMS 転送の使用は、WebLogic の付加価値機能です。.NET クライアントなど、WebLogic 以外のクライアント アプリケーションでは、JMS ポートを使用して Web サービスを呼び出すことはできない場合があります。 |
次の手順では、JMS 転送を使用して Web サービスを呼び出すことを指定する方法を説明します。
Web サービスを実装する基本的な JWS ファイルがすでに作成されており、呼び出す Web サービスを、JMS を使用してコンフィグレーションすることが前提となっています。また、Ant ベースの開発環境を設定済みであり、かつ jwsc
Ant タスクを実行して、サービスをデプロイするためのターゲットを含む、作業用の build.xml
ファイルがあることが前提となっています。詳細については、以下を参照してください。
これらのリソースは手作業でもコンフィグレーションできますが、コンフィグレーション ウィザードで、Web サービス固有の拡張テンプレートを使用して WebLogic Server ドメインを拡張することもできます。コンフィグレーション ウィザードを使用すると、必要なコンフィグレーション手順を大幅に簡略化できます。詳細については、「Web サービス機能用のドメイン コンフィグレーション」を参照してください。
リソースを手作業でコンフィグレーションしたい場合は、次の手順に従います。
weblogic.wsee.DefaultQueue
) を指定することも、別の名前を指定することもできます。別の JNDI 名を指定する場合は、後でこの名前を Web サービス自体に渡します。キューをコンフィグレーションする際は、この JMS キューが「ローカル」であることを必ず指定してください。通常は、ローカル JNDI 名を設定することで指定できます。「システム モジュールのキューの作成」を参照してください。 @WLJmsTransport
アノテーションを追加します。
「@WLJmsTransport JWS アノテーションの使用」を参照してください。
jwsc
Ant タスクに <WLJmsTransport>
子要素を追加します。
詳細については、「jwsc Ant タスクの <WLJmsTransport> 子要素の使用」を参照してください。
jwsc
タスクを呼び出す build.xml
Ant ファイル内のターゲットを再実行することにより、Web サービスを再ビルドします。
たとえば、jwsc
Ant タスクを呼び出すターゲットが build-service
というものであれば、以下を実行します。
prompt> ant build-service
JMS 転送を使用した Web サービスを呼び出すためのクライアント アプリケーションの更新については、「JMS 転送を使用した WebLogic Web サービスの呼び出し」を参照してください。
JWS ファイルをプログラムした時点で、Web サービスの呼び出しにクライアント アプリケーションで (HTTP/S ではなく) JMS 転送を使用することが決まっている場合は、@WLJmsTransport
を使用してその呼び出しの詳細を指定できます。後のビルド時に、「jwsc Ant タスクの <WLJmsTransport> 子要素の使用」に従い、jwsc
Ant タスクの <WLJmsTransport>
子要素を指定して、JWS ファイル内の指定をオーバーライドし、さらなる JMS 転送指定を追加できます。
@WLJmsTransport
アノテーションを使用する際は、以下のガイドラインに従ってください。
次の例では、@WLJmsTransport
アノテーションを使用する簡単な JWS ファイルを示します。関連するコードは太字で示しています。
package examples.webservices.jmstransport;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import weblogic.jws.WLJmsTransport;
@WebService(name="JMSTransportPortType",
serviceName="JMSTransportService",
targetNamespace="http://example.org")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
// Web サービスの URI を構成するのに使用されるコンテキスト パスとサービス URI が
// 「transports/JMSTransport」であることを指定する、WebLogic 固有の
// JWS アノテーション
@WLJmsTransport(contextPath="transports", serviceUri="JMSTransport",
queue="JMSTransportQueue", portName="JMSTransportServicePort")
/**
* この JWS ファイルでは、1 つのオペレーション sayHello を含む簡単な
* Java クラス実装の WebLogic Web サービスを形成する
*
* @author Copyright (c) 2005 by BEA Systems. All rights reserved.
*/
public class JMSTransportImpl {
@WebMethod()
public String sayHello(String message) {
System.out.println("sayHello:" + message);
return "Here is the message: '" + message + "'";
}
}
JMS 転送は jwsc
Ant タスクの <jws>
要素の <WLJmsTransport>
子要素を使用して、ビルド時にも指定できます。ビルド時に転送を指定する理由としては、次のようなものが挙げられます。
jwsc
Ant タスクに対して転送を指定すると、それが JWS ファイル内のすべての転送アノテーションに優先されます。
次の例では、jwsc
Ant タスクに対して転送を指定する方法を示します。
<target name="build-service">
<jwsc
srcdir="src"
destdir="${ear-dir}">
<jws file="examples/webservices/jmstransport/JMSTransportImpl.java">
<WLJmsTransport
contextPath="transports"
serviceUri="JMSTransport"
portName="JMSTransportServicePort"
queue="JMSTransportQueue"/>
</jws>
</jwsc>
</target>
上述の例では、「@WLJmsTransport JWS アノテーションの使用」に示した JWS ファイルで指定されたものと同じ値を URL および JMS キューに対して指定する方法を示しています。
jwsc
Ant タスクの使用の詳細については、「jwsc」を参照してください。
JMS 転送を使用して Web サービスを呼び出すクライアント アプリケーションの記述は、HTTP 転送を使用する場合の記述と同様に行います。ただ 1 つ異なるのは、必ず、JMS キュー (@WLJmsTransport
アノテーションまたは jwsc
Ant タスクの <WLJmsTransport>
子要素で指定) やその他の JMS オブジェクトが作成済みでなければならないという点です。詳細については、「JMS 転送の使用 : 主な手順」を参照してください。
HTTP を使用して JMS 転送でコンフィグレーションされた Web サービスを呼び出すことはできませんが、HTTP を使用してその Web サービスの WSDL を参照することはできます。それにより、clientgen
Ant タスクはやはり Web サービスの JAX-RPC スタブを作成することができます。たとえば、この節で示す Web サービスの WSDL のための URL は、次のようになります。
http://host:port/transports/JMSTransport?WSDL
ただし、デプロイされた Web サービスの WSDL におけるエンドポイント アドレスでは、http://
ではなく jms://
が使用され、このアドレスには限定子 ?URI=
JMS_QUEUE
が含まれるため、clientgen
Ant タスクは Web サービス呼び出し時に JMS 転送を使用するために必要なスタブを自動作成し、クライアント アプリケーション側で通常と違う処理を行う必要はありません。JMS エンドポイントのアドレスの例を次に示します。
jms://host:port/transports/JMSTransport?URI=JMSTransportQueue
警告 : | JMS 転送を使用して呼び出す Web サービスをトランザクションのコンテキスト内でも実行することを指定した (つまり、JWS ファイルに @weblogic.jws.Transactional アノテーションが含まれている) 場合は、そのサービスを呼び出す際に非同期の要求と応答を使用する必要があります。そうしないと、デッドロックが発生して呼び出しが失敗します。 |
Web サービスの呼び出しに関する全般的な情報については、「Web サービスの呼び出し」を参照してください。
clientgen
で生成された JAX-RPC スタブを使用して Web サービスを呼び出すクライアント アプリケーションを作成する場合、Web サービスのデフォルトのサービス アドレス URL は、Service
コンストラクタの WSDL ファイル引数の <address>
要素で指定したものとなります。
しかし場合によっては、特にクラスタにデプロイされている WebLogic Web サービスを呼び出す際に、クラスタのアドレスまたはクラスタ内の管理対象サーバのアドレスのリストを指定する場合には、このアドレスをオーバーライドする必要があることがあります。また、t3
プロトコルを使用して Web サービスを呼び出すことが必要な場合もあります。JMS 転送の使用時にこのサービス エンドポイント URL をオーバーライドするには、次の例で示すように、weblogic.wsee.jaxrpc.WLStub.JMS_TRANSPORT_JNDI_URL
スタブ プロパティを使用します。
package examples.webservices.jmstransport.client;
import weblogic.wsee.jaxrpc.WLStub;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.Stub;
/**
* JMSTransport Web サービスの sayHello オペレーションを呼び出す
* 簡単なスタンドアロンのクライアント アプリケーション
*
* @author Copyright (c) 2004 by BEA Systems. All Rights Reserved.
*/
public class Main {
public static void main(String[] args)
throws ServiceException, RemoteException{
JMSTransportService service = new JMSTransportService_Impl(args[0] + "?WSDL" );
JMSTransportPortType port = service.getJMSTransportServicePort();
Stub stub = (Stub) port;
stub._setProperty(WLStub.JMS_TRANSPORT_JNDI_URL,
try {
"t3://shackell01.amer.bea.com:7001");
String result = null;
result = port.sayHello("Hi there!");
System.out.println( "Got JMS result: " + result );
} catch (RemoteException e) {
throw e;
}
}
}
その他のスタブ プロパティについては、WLStub のリファレンス ドキュメントを参照してください。
JMS 転送を使用する場合、Web サービス ランタイムはデフォルトでは javax.jms.TextMessage
オブジェクトを使用してメッセージを送信します。ほとんどのクライアント アプリケーションはこのデフォルトのままで十分ですが、状況によっては普通のテキストではなくバイナリ データを送信する必要がある場合もあります。その場合は、Web サービス ランタイムで javax.jms.BytesMessage
を使用することを要求する必要があります。そのためには、クライアント アプリケーションで WLStub.JMS_TRANSPORT_MESSAGE_TYPE
スタブ プロパティを使用し、値として WLStub.JMS_BYTESMESSAGE
を設定します。次に例を示します。
stub._setProperty(WLStub.JMS_TRANSPORT_MESSAGE_TYPE,
WLStub.JMS_BYTESMESSAGE);
Web サービス ランタイムは、リクエストと同じメッセージ データ型を使用して応答を送り返します。
このプロパティを設定できるクライアント アプリケーションの例については、「デフォルトのサービス アドレス URL のオーバーライド」を参照してください。その他のスタブ プロパティについては、WLStub のリファレンス ドキュメントを参照してください。
「JMS 転送を使用した WebLogic Web サービスの呼び出し」で説明したように、デプロイされている Web サービスの WSDL には、デフォルトでは HTTP でアクセスできるようになっています。WSDL ファイルへのアクセスを無効にしたい場合 (特に、ファイアウォールの外で Web サービスにアクセスできる場合) は、以下のいずれかのタスクを実行します。
weblogic.jws.WSDL
アノテーションを使用してプログラム的にアクセスを無効にする。詳細については、「weblogic.jws.WSDL」を参照してください。
このタスクを Administration Console を使用して実行する場合は、デプロイした Web サービスの [コンフィグレーション|全般] ページに移動し、[動的 WSDL の表示を有効化] チェック ボックスのチェックをはずします。この変更を有効にするには、コンフィグレーションをデプロイメント プランに保存した後に、Web サービス (またはそのエンタープライズ アプリケーション) を再デプロイ (更新) する必要があります。
![]() ![]() ![]() |