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

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

バッファ付き Web サービスの作成

以下の節では、バッファ付き Web サービスの作成方法について説明します。

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

 


バッファ付き Web サービスの概要

バッファ付きオペレーションがクライアントによって呼び出されると、メソッド オペレーションは JMS キューに渡され、WebLogic Server は非同期にそれを処理します。Web サービスの信頼性のあるメッセージングの場合と同様に、メソッド呼び出しがまだキューに入っているときに WebLogic Server が停止しても、再起動すればすぐに処理が行われます。バッファ付き Web サービスを呼び出す際に、クライアントが呼び出しからの応答を待機しないので、クライアントの実行は続行可能です。

 


バッファ付き Web サービスの作成 : 主な手順

以下の手順では、バッファ付き Web サービスと、そのバッファ付き Web サービスのオペレーションを呼び出すクライアント Web サービスを作成する方法を説明しています。この手順では、2 つの Web サービスを実装する JWS ファイルをゼロから作成する方法を示しています。既存の JWS ファイルを更新する場合は、この手順をガイドとして利用してください。この手順ではまた、バッファ付き Web サービスをホストする WebLogic Server インスタンスをコンフィグレーションする方法も示しています。

注意 : 非同期の要求と応答機能を一緒に使用しているのでなければ、別の Web サービスからバッファ付き Web サービスを呼び出す必要はありません。これは、スタンドアロン Java アプリケーションからも呼び出すことができます。

Ant ベースの開発環境を設定済みであり、かつ jwsc Ant タスクを実行して、生成されたバッファ付き Web サービスをデプロイするためのターゲットを追加できる、作業用の build.xml ファイルがあることが前提となっています。さらに、バッファ付き Web サービスを呼び出すクライアント Web サービスをホストする、WebLogic Server インスタンスを同様に設定してあることも前提となっています。詳細については、以下を参照してください。

  1. バッファ付き Web サービスをホストする WebLogic Server インスタンスをコンフィグレーションします。
  2. バッファ付き Web サービスのホスト WebLogic Server インスタンスのコンフィグレーション」を参照してください。

  3. バッファ付き Web サービスを実装する、新しい JWS ファイルを作成するか、既存の JWS ファイルを更新します。
  4. バッファ付き JWS ファイルに関するプログラミングのガイドライン」を参照してください。

  5. JWS ファイルをバッファ付き Web サービスにコンパイルする、jwsc Ant タスクへの呼び出しを含むよう、build.xml ファイルを更新します。
  6. <jwsc
    srcdir="src"
    destdir="${service-ear-dir}" >
    <jws
    file="examples/webservices/async_buffered/AsyncBufferedImpl.java"
    />
    </jwsc>

    jwsc タスクの使用に関する全般的な情報については、「jwsc WebLogic Web サービス Ant タスクの実行」を参照してください。

  7. 適切な対象を呼び出して WebLogic Server に Web サービスをデプロイすることにより、送り先 JWS ファイルを再コンパイルします。次に例を示します。
  8. prompt> ant build-mainService deploy-mainService
  9. バッファ付き Web サービスを呼び出すクライアント Web サービスを実装する新しい JWS ファイルを作成するか、既存の JWS ファイルを更新します。
  10. バッファ付き Web サービスを呼び出す JWS ファイルのプログラミング」を参照してください。

  11. クライアント Web サービスをビルドする build.xml ファイルを更新します。
  12. バッファ付き Web サービスのクライアント用 build.xml ファイルの更新」を参照してください。

  13. 適切な対象を呼び出し、その後クライアント WebLogic Server に Web サービスを再デプロイすることにより、クライアント JWS ファイルを再コンパイルします。次に例を示します。
  14. prompt> ant build-clientService deploy-clientService

 


バッファ付き Web サービスのホスト WebLogic Server インスタンスのコンフィグレーション

バッファ付き Web サービスのデプロイ先となる WebLogic Server インスタンスをコンフィグレーションする際には、Web サービスのランタイムで内部的に使用される、JMS サーバやモジュールなどの JMS リソースがコンフィグレーションされます。

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

リソースを手作業でコンフィグレーションしたい場合は、次に示す高度な手順に従ってください。各タスクの実行方法の詳細については、リンクが示されている Administration Console オンライン ヘルプのトピックを参照してください。

  1. バッファ付き Web サービスをホストする WebLogic Server インスタンスが格納されたドメインの Administration Console をブラウザで起動します。
  2. Administration Console を起動する URL に関する手順については、「Administration Console の起動」を参照してください。

  3. JMS サーバを作成します。新規作成しない場合は、既存のものを使用できます。
  4. JMS サーバの作成」を参照してください。

  5. JMS キューが格納された JMS モジュールを作成します。JMS キューを、1 つ前の手順で作成した JMS サーバに対象指定します。必ず、この JMS キューがローカルであることを指定してください。通常は、ローカル JNDI 名を設定することで指定できます。
  6. バッファ付き Web サービスで、デフォルト Web サービスのキューを使用する場合は、JMS キューの JNDI 名を weblogic.wsee.DefaultQueue に設定します。そうせずに、別の JNDI 名を使用する場合は、必ず JWS ファイル内で @BufferQueue アノテーションを使って、この JNDI 名をバッファ付き Web サービスに対して指定します。「バッファ付き JWS ファイルに関するプログラミングのガイドライン」を参照してください。

    バッファ付き Web サービスの機能をクラスタ内で使用している場合は、分散キューではなく、ローカル キューを作成する必要があります。加えて、このキューを明示的にクラスタ内の各サーバに割り当てる必要があります。

    JMS システム モジュールの作成」および「システム モジュールのキューの作成」を参照してください。

 


バッファ付き JWS ファイルに関するプログラミングのガイドライン

次のサンプルでは、バッファ付き Web サービスを実装する簡単な JWS ファイルを示します。太字で示された Java コードに対応するコーディングのガイドラインについては、サンプルの後の説明を参照してください。

package examples.webservices.buffered;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.Oneway;
import weblogic.jws.WLHttpTransport;
import weblogic.jws.MessageBuffer;
import weblogic.jws.BufferQueue;
@WebService(name="BufferedPortType",
serviceName="BufferedService",
targetNamespace="http://example.org")
@WLHttpTransport(contextPath="buffered",
serviceUri="BufferedService",
portName="BufferedPort")
// デフォルトではなく特定の JMS キューを指定するアノテーション
@BufferQueue(name="my.jms.queue")
/**
* 簡単なバッファ付き Web サービス
*/
public class BufferedImpl {
  @WebMethod()
@MessageBuffer(retryCount=10, retryDelay="10 seconds")
@Oneway()
  public void sayHelloNoReturn(String message) {
System.out.println("sayHelloNoReturn: " + message);
  }
}

バッファ付き Web サービスを実装している JWS ファイルをプログラミングする際には、以下のガイドラインに従います。ガイドラインのサンプル コードは、上述のサンプルでは太字で示されています。

 


バッファ付き Web サービスを呼び出す JWS ファイルのプログラミング

バッファ付き Web サービスは、スタンドアロン Java アプリケーション (非同期の要求と応答を使用していない場合) と、別の Web サービスの、双方から呼び出せます。ただし、他の WebLogic Web サービスの非同期機能とは異なり、クライアント Web サービスにおいて @ServiceClient JWS アノテーションは使用せず、その他のサービスと同じように呼び出します。詳細については、「別の Web サービスからの Web サービスの呼び出し」を参照してください。

次のサンプル JWS ファイルでは、BufferedService Web サービスの sayHelloNoReturn オペレーションを呼び出す方法を示します。

package examples.webservices.buffered;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import javax.jws.WebService;
import javax.jws.WebMethod;
import weblogic.jws.WLHttpTransport;
import examples.webservices.buffered.BufferedPortType;
import examples.webservices.buffered.BufferedService_Impl;
import examples.webservices.buffered.BufferedService;
@WebService(name="BufferedClientPortType",
serviceName="BufferedClientService",
targetNamespace="http://examples.org")
@WLHttpTransport(contextPath="bufferedClient",
serviceUri="BufferedClientService",
portName="BufferedClientPort")
public class BufferedClientImpl {
  @WebMethod()
public String callBufferedService(String input, String serviceUrl)
throws RemoteException {
    try {
    BufferedService service = new BufferedService_Impl(serviceUrl + "?WSDL");
BufferedPortType port = service.getBufferedPort();
    // BufferedService の sayHelloNoReturn() オペレーションを呼び出す
    port.sayHelloNoReturn(input);
    return "Invoke went okay!";;
    } catch (ServiceException se) {
         System.out.println("ServiceExcpetion thrown");
throw new RuntimeException(se);
      }
}
}

 


バッファ付き Web サービスのクライアント用 build.xml ファイルの更新

build.xml ファイルを更新して、バッファ付き Web サービスのオペレーションを呼び出す JWS ファイルを生成するには、次のサンプルのような taskdefs および build-clientService ターゲットを追加します。詳細については、サンプルの後の説明を参照してください。

<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<target name="build-clientService">
    <jwsc
enableAsyncService="true"
srcdir="src"
destdir="${clientService-ear-dir}" >
        <jws file="examples/webservices/buffered/BufferedClientImpl.java">
<clientgen
wsdl="http://${wls.hostname}:${wls.port}/buffered/BufferedService?WSDL"
packageName="examples.webservices.buffered"/>
        </jws>
    </jwsc>
  </target>

jwsc Ant タスクの完全なクラス名を定義するには、taskdef Ant タスクを使用します。

クライアント Web サービスをコンパイルする jwsc Ant タスクを更新して、<jws> 要素の <clientgen> 子要素を含めます。これにより、デプロイされた BufferedService Web サービスの JAX-RPC スタブが生成およびコンパイルされるようになります。jwsc Ant タスクでは、これらのスタブが生成された WAR ファイルに自動的にパッケージ化されるため、即座にクライアント Web サービスからアクセスできるようになります。このようにするのは、生成されたクラスの 1 つを BufferedClientImpl JWS ファイルでインポートして使用するためです。


ページの先頭       前  次