プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebLogic Server 12.1.3 JAX-RPC Webサービスの開発
12c (12.1.3)
E57562-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

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

この章では、WebLogic Server 12.1.3のバッファ付きのWebLogic Java API for XML-based RPC (JAX-RPC) 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インスタンスを同様に設定してあることも前提となっています。詳細は、次の項を参照してください。

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

#
手順 説明

1

バッファ付きWebサービスをホストするWebLogic Serverインスタンスを構成します。

「バッファ付きWebサービスのホストWebLogic Serverインスタンスの構成」を参照してください。

2

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

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

3

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

例:

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

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

4

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

例:

prompt> ant build-clientService deploy-clientService

デプロイの詳細は、「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

デプロイの詳細は、「WebLogic Webサービスのデプロイとアンデプロイ」を参照してください。


バッファ付きWebサービスのホストWebLogic Serverインスタンスの構成

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

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


注意:

または、WLSTを使用してリソースを構成できます。WLSTを使用したドメインの拡張の詳細は、『WebLogic Scripting Toolの理解』の既存ドメインの構成に関する項を参照してください。

Webサービスのリソースを含まないドメインは、Webサービス以外のシナリオおよび非同期のリクエスト/レスポンスが含まれないWebサービス・シナリオにおいて、適切に起動および実行されます。ただし、サーバー・ログに、非同期リソースが構成されていないこと、およびWebサービスの非同期レスポンス・サービスが完全にデプロイされていないことを示すINFOメッセージが表示されます。


リソースを手作業で構成する場合、以下の手順を実行します。

表10-2 バッファ付きWebサービスのホストWebLogic Serverインスタンスを手作業で構成する手順

#
手順 説明

1

ホストWebLogic Serverインスタンスが格納されたドメインのWebLogic Server管理コンソールを起動します。

ブラウザでWebLogic Server管理コンソールを起動するには、次のURLを入力します。

http://host:port/console

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

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

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

『Oracle WebLogic Server WebLogic Webサービスの理解』の管理コンソールの起動に関する項を参照してください。

3

JMSサーバーを作成します。

JMSサーバーを作成します。JMSサーバーがすでに存在する場合は、新しいJMSサーバーを作成せずにそれを使用できます。

Oracle WebLogic Server管理コンソール・オンライン・ヘルプJMSサーバーの作成に関する項を参照してください。

4

JMSモジュールを作成し、キューを定義します。

JMSモジュールを作成し、その中にJMSキューを定義します。JMSモジュールがすでに存在する場合は、新しいJMSモジュールを作成せずにそれを使用することもできます。JMSキューを、1つ前の手順で作成したJMSサーバーにターゲット指定します。このJMSキューがローカルであることを必ず指定してください(通常は、ローカルJNDI名の設定により指定できます)。Oracle WebLogic Server管理コンソール・オンライン・ヘルプ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")

// Annotation to specify a specific JMS queue rather than the default
@BufferQueue(name="my.jms.queue") 

/**
 * Simple buffered Web Service.
 */

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アノテーションをインポートします。

    import javax.jws.Oneway;
    import weblogic.jws.MessageBuffer;
    import weblogic.jws.BufferQueue;
    

    どのJWSアノテーションが必要かについては、以下の箇条書きを参照してください。

  • 必要に応じて、クラス・レベルの@BufferQueue JWSアノテーションを使用し、バッファ付きの呼出しを処理する際にWebLogic Serverによって内部使用されるJMSキューのJNDI名を指定します。例:

      @BufferQueue(name="my.jms.queue")
    

    このJWSアノテーションを指定しなかった場合、WebLogic Serverは、デフォルトWebサービスJMSキュー(weblogic.wsee.DefaultQueue)を使用します。

    デフォルトのJMSキューと、このアノテーションで指定されたキューの双方を作成してからでなければ、バッファ付きの操作を正常に呼び出すことはできません。詳細については、「バッファ付きWebサービスのホストWebLogic Serverインスタンスの構成」を参照してください。

  • @MessageBuffer JWSアノテーションを使用し、バッファ付きWebサービス操作を指定します。アノテーションには、次の2つのオプション属性があります。

    • retryCount: WebLogic ServerによるJMSキューからWebサービス実装へのメッセージ配信試行回数(デフォルトでは3)。

    • retryDelay: サーバーが待機すべき再試行間隔(デフォルトでは5分)。

    例:

    @MessageBuffer(retryCount=10, retryDelay="10 seconds")
    

    このアノテーションをクラス・レベルで使用すると、すべての操作をバッファ付きにすることを指定でき、メソッド・レベルで指定すると、どの操作をバッファ付きにするかを選択できます。

  • バッファ付きWebサービス操作を同期的に呼び出す(すなわち、非同期リクエスト-レスポンス機能を使用しない)場合は、実装メソッドに@Onewayアノテーションを付けて、そのメソッドが一方向のものであることを指定する必要があります。つまり、メソッドは値を戻すことができず、明示的にvoidを戻すことになります。例:

    @Oneway()
    public void sayHelloNoReturn(String message) {
    

    反対に、メソッドに@Onewayアノテーションが付いていなければ、非同期リクエスト-レスポンス機能を使用して呼び出す必要があります。操作の呼出し方法がわからない場合は、同期と非同期の2種類の操作を作成することを検討してください。

    第7章「非同期リクエスト-レスポンスを使用したWebサービスの呼出し」第11章「非同期機能の併用」を参照してください。

バッファ付き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();

    // Invoke the sayHelloNoReturn() operation of BufferedService

    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ファイルでインポートして使用するためです。