![]() ![]() ![]() ![]() |
以下の節では、バッファ付き Web サービスの作成方法について説明します。
警告 : | この機能は、JAX-RPC 1.1 ベースの Web サービスに対してのみ実装可能です。JAX-WS 2.0 Web サービスに対しては実装できません。 |
バッファ付きオペレーションがクライアントによって呼び出されると、メソッド オペレーションは JMS キューに渡され、WebLogic Server は非同期にそれを処理します。Web サービスの信頼性のあるメッセージングの場合と同様に、メソッド呼び出しがまだキューに入っているときに WebLogic Server が停止しても、再起動すればすぐに処理が行われます。バッファ付き Web サービスを呼び出す際に、クライアントが呼び出しからの応答を待機しないので、クライアントの実行は続行可能です。
以下の手順では、バッファ付き Web サービスと、そのバッファ付き Web サービスのオペレーションを呼び出すクライアント Web サービスを作成する方法を説明しています。この手順では、2 つの Web サービスを実装する JWS ファイルをゼロから作成する方法を示しています。既存の JWS ファイルを更新する場合は、この手順をガイドとして利用してください。この手順ではまた、バッファ付き Web サービスをホストする WebLogic Server インスタンスをコンフィグレーションする方法も示しています。
注意 : | 非同期の要求と応答機能を一緒に使用しているのでなければ、別の Web サービスからバッファ付き Web サービスを呼び出す必要はありません。これは、スタンドアロン Java アプリケーションからも呼び出すことができます。 |
Ant ベースの開発環境を設定済みであり、かつ jwsc
Ant タスクを実行して、生成されたバッファ付き Web サービスをデプロイするためのターゲットを追加できる、作業用の build.xml
ファイルがあることが前提となっています。さらに、バッファ付き Web サービスを呼び出すクライアント Web サービスをホストする、WebLogic Server インスタンスを同様に設定してあることも前提となっています。詳細については、以下を参照してください。
「バッファ付き Web サービスのホスト WebLogic Server インスタンスのコンフィグレーション」を参照してください。
「バッファ付き JWS ファイルに関するプログラミングのガイドライン」を参照してください。
jwsc
Ant タスクへの呼び出しを含むよう、build.xml
ファイルを更新します。<jwsc
srcdir="src"
destdir="${service-ear-dir}" >
<jws
file="examples/webservices/async_buffered/AsyncBufferedImpl.java"
/>
</jwsc>
jwsc
タスクの使用に関する全般的な情報については、「jwsc WebLogic Web サービス Ant タスクの実行」を参照してください。
prompt> ant build-mainService deploy-mainService
「バッファ付き Web サービスを呼び出す JWS ファイルのプログラミング」を参照してください。
build.xml
ファイルを更新します。
「バッファ付き Web サービスのクライアント用 build.xml ファイルの更新」を参照してください。
prompt> ant build-clientService deploy-clientService
バッファ付き Web サービスのデプロイ先となる WebLogic Server インスタンスをコンフィグレーションする際には、Web サービスのランタイムで内部的に使用される、JMS サーバやモジュールなどの JMS リソースがコンフィグレーションされます。
これらのリソースは手作業でもコンフィグレーションできますが、コンフィグレーション ウィザードで、Web サービス固有の拡張テンプレートを使用して WebLogic Server ドメインを拡張することもできます。コンフィグレーション ウィザードを使用すると、必要なコンフィグレーション手順を大幅に簡略化できます。詳細については、「Web サービス機能用のドメイン コンフィグレーション」を参照してください。
リソースを手作業でコンフィグレーションしたい場合は、次に示す高度な手順に従ってください。各タスクの実行方法の詳細については、リンクが示されている Administration Console オンライン ヘルプのトピックを参照してください。
Administration Console を起動する URL に関する手順については、「Administration Console の起動」を参照してください。
「JMS サーバの作成」を参照してください。
バッファ付き Web サービスで、デフォルト Web サービスのキューを使用する場合は、JMS キューの JNDI 名を weblogic.wsee.DefaultQueue
に設定します。そうせずに、別の JNDI 名を使用する場合は、必ず JWS ファイル内で @BufferQueue
アノテーションを使って、この JNDI 名をバッファ付き Web サービスに対して指定します。「バッファ付き JWS ファイルに関するプログラミングのガイドライン」を参照してください。
バッファ付き Web サービスの機能をクラスタ内で使用している場合は、分散キューではなく、ローカル キューを作成する必要があります。加えて、このキューを明示的にクラスタ内の各サーバに割り当てる必要があります。
「JMS システム モジュールの作成」および「システム モジュールのキューの作成」を参照してください。
次のサンプルでは、バッファ付き 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 ファイルをプログラミングする際には、以下のガイドラインに従います。ガイドラインのサンプル コードは、上述のサンプルでは太字で示されています。
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 つの任意指定の属性があります。 @Oneway
アノテーションを付けて、そのメソッドが一方向のものであることを指定する必要がある。つまり、メソッドは値を返すことができず、明示的に void
を返すことになります。次に例を示します。@Oneway()
public void sayHelloNoReturn(String message) {
反対に、メソッドに @Oneway
アノテーションが付いていなければ、非同期の要求と応答機能を使用して呼び出す必要があります。オペレーションの呼び出し方法がわからない場合は、同期と非同期の 2 種類のオペレーションを作成することを検討してください。
「非同期の要求と応答を使用した Web サービスの呼び出し」および「非同期機能の併用」を参照してください。
バッファ付き 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);
}
}
}
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 ファイルでインポートして使用するためです。
![]() ![]() ![]() |