![]() ![]() ![]() ![]() |
以下の節では、バッファ付き 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 インスタンスを同様に設定してあることも前提となっています。詳細については、『JAX-RPC を使用した WebLogic Web サービスの開始』の以下の節を参照してください。
<jwsc
jwsc Ant タスクの使用に関する全般的な情報については、『JAX-RPC を使用した WebLogic Web サービスの開始』の「jwsc WebLogic Web サービス Ant タスクの実行」を参照。
|
||
prompt> ant build-clientService deploy-clientService |
||
prompt> ant build-clientService deploy-clientService |
バッファ付き Web サービスのデプロイ先となる WebLogic Server インスタンスをコンフィグレーションする際には、Web サービスのランタイムで内部的に使用される、JMS サーバやモジュールなどの JMS リソースがコンフィグレーションされます。
これらのリソースは手作業でもコンフィグレーションできますが、コンフィグレーション ウィザードで、Web サービス固有の拡張テンプレートを使用して WebLogic Server ドメインを拡張することもできます。コンフィグレーション ウィザードを使用すると、必要なコンフィグレーション手順が大幅に簡素化されます。詳細については、『JAX-RPC を使用した WebLogic Web サービスの開始』の「Web サービス機能用のドメイン コンフィグレーション」を参照してください。
注意 : | または、WLST を使用してリソースをコンフィグレーションすることもできます。WLST によるドメインの拡張については、『WebLogic Scripting Tool ガイド』の「既存ドメインのコンフィグレーション」を参照してください。 |
リソースを手作業でコンフィグレーションする場合、以下の手順を実行します。
|
||
|
||
weblogic.wsee.DefaultCallbackQueue に設定する。そうせずに、別の JNDI 名を使用する場合は、JWS ファイル内で @BufferQueue アノテーションを使って、この JNDI 名をバッファ付き 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 ファイルをプログラミングする際には、以下のガイドラインに従います。ガイドラインのサンプル コードは、上述のサンプルでは太字で示されています。
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 アノテーションは使用せず、その他のサービスと同じように呼び出します。詳細については、『JAX-RPC を使用した WebLogic 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);
}
}
}
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 ファイルでインポートして使用するためです。
![]() ![]() ![]() |