Oracle® Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービスの高度な機能のプログラミング 11g リリース 1 (10.3.1) B55544-01 |
|
戻る |
次へ |
以下の節では、接続プロトコルとしての JMS 転送の使用について説明します。
通常、クライアント アプリケーションから WebLogic Web サービスを呼び出すときは、接続プロトコルとして HTTP/S が使用されます。しかし、クライアント アプリケーションが転送に JMS を使用するように WebLogic Web サービスをコンフィグレーションすることもできます。
JMS 転送を使用すると、信頼性、スケーラビリティ、サービス品質が向上します。Web サービスの信頼性のあるメッセージングの場合と同様に、メソッド呼び出しがまだキューに入っているときに WebLogic Server が停止しても、再起動すればすぐに処理が行われます。クライアントは、Web サービスを呼び出す際に呼び出しからの応答を待機しないため、クライアントの実行は続行可能です。ただし、JMS 転送の使用では、HTTP/S より若干オーバーヘッドが大きくなり、プログラムが複雑になります。
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 サービスを呼び出すことができない場合があります。 |
Java から開始する際に JMS 転送を使用するには、以下の少なくとも 1 つのタスクを実行する必要があります。
JWS ファイルに @WLJmsTransport
アノテーションを追加する。
jwsc
Ant タスクに <WLJmsTransport>
子要素を追加する。この設定は、JWS ファイルで定義された転送をオーバーライドする。
注意 : JWS ファイルのコーディング時にはニーズに最適な転送が分からない場合があるため、転送は、<WLJmsTransport> 子要素を使用してビルド時に指定することをお勧めします。 |
以下に、Java から開始する際に JMS 転送を使用して現在の Web サービスを呼び出し可能とするために必要なすべての手順について説明します。
注意 : Web サービスを実装する基本的な JWS ファイルが作成されており、JMS を使用して呼び出す Web サービスをコンフィグレーションすることが前提となっています。また、Ant ベースの開発環境を設定済みであり、かつjwsc Ant タスクを実行して、サービスをデプロイするためのターゲットを含む、作業用の build.xml ファイルがあることが前提となっています。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』を参照してください。 |
表 8-1 Java から開始する JMS 転送の使用手順
# |
手順 | 説明 |
---|---|---|
1 |
必要な JMS コンポーネント用に WebLogic Server ドメインをコンフィグレーションする。 |
|
2 |
JWS ファイルに |
この手順は省略可能。現在の JWS に |
3 |
|
詳細については、「jwsc Ant タスクの <WLJmsTransport> 子要素の使用」を参照。 |
4 |
|
たとえば、 prompt> ant build-service 『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「jwsc WebLogic Web サービス Ant タスクの実行」を参照。 |
5 |
Web サービスを WebLogic Server にデプロイする。 |
『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「WebLogic Web サービスのデプロイとアンデプロイ」を参照。 |
JMS 転送を使用した Web サービスを呼び出すためのクライアント アプリケーションの更新については、「JMS 転送を使用した WebLogic Web サービスの呼び出し」を参照してください。
WSDL から開始する際に JMS 転送を使用するには、以下の少なくとも 1 つのタスクを実行する必要があります。
wsdlc
Ant タスクを実行する前に、JMS 転送を使用するように WSDL を更新する。
@WLJmsTransport
アノテーションを追加するように、wsdlc
Ant タスクによって生成される途中まで作成済みの JWS 実装ファイルを更新する。
JWS 実装ファイルの作成に使用される jwsc
Ant タスクに <WLJmsTransport>
子要素を追加する。この設定は、JWS ファイルで定義された転送をオーバーライドします。
注意 : JWS ファイルのコーディング時にはニーズに最適な転送が分からない場合があるため、転送は、<WLJmsTransport> 子要素を使用してビルド時に指定することをお勧めします。 |
以下に、WSDL から開始する際に JMS 転送を使用して現在の Web サービスを呼び出し可能とするために必要なすべての手順について説明します。
注意 : この手順では既存の WSDL ファイルがあることを前提としています。 |
表 8-2 WSDL から開始する JMS 転送の使用手順
# |
手順 | 説明 |
---|---|---|
1 |
必要な JMS コンポーネント用に WebLogic Server ドメインをコンフィグレーションする。 |
|
2 |
JMS 転送を使用するよう WSDL を更新する (省略可能)。 |
この手順は省略可能。JMS 転送を使用するよう WSDL を更新しなかった場合、以下の少なくとも 1 つの作業を行う必要がある。
「JMS 転送を使用するための WSDL の更新」を参照。 |
3 |
WSDL ファイルに対して |
たとえば、 prompt> ant generate-from-wsdl 『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「wsdlc WebLogic Web サービス Ant タスクの実行」を参照。 |
4 |
途中まで作成済みの JWS ファイルを更新する。 |
手順 2 で、JMS 転送を使用するように WSDL を更新した場合、JWS ファイルには、JMS 転送を定義する
|
5 |
|
詳細については、「jwsc Ant タスクの <WLJmsTransport> 子要素の使用」を参照。 |
6 |
JWS ファイルに対して |
|
7 |
Web サービスを WebLogic Server にデプロイする。 |
『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「WebLogic Web サービスのデプロイとアンデプロイ」を参照。 |
JMS 転送を使用した Web サービスを呼び出すためのクライアント アプリケーションの更新については、「JMS 転送を使用した WebLogic Web サービスの呼び出し」を参照してください。
JMS 転送 Web サービスのデプロイ先となる WebLogic Server インスタンスをコンフィグレーションする際には、Web サービスのランタイムで内部的に使用される、JMS サーバやモジュールなどの JMS リソースがコンフィグレーションされます。
これらのリソースは手作業でもコンフィグレーションできますが、コンフィグレーション ウィザードで、Web サービス固有の拡張テンプレートを使用して WebLogic Server ドメインを拡張することもできます。コンフィグレーション ウィザードを使用すると、必要なコンフィグレーション手順を大幅に簡略化できます。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「Web サービス機能用のドメイン コンフィグレーション」を参照してください。
注意 : または、WLST を使用してリソースをコンフィグレーションすることもできます。WLST を使用してドメインを拡張する方法の詳細については、『Oracle Fusion Middleware Oracle WebLogic Scripting Tool ガイド』の「既存ドメインのコンフィグレーション」を参照してください。 |
リソースを手作業でコンフィグレーションする場合、以下の手順を実行します。
表 8-3 JMS 転送 Web サービスのホスト WebLogic Server インスタンスを手作業でコンフィグレーションする手順
# |
手順 | 説明 |
---|---|---|
1 |
ホスト WebLogic Server インスタンスが格納されたドメインの Administration Console を起動する。 |
ブラウザで Administration Console を起動するには、次の URL を入力する。
各要素の説明 :
『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「Administration Console の起動」を参照。 |
3 |
JMS サーバを作成する。 |
JMS サーバを作成する。JMS サーバがすでに存在する場合は、新しい JMS サーバを作成せずにそれを使用することができる。 『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「JMS サーバの作成」を参照。 |
4 |
JMS モジュールを作成し、キューを定義する。 |
JMS モジュールを作成し、その中で JMS キューを定義する。JMS モジュールがすでに存在する場合は、新しい JMS モジュールを作成せずにそれを使用することができる。JMS キューを、1 つ前の手順で作成した JMS サーバに対象指定する。この JMS キューがローカルであることを指定する必要がある。通常は、ローカル JNDI 名の設定により指定可能。『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「JMS システム モジュールの作成」と「システム モジュールのキューの作成」を参照。 JMS 転送 Web サービスで、デフォルト Web サービスのキューを使用する場合は、JMS キューの JNDI 名を クラスタ化の考慮事項 : クラスタ内で Web サービスの JMS 転送機能を使用する場合は、以下の作業を行う必要がある。
|
JWS ファイルをプログラムした時点で、Web サービスの呼び出しにクライアント アプリケーションで (HTTP/S ではなく) JMS 転送を使用することが決まっている場合は、@WLJmsTransport
を使用してその呼び出しの詳細を指定できます。後のビルド時に、「jwsc Ant タスクの <WLJmsTransport> 子要素の使用」に従い、jwsc
Ant タスクの <WLJmsTransport>
子要素を指定して、JWS ファイルで定義されている呼び出しをオーバーライドし、さらに JMS 転送指定を追加できます。
@WLJmsTransport
アノテーションを使用する際は、以下のガイドラインに従ってください。
JWS ファイルに含めることができる @WLJmsTransport
アノテーションは 1 つのみ。
これより前の部分でコンフィグレーションした JMS キューの JNDI 名の指定には queue
属性を使用する。デフォルトの Web サービス キュー (weblogic.wsee.DefaultQueue
) を使用する場合は、queue
属性を指定する必要はありません。
接続ファクトリの JNDI 名の指定には connectionFactory
属性を使用する。この属性のデフォルト値は、WebLogic Server インスタンスのデフォルトの JMS 接続ファクトリです。
次の例では、@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 が // 「simple/SimpleService」であることを指定する、 // WebLogic 固有の JWS アノテーション @WLJmsTransport(contextPath="transports", serviceUri="JMSTransport", queue="JMSTransportQueue", portName="JMSTransportServicePort", connectionFactory="JMSTransportConnectionFactory") /** * この JWS ファイルは、1 つのオペレーション sayHelloWorld を含む簡単な * Java クラス実装の WebLogic Web サービスの基本となる */ 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>
子要素を使用して、ビルド時にも指定できます。ビルド時に転送を指定する理由としては、次のようなものが挙げられます。
JWS ファイルで指定した属性値をオーバーライドする必要がある。
JWS ファイルでは別の転送が指定されており、ビルド時に、JMS を転送として使用すると決定した。
JWS ファイルに @WLXXXTransport
アノテーションが含まれておらず、そのためデフォルトでは HTTP 転送が使用されているが、ビルド時に JMS 転送を使用して Web サービスを呼び出すと決定した。
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" connectionFactory="JMSTransportConnectionFactory"/> </jws> </jwsc> </target>
上述の例では、「@WLJmsTransport JWS アノテーションの使用」に示した JWS ファイルで指定されたものと同じ値を URL および JMS キューに対して指定する方法を示しています。
jwsc
Ant タスクの使用方法の詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービス リファレンス』の「jwsc」を参照してください。
JMS 転送を使用するように WSDL を更新するには、JMS 転送情報を定義する <wsdl:binding>
定義と <wsdl:service>
定義を追加する必要があります。これらの定義は、以下のいずれかの方法で追加できます。
既存の HTTP の <wsdl:binding>
および <wsdl:service>
定義を編集する。
WSDL で複数の転送オプションを指定するには、既存の HTTP の <wsdl:binding>
および <wsdl:service>
定義をコピーし、JMS 転送を使用するように編集する。
どちらの場合でも、JMS 転送を使用するように <wsdl:binding>
および <wsdl:service>
定義を以下のように変更する必要があります。
<wsdl:binding>
要素の子要素 <soapwsdl:binding>
の transport
属性を http://www.openuri.org/2002/04/soap/jms
に設定する。次に例を示します。
<binding name="JmsTransportServiceSoapBindingjms" type="tns:JmsTransportPortType">
<soap:binding style="document" transport="http://www.openuri.org/2002/04/soap/jms/"/>
<wsdl:service>
の子要素 <soapwsdl:address>
の location
属性に、JMS 形式のエンドポイント URL を指定する。次に例を示します。
<s0:service name="JmsTransportService">
<s0:port binding="s1:JmsTransportServiceSoapBindingjms" name="JmsTransportServicePort">
<s2:address location="jms://localhost:7001/transports/JmsTransport?URI=JMSTransportQueue"/>
</s0:port>
</s0:service>
JMS 転送を使用して Web サービスを呼び出すクライアント アプリケーションの記述は、HTTP 転送を使用する場合の記述と同様に行います。ただ 1 つ異なるのは、必ず、JMS キュー (@WLJmsTransport
アノテーションまたは jwsc
Ant タスクの <WLJmsTransport>
子要素で指定) とその他の JMS オブジェクトが作成済みでなければならないという点です。詳細については、「Java から開始する JMS 転送の使用 : 主な手順」または「WSDL から開始する 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 サービス呼び出しに関する全般的な情報については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した 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; /** * WorkArea Web サービスの <code>sayHello</code> オペレーションを呼び出す * 単純なスタンドアロンのクライアント アプリケーション。 */ 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, "t3://shackell01.amer.bea.com:7001"); try { String result = null; result = port.sayHello("Hi there! "); System.out.println( "Got JMS result: " + result ); } catch (RemoteException e) { throw e; } } }
その他のスタブ プロパティについては、『Oracle Fusion Middleware Oracle WebLogic Server 10.3.1 API リファレンス』の「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 のオーバーライド」を参照してください。その他のスタブ プロパティについては、『Oracle Fusion Middleware Oracle WebLogic Server 10.3.1 API リファレンス』の「WLStub」を参照してください。
「JMS 転送を使用した WebLogic Web サービスの呼び出し」で説明したように、デプロイされている Web サービスの WSDL には、デフォルトで HTTP でアクセスできるようになっています。WSDL ファイルへのアクセスを無効にしたい場合 (特に、ファイアウォールの外で Web サービスにアクセスできる場合) は、以下のいずれかのタスクを実行します。
JWS ファイルで、weblogic.jws.WSDL
アノテーションを使用してプログラム的にアクセスを無効にする。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービス リファレンス』の「weblogic.jws.WSDL」を参照。
Web サービスをデプロイした後に、Administration Console を使用して WSDL へのアクセスを無効にする。この場合、コンフィグレーション情報は、アノテーションではなくデプロイメント プラン内に格納されます。
このタスクを Administration Console を使用して実行する場合は、デプロイした Web サービスの [コンフィグレーション|全般] ページに移動し、[動的 WSDL の表示を有効化] チェック ボックスのチェックをはずします。この変更を有効にするには、コンフィグレーションをデプロイメント プランに保存した後に、Web サービス (またはそのエンタープライズ アプリケーション) を再デプロイ (更新) する必要があります。