ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server JAX-RPC Webサービスの高度な機能のプログラミング
12cリリース1(12.1.1)
B65947-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

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

この章では、バッファ付きの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インスタンスを同様に設定してあることも前提となっています。詳細は、『Oracle WebLogic Server JAX-RPC Webサービス・スタート・ガイド』を参照してください。

表5-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タスクの使用に関する一般情報は、『Oracle WebLogic Server JAX-RPC Webサービス・スタート・ガイド』のjwsc WebLogic WebサービスAntタスクの実行に関する項を参照してください。

4

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

例:

prompt> ant build-clientService deploy-clientService

デプロイメントの詳細は、『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 WebLogic Server JAX-RPC Webサービス・スタート・ガイド』のWebLogic Webサービスのデプロイとアンデプロイに関する項を参照してください。


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

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

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


注意:

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

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


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

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

#
手順 説明

1

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

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

http://host:port/console

説明:

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

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

『Oracle WebLogic Server JAX-RPC 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ファイルのプログラミング

バッファ付きWebサービスは、スタンドアロンJavaアプリケーション(非同期のリクエストとレスポンスを使用していない場合)と別のWebサービスの双方から呼び出せます。ただし、他のWebLogic Webサービスの非同期機能とは異なり、クライアントWebサービスにおいて@ServiceClient JWSアノテーションは使用せず、その他のサービスと同じように呼び出します。詳細は、『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();

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