WebLogic Web サービス プログラマーズ ガイド (応用編)

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

接続プロトコルとしての JMS 転送の使用

以下の節では、接続プロトコルとしての JMS 転送の使用について説明します。

警告 : この機能は、JAX-RPC 1.1 ベースの Web サービスに対してのみ実装可能です。JAX-WS 2.0 Web サービスに対しては実装できません。

 


JMS 転送の使用の概要

通常、クライアント アプリケーションから 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 転送の使用 : 主な手順

次の手順では、JMS 転送を使用して Web サービスを呼び出すことを指定する方法を説明します。

Web サービスを実装する基本的な JWS ファイルがすでに作成されており、呼び出す Web サービスを、JMS を使用してコンフィグレーションすることが前提となっています。また、Ant ベースの開発環境を設定済みであり、かつ jwsc Ant タスクを実行して、サービスをデプロイするためのターゲットを含む、作業用の build.xml ファイルがあることが前提となっています。詳細については、以下を参照してください。

  1. 必要な JMS コンポーネント用に WebLogic Server ドメインをコンフィグレーションします。
  2. これらのリソースは手作業でもコンフィグレーションできますが、コンフィグレーション ウィザードで、Web サービス固有の拡張テンプレートを使用して WebLogic Server ドメインを拡張することもできます。コンフィグレーション ウィザードを使用すると、必要なコンフィグレーション手順を大幅に簡略化できます。詳細については、「Web サービス機能用のドメイン コンフィグレーション」を参照してください。

    リソースを手作業でコンフィグレーションしたい場合は、次の手順に従います。

    1. Administration Console の起動」に従って、ブラウザで Administration Console を起動します。
    2. Administration Console を使用し、まだ存在しない場合は、次の JMS コンポーネントを作成およびコンフィグレーションします。
      • JMS サーバ。「JMS サーバの作成」を参照してください。
      • その前の JMS サーバに対象指定された、JMS モジュール。「JMS システム モジュールの作成」を参照してください。
      • その前の JMS モジュール内に格納された、JMS キュー。デフォルトで WebLogic Web サービスがリスンする JMS キューの JNDI 名 (weblogic.wsee.DefaultQueue) を指定することも、別の名前を指定することもできます。別の JNDI 名を指定する場合は、後でこの名前を Web サービス自体に渡します。キューをコンフィグレーションする際は、この JMS キューが「ローカル」であることを必ず指定してください。通常は、ローカル JNDI 名を設定することで指定できます。「システム モジュールのキューの作成」を参照してください。
      • JMS キューの JNDI 名以外の他のコンポーネントの名前は、任意に付けることができます。

  3. JWS ファイルに @WLJmsTransport アノテーションを追加します。
  4. @WLJmsTransport JWS アノテーションの使用」を参照してください。

  5. JMS ポートを前の手順で指定したものからオーバーライドする場合は、必要に応じて jwsc Ant タスクに <WLJmsTransport> 子要素を追加します。
  6. 詳細については、「jwsc Ant タスクの <WLJmsTransport> 子要素の使用」を参照してください。

  7. jwsc タスクを呼び出す build.xml Ant ファイル内のターゲットを再実行することにより、Web サービスを再ビルドします。
  8. たとえば、jwsc Ant タスクを呼び出すターゲットが build-service というものであれば、以下を実行します。

    prompt> ant build-service
  9. Web サービスを WebLogic Server に再デプロイします。

JMS 転送を使用した Web サービスを呼び出すためのクライアント アプリケーションの更新については、「JMS 転送を使用した WebLogic Web サービスの呼び出し」を参照してください。

 


@WLJmsTransport JWS アノテーションの使用

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 + "'";
}
}

 


jwsc Ant タスクの <WLJmsTransport> 子要素の使用

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 転送を使用した WebLogic Web サービスの呼び出し

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 サービスの呼び出し」を参照してください。

デフォルトのサービス アドレス URL のオーバーライド

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,
"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;
}
}
}

その他のスタブ プロパティについては、WLStub のリファレンス ドキュメントを参照してください。

デフォルトの TextMessage の代わりとしての JMS BytesMessage の使用

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 のリファレンス ドキュメントを参照してください。

WSDL ファイルへの HTTP アクセスの無効化

JMS 転送を使用した WebLogic Web サービスの呼び出し」で説明したように、デプロイされている Web サービスの WSDL には、デフォルトでは HTTP でアクセスできるようになっています。WSDL ファイルへのアクセスを無効にしたい場合 (特に、ファイアウォールの外で Web サービスにアクセスできる場合) は、以下のいずれかのタスクを実行します。


ページの先頭       前  次