ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービスの高度な機能のプログラミング
11g リリース 1 (10.3.1)
B55544-01
 

目次
目次

戻る
戻る
 
次へ
次へ
 

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

以下の節では、バッファ付き 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 インスタンスを同様に設定してあることも前提となっています。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』を参照してください。

表 5-1 バッファ付き Web サービスの作成手順

#
手順 説明

1

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

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

2

バッファ付き Web サービスを実装する、新しい JWS ファイルを作成するか、既存の JWS ファイルを更新する。

使い慣れた IDE またはテキスト エディタを使用する。「バッファ付き JWS ファイルに関するプログラミングのガイドライン」を参照。

3

JWS ファイルをバッファ付き Web サービスにコンパイルする、jwsc Ant タスクへの呼び出しを含むよう、build.xml ファイルを更新する。

例 :

<jwsc
    srcdir="src"
    destdir="${service-ear-dir}" >
    <jws
      file="examples/webservices/async_buffered/AsyncBufferedImpl.java" 
    />
</jwsc>

jwsc Ant タスクの使用に関する全般的な情報については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「jwsc WebLogic Web サービス Ant タスクの実行」を参照。

4

適切な対象を呼び出して JWS ファイルを再コンパイルしてから、WebLogic Server に Web サービスを再デプロイする。

例 :

prompt> ant build-clientService deploy-clientService

デプロイメントの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「WebLogic Web サービスのデプロイとアンデプロイ」を参照。

5

バッファ付き Web サービスを呼び出すクライアント Web サービスを実装する新しい JWS ファイルを作成するか、既存の JWS ファイルを更新する。

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

6

クライアント Web サービスをビルドする build.xml ファイルを更新する。

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

7

適切な対象を呼び出してクライアント JWS ファイルを再コンパイルしてから、クライアント WebLogic Server に Web サービスを再デプロイする。

例 :

prompt> ant build-clientService deploy-clientService

デプロイメントの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「WebLogic Web サービスのデプロイとアンデプロイ」を参照。


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

バッファ付き 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 ガイド』の「既存ドメインのコンフィグレーション」を参照してください。

リソースを手作業でコンフィグレーションする場合、以下の手順を実行します。

表 5-2 バッファ付き Web サービスのホスト WebLogic Server インスタンスを手作業でコンフィグレーションする手順

#
手順 説明

1

ホスト WebLogic Server インスタンスが格納されたドメインの Administration Console を起動する。

ブラウザで Administration Console を起動するには、次の URL を入力する。

http://host:port/console

各要素の説明は次のとおりである。

  • host は、管理サーバが動作しているコンピュータを指す。

  • port は、管理サーバが接続リクエストをリスニングしているポート番号を指す。管理サーバのデフォルトのポート番号は 7001。

『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 システム モジュールの作成」と「システム モジュールのキューの作成」を参照。

バッファ付き Web サービスで、デフォルト Web サービスのキューを使用する場合は、JMS キューの JNDI 名を weblogic.wsee.DefaultCallbackQueue に設定する。そうせずに、別の JNDI 名を使用する場合は、JWS ファイル内で @BufferQueue アノテーションを使って、この JNDI 名をバッファ付き Web サービスに対して指定する必要がある。「バッファ付き JWS ファイルに関するプログラミングのガイドライン」を参照。

クラスタ化の考慮事項 :

クラスタ内で Web サービスのバッファ機能を使用する場合は、以下の作業を行う必要がある。

  • JMS キューの作成時に、分散キューではなくローカル JMS キューを作成する。

  • この JMS キューをクラスタ内の各サーバに明示的に対象指定する。

4

必要に応じて、現在のドメイン環境をチューニングする (省略可能)。

『WebLogic Server パフォーマンス チューニング ガイド』の「Web サービスのパフォーマンスを向上させるために負荷が高いシステムのチューニング」を参照。


バッファ付き 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 アノテーションは使用せず、その他のサービスと同じように呼び出します。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「別の 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 ファイルでインポートして使用するためです。