Oracle Application Server Web Services開発者ガイド 10g(10.1.3.1.0) B31868-01 |
|
この章では、JavaクラスをベースにしてステートレスおよびステートフルなWebサービスをアセンブルする方法について説明します。アセンブリは、WebServicesAssemblerによってボトムアップ方式で実行されます。
ステートレスWebサービスは、複数のコールにわたったローカル状態の保持を行いません。ステートレスWebサービスは、.NETまたは任意のベンダーのWebサービスと相互運用可能です。サービスは、トランスポート・メカニズムとしてHTTPまたはJMSを使用できます。
対照的に、ステートフルWebサービスは、複数のコールにわたって状態を保持します。このため、メソッド起動の結果は、メソッドのスコープに応じて異なってきます。Oracle Application Server Web ServicesによってサポートされるステートフルWebサービスは、HTTPベースです。JavaクラスをベースとしたステートフルOracleAS Web Servicesは、Oracle固有の拡張機能を備えており、サービス・プロバイダが同じセマンティックを持つスコープを用意しないかぎり、その他のサービスとは相互運用できません。
この章の内容は、次のとおりです。
JAX-RPCを使用し、Javaファイルを使用してWebサービスを作成するには、サービスとして公開するリモート・メソッドを定義するパブリック・インタフェースを用意する必要があります。また、このインタフェースの定義は、java.rmi.Remote
を拡張して、そのメソッドでjava.rmi.RemoteException
オブジェクトをスローする必要があります。また、このインタフェースはパッケージに含めることも必要です。
また、このパブリック・インタフェースを使用して、Webサービスで使用可能にするパブリック・メソッドのシグネチャ(または、サポートされているデータ型を使用するパブリック・メソッド)をリストすることもできます。つまり、インタフェースを使用して、公開するメソッドをフィルタ処理することができます。
インタフェースの実装は、次の要件も満たす必要があります。
java.io.Serializable
を実装する必要があります。
java.rmi.RemoteException
をスローする必要があります。また、メソッドはその他の固有の例外を宣言してもかまいません。これらの例外は、java.lang.Exception
を直接または間接的に拡張したものにする必要がありますが、RuntimeException
にすることはできません。
サポートされているJava型のリストについては、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「Java型のXMLおよびWSDL型へのマッピング」を参照してください。
javax.xml.rpc.holders
パッケージから生成または導出されます。
RemoteInterface
を実装するクラス)をパラメータ型または戻り型として含めることはできません。Java配列またはJAX-RPC値タイプには、リモート参照を要素として含めることはできません。インタフェースに関するすべての要件の詳細は、Webアドレスhttp://www.jcp.org/aboutJava/communityprocess/final/jsr109/index.htmlにあるEnterprise Web Services 1.1の仕様を参照してください。
Webサービス・クライアントがサービス・リクエストを行うと、OC4Jはそのクラス内の対応するメソッドを実行します。Webサービスで実行できるアクションには、制限がほとんどありません。Webサービスでは、クライアントに送信するデータが生成されるか、Webサービス・リクエストで指定されたアクションが実行されます。
注意
サービス・インタフェースを提供せず、クラスが準拠クラスの条件の一部を満たしていない場合であっても、OracleAS Web ServicesはJavaクラスをWebサービスとして直接公開できる場合があります。このような場合にJavaクラスをWebサービスとして公開するには、 また、このような条件の下でアセンブルされたWebサービスは、JAX-RPC仕様で定義されている適合性または移植性を備えていないことにも注意してください。 |
関連項目
ステートレスWebサービス用のJavaクラスを記述する方法の詳細は、「ステートレスWebサービス用のJava実装の記述方法」を参照してください。また、ステートフルWebサービス用のJavaクラスを記述する方法の詳細は、「ステートフルWebサービス用のJava実装の記述方法」を参照してください。 |
この項の内容は、次のとおりです。
WebServicesAssemblerを使用して、JAX-RPC 1.1の仕様に準拠するJavaクラスからWebサービスをアセンブルできます。JavaクラスをWebサービスとして公開することは、軽量のシステムを必要としていて、EJBコンテナが提供するトランザクション機能が不要な場合に、適しています。
WebServicesAssemblerでは、サービスはボトムアップ方式でアセンブルされます。WebServicesAssemblerは、公開するJavaクラスをベースとしてアセンブルを行い、WSDL、マッピング・ファイル、実装ファイルおよびデプロイメント・ディスクリプタが含まれた、デプロイ可能なEARファイルを生成します。
JAX-RPCを使用するには、サービスとして公開するメソッドが含まれるJavaクラスとそのインタフェースを用意する必要があります。
JavaクラスをベースとしたWebサービスは、Java、.NETまたはその他のプログラミング言語で記述されたクライアントから起動できます。Webサービスは、トランスポート・メカニズムとしてHTTPまたはJMSを使用できます。このクライアントは、静的スタブまたはDynamic Invocation Interface(DII)をベースにすることができます。
この項の内容は、次のとおりです。
開始する前に、次のファイルと情報を用意してください。
JavaクラスをステートレスWebサービスとして公開する場合は、「ステートレスWebサービス用のJava実装の記述方法」を参照してください。JavaクラスをステートフルWebサービスとして公開する場合は、「ステートフルWebサービスとしてのJavaクラスの公開」を参照してください。
ear
引数を使用します。ear
を指定しない場合、ファイルはoutput
引数で指定されたディレクトリに格納されます。
これらのトピックの詳細は、第17章「SOAPヘッダーの処理」および「Antタスクでのハンドラの構成方法」を参照してください。
サポートされていないデータ型を使用する場合は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「Java型のXMLおよびWSDL型へのマッピング」および表5-1「rpc-encoded固有のメッセージ書式でサポートされているJava型」を参照してください。
カスタム・シリアライズの詳細は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「Java値タイプのカスタム・シリアライズ」を参照してください。
サポートされているデータ型のリストについては、JAX-RPC 1.1の仕様を参照してください。この仕様は次のWebサイトで入手できます。
http://java.sun.com/webservices/jaxrpc/index.jsp.
次の手順は、WebServicesAssemblerを使用してJavaクラスを基にステートレスWebサービスを公開する方法を示しています。
次の例では、HelloInterface
インタフェースとHelloImpl
クラスを使用しています。これらのファイルのコード・リストについては、「Javaクラスを使用したステートレスWebサービスのアセンブル手順」を参照してください。
assemble
コマンドを使用してWebServicesAssemblerを実行し、サービスのアーチファクトを生成します。この例では、インタフェースと実装クラスは./build/classes/service
ディレクトリにコンパイル済であるものと想定されています。コマンドライン:
java -jar wsa.jar -assemble -appName hello -serviceName HelloService -interfaceName oracle.demo.hello.HelloInterface -className oracle.demo.hello.HelloImpl -input ./build/classes/service -output build -ear dist/hello.ear -uri HelloService -targetNamespace http://hello.demo.oracle -classpath ./build/classes/service
Antタスク:
<oracle:assemble appName="hello" serviceName="HelloService" input="./build/classes/service" output="build" ear="dist/hello.ear" targetNamespace="http://hello.demo.oracle" > <oracle:porttype interfaceName="oracle.demo.hello.HelloInterface" className="oracle.demo.hello.HelloImpl"> <oracle:port uri="HelloService" /> </oracle:porttype> <oracle:classpath> <pathelement location="build/classes/service"/> </oracle:classpath> </oracle:assemble>
このコマンドおよびAntタスクの説明:
assemble
: ボトムアップ方式でJavaファイルからWebサービスを生成します。このコマンドにより、デプロイ可能なアーカイブを作成するために必要なすべてのファイルが作成されます。「assemble」を参照してください。
appName
: アプリケーションの名前を指定します。この名前は、通常context
やuri
などの他の引数のベース値として使用されます。「appName」を参照してください。
serviceName
: サービス名を指定します。「serviceName」を参照してください。
interfaceName
: サービス・エンドポイント・インタフェース(SEI)を格納するJavaクラスの名前(パッケージ名を含む)を指定します。「interfaceName」を参照してください。
className
: Webサービスの実装クラスのクラス名(パッケージ名を含む)を指定します。「className」を参照してください。
input
: WEB-INF/classes
にコピーされるクラスを格納するJARまたはディレクトリを指定します。この引数は、WebServicesAssemblerによって使用されるクラスパスに追加されます。「input」を参照してください。
output
: 生成されるファイルを格納するディレクトリを指定します。そのディレクトリが存在しない場合は、作成します。「output」を参照してください。
ear
: 生成されるEARファイルの名前と位置を指定します。「ear」を参照してください。
uri
: Webサービスに使用するURIを指定します。「uri」を参照してください。
targetNamespace
: 生成されるWSDLで使用するターゲット名前空間を指定します。この値は、仕様に準拠しているHTTP URL、準拠していないHTTP URL、またはURIであってもかまいません。「targetNamespace」を参照してください。
classpath
: WebServicesAssemblerに与えられるユーザー作成クラスをすべて含むクラスパスを指定します。この引数を指定する理由の1つは、一部の値タイプ・クラスまたは例外を作成済の場合に、WebServicesAssemblerが上書きしないようにするためです。「classpath」を参照してください。
このコマンドの出力は、OC4Jインスタンスにデプロイ可能なWARファイルの内容が含まれたEARファイルです。dist
ディレクトリには、J2EE Webサービスに準拠したアプリケーションEARファイルであるhello.ear
が格納されます。assemble
の必須およびオプションの引数の詳細は、「assemble」を参照してください。
通常の方法でEARファイルをOC4Jの実行中インスタンスにデプロイします。EARファイルのデプロイの詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。次は、デプロイメント・コマンドのサンプルです。
java -jar <OC4J_HOME>/j2ee/home/admin_client.jar deployer:oc4j:localhost:port <user> <password> -deploy -file dist/hello.ear -deploymentName hello -bindWebApp default-web-site
次のリストは、このコード例で使用される変数の説明です。
genProxy
コマンドを使用してWebServicesAssemblerツールを実行し、J2SE Webサービス・クライアントのスタブ(クライアント・プロキシ)を生成します。J2SE環境向けのクライアント・サイド・コードの生成およびアセンブルの詳細は、第15章「J2SE Webサービス・クライアントのアセンブル」を参照してください。
genInterface
コマンドを使用してWebServicesAssemblerツールを実行し、J2EE Webサービス・クライアント用のマッピング・ファイルおよびサービス・エンドポイント・インタフェースを生成します。クライアント・サイド・コードの生成およびアセンブルの詳細は、第14章「J2EE Webサービス・クライアントのアセンブル」を参照してください。
たとえば、次のコマンドは、J2SEクライアントで使用可能なスタブを生成します。
コマンドライン:
java -jar wsa.jar -genProxy -output build/src/client/ -wsdl http://localhost:8888/hello/HelloService?WSDL -packageName oracle.demo.hello
Antタスク:
<oracle:genProxy wsdl="http://localhost:8888/hello/HelloService?WSDL" output="build/src/client" packageName="oracle.demo.hello" />
このコマンドラインおよびAntタスクの説明:
genProxy
: J2SE Webサービス・クライアントから使用可能な静的プロキシ・スタブを作成します。「genProxy」を参照してください。
output
: 生成されるファイルを格納するディレクトリを指定します。そのディレクトリが存在しない場合は、作成します。「output」を参照してください。
wsdl
: WSDLドキュメントの絶対ファイル・パス、相対ファイル・パスまたはURLを指定します。「wsdl」を参照してください。
packageName
: JAX-RPCマッピング・ファイルにパッケージ名が宣言されていない場合に、生成されたクラス用に使用されるパッケージ名を指定します。「packageName」を参照してください。
このコマンドは、クライアント・プロキシを生成し、これらをディレクトリbuild/src/client
に格納します。クライアント・アプリケーションはこのスタブを使用して、リモート・サービスでの操作を起動します。genProxy
の必須およびオプションの引数の詳細は、「genProxy」を参照してください。
クライアントをコンパイルする前に、クラスパス上にある適切なJARをリストします。クライアントのクラスパスで使用可能なすべてのJARファイルのリストについては、表A-2「クライアント・サイド・プロキシを使用するクライアントのクラスパス・コンポーネント」を参照してください。個々のJARをリストするかわりに、クライアントのクラスパスにクライアント側のJARとしてwsclient_extended.jar
を含めることができます。このJARファイルには、Webサービス・クライアントをコンパイルおよび実行するために必要なすべてのクラスが含まれます。これらのクラスは、表A-2にリストされている各JARファイルに含まれているものです。wsclient_extended.jar
およびクライアントのクラスパスの詳細は、「Webサービス・プロキシのクラスパスの設定」を参照してください。
OracleAS Web Servicesでは、Webサービスとして動作するJavaクラスのステートレス実装がサポートされます。ステートレスJava実装の場合、OracleAS Web Servicesでは、Javaクラスの複数インスタンスがプール内に作成されます。リクエストの処理には、任意のインスタンスを使用できます。リクエストの処理が完了すると、オブジェクトは後続のリクエストに使用できるようにプールに戻されます。
ステートレスWebサービス用のJavaクラスをアセンブルできるのは、SOAP/HTTPエンドポイントの場合のみであり、SOAP/JMSエンドポイントの場合はできません。
ステートレスJava Webサービスを開発するには、Javaインタフェースおよびその実装を定義します。これについては、次の各項で説明します。
サービス・インタフェースを提供せず、クラスが準拠クラスの条件の一部を満たしていない場合であっても、OracleAS Web ServicesはJavaクラスをWebサービスとして直接公開できる場合があります。このような場合にJavaクラスをWebサービスとして公開するには、
また、このような条件の下でアセンブルされたWebサービスは、JAX-RPC仕様に準拠する適合性または移植性を備えていないことにも注意してください。
注意
@WebService
などのJ2SE 5.0注釈を使用する必要があります。詳細は、第11章「注釈を使用したWebサービスのアセンブル」を参照してください。
例7-1は、ステートレスWebサービスのHelloInterface.java
インタフェースを示します。JAX-RPC 1.1の仕様に準拠するには、このインタフェースをパッケージに含める必要があります。また、このインタフェースはjava.rmi.Remote
を拡張して、そのメソッドでjava.rmi.RemoteException
オブジェクトをスローする必要があります。
package oracle.demo.hello; import java.rmi.RemoteException; import java.rmi.Remote; public interface HelloInterface extends Remote { public String sayHello(String name) throws RemoteException; }
Webサービスとして公開するインタフェースのメソッドを実装し、Javaクラスを作成します。通常、WebサービスのJavaクラスでは、1つ以上のパブリック・メソッドを定義します。JAX-RPC 1.1の仕様に準拠するには、この実装クラスをパッケージに含める必要があります。また、java.rmi.Remote
およびjava.rmi.RemoteException
をインポートする必要があります。
例7-2に、パブリック・クラスHelloImpl
を示します。このクラスでは、「Hello
name!
」という文字列を戻すパブリック・メソッドsayHello
を定義します。この場合、nameは入力値です。
package oracle.demo.hello; import java.rmi.RemoteException; import java.rmi.Remote; public class HelloImpl { public HelloImpl() { } public String sayHello(String name) { return ("Hello " + name + "!"); } }
JavaクラスのWebサービス実装には、引数を取らないパブリック・コンストラクタを含める必要があることに留意してください。
Javaクラスのメソッドの実行時にエラーが発生すると、RemoteException
がスローされます。この例外に応答して、OracleAS Web ServicesはWebサービス(SOAP)障害を戻します。実装にJavaクラスを使用するWebサービスのエラーを表示するには、標準のJ2EEおよびOC4J管理機能を使用します。
Webサービスを実装するメソッドを含んだJavaクラスを作成する場合、メソッド、パラメータおよび戻り値には、サポートされている型か、またはOracleAS Web Servicesでサポートされている標準外の型を使用する必要があります。サポートされているデータ型のリストについては、JAX-RPC 1.1の仕様を参照してください。この仕様は次のWebサイトで入手できます。
http://java.sun.com/webservices/jaxrpc/index.jsp
関連資料
サポートされているデータ型およびサポートされている標準外の型のリストについては、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「Java型のXMLおよびWSDL型へのマッピング」および表5-1を参照してください。 |
メソッド、パラメータおよび戻り値にサポートされていない型が使用されている場合、次のいずれかの方法でこれらを処理する必要があります。
この項の内容は、次のとおりです。
OC4Jは、JavaクラスをベースとしたステートフルWebサービスをサポートしています。このサービスを実装したJavaオブジェクトは、HTTPセッションの期間中有効です。これらのサービスは、状態を保持するためOracle固有の拡張機能を備えています。これらの拡張機能のため、サービス・プロバイダが同じセマンティックを持つスコープを用意しないかぎり、ステートフルOracleAS Web Servicesはその他のサービスとは相互運用できません。
OracleAS Web ServicesによってサポートされるステートフルWebサービスは、HTTPセッション・ベースです。
この項の内容は、次のとおりです。
JavaクラスからステートフルWebサービスを生成するための前提条件は、ステートレスWebサービスについて説明した前提条件と同じです。用意する必要がある情報およびファイルの詳細は、「前提条件」を参照してください。
次の手順では、WebServicesAssemblerを使用してJavaクラスからステートフルWebサービスを作成する方法について説明します。このサービスを実装したJavaオブジェクトは、HTTPセッションの期間中有効です。
assemble
コマンドを使用してWebServicesAssemblerを実行し、サービスのアーチファクトを生成します。assemble
の必須およびオプションの引数の詳細は、「assemble」を参照してください。 次に例を示します。
コマンドライン:
java -jar wsa.jar -assemble -appName counter -serviceName counterService -interfaceName oracle.demo.count.CounterInterface -className oracle.demo.count.CounterImpl -input build/classes/service -output build -ear dist/counter.ear -recoverable true -timeout 30 -uri counterService
Antタスク:
<oracle:assemble appName="counter" serviceName="counterService" input="build/classes/service" output="build" ear="dist/service.ear" recoverable="true" timeout="30" > <oracle:porttype interfaceName="oracle.demo.count.CounterInterface" className="oracle.demo.count.CounterImpl"> <oracle:port uri="counterService" /> </oracle:porttype> <oracle:classpath> <pathelement path="${wsdemo.common.class.path}"/> <pathelement location="build/classes/client"/> </oracle:classpath> </oracle:assemble>
このコマンドおよびAntタスクの説明:
assemble
: ボトムアップ方式でJavaファイルからWebサービスを生成します。このコマンドにより、デプロイ可能なアーカイブを作成するために必要なすべてのファイルが作成されます。「assemble」を参照してください。
appName
: アプリケーションの名前を指定します。この名前は、通常context
やuri
などの他の引数のベース値として使用されます。「appName」を参照してください。
serviceName
: サービス名を指定します。「serviceName」を参照してください。
interfaceName
: サービス・エンドポイント・インタフェース(SEI)を格納するJavaクラスの名前(パッケージ名を含む)を指定します。「interfaceName」を参照してください。
className
: Webサービスの実装クラスのクラス名(パッケージ名を含む)を指定します。「className」を参照してください。
input
: WEB-INF/classes
にコピーされるクラスを格納するJARまたはディレクトリを指定します。この引数は、WebServicesAssemblerによって使用されるクラスパスに追加されます。「input」を参照してください。
output
: 生成されるファイルを格納するディレクトリを指定します。そのディレクトリが存在しない場合は、作成します。「output」を参照してください。
ear
: 生成されるEARファイルの名前と位置を指定します。「ear」を参照してください。
recoverable
: セッション状態のアプリケーションをリカバリ可能にするかどうかを指定します。この引数は、サービスが、セッション・スコープを持つステートフルWebサービスとして公開されているときにのみ使用できます。「recoverable」を参照してください。
timeout
: セッションの開始からタイムアウトまでの秒数を指定します。「timeout」を参照してください。
uri
: Webサービスに使用するURIを指定します。「uri」を参照してください。
このコマンドは、デプロイ可能なアーカイブを作成するために必要なすべてのファイルを生成します。出力のbuild
ディレクトリには、EARファイルおよびJavaクラス用にそれぞれディレクトリが生成されます。dist
ディレクトリには、J2EE Webサービスに準拠したアプリケーションEARファイルであるcounter.ear
が格納されます。
コマンドラインのtimeout
引数に注意してください。この引数は、HTTPセッションの開始からタイムアウトまでの秒数を示すのみでなく、暗黙的にsession
引数をtrue
に設定します。session
がtrue
である場合は、サービス・インスタンスがHTTPセッションにおいて保持されます。
recoverable
引数は、このステートフル・アプリケーションを分散可能とする必要があることを指定します。リカバリ可能とは、対話しているノードがダウンした場合に、サービスが分散環境内でリカバリできることを意味します。つまり、Webサービスの状態も分散可能である必要があります。
通常の方法でEARファイルをOC4Jの実行中インスタンスにデプロイします。EARファイルのデプロイの詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。次は、デプロイメント・コマンドのサンプルです。
java -jar <OC4J_HOME>/j2ee/home/admin_client.jar deployer:oc4j:localhost:port <user> <password> -deploy -file dist/counter.ear -deploymentName counter -bindWebApp default-web-site
次のリストは、このコード例で使用されているパラメータの説明です。
OracleAS Web Servicesでは、デプロイされたWebサービスごとにWebサービス・テスト・ページが提供されます。Webサービス・テスト・ページへのアクセスおよびその使用方法の詳細は、「Webサービス・テスト・ページの使用方法」を参照してください。
genProxy
コマンドを使用してWebServicesAssemblerツールを実行し、スタブ(クライアント・プロキシ)を生成します。J2SE環境向けのクライアント・サイド・コードの生成およびアセンブルの詳細は、第15章「J2SE Webサービス・クライアントのアセンブル」を参照してください。
genInterface
コマンドを使用してWebServicesAssemblerツールを実行し、J2EE Webサービス・クライアント用のマッピング・ファイルおよびサービス・エンドポイント・インタフェースを生成します。クライアント・サイド・コードの生成およびアセンブルの詳細は、第14章「J2EE Webサービス・クライアントのアセンブル」を参照してください。
たとえば、次のコマンドは、J2SEクライアント用に使用可能なクライアント・プロキシ(スタブ)を生成します。
コマンドライン:
java -jar wsa.jar -genProxy -output build/src/client/ -wsdl http://localhost:8888/counter/counterService?WSDL -packageName oracle.demo.count
Antタスク:
<oracle:genProxy wsdl="http://stadp54.us.oracle.com:8888/counter/counter?WSDL" output="build/src/client" packageName="oracle.demo.count"/>
このコマンドおよびAntタスクの説明:
genProxy
: J2SE Webサービス・クライアントから使用可能な静的プロキシ・スタブを作成します。「genProxy」を参照してください。
output
: 生成されるファイルを格納するディレクトリを指定します。そのディレクトリが存在しない場合は、作成します。「output」を参照してください。
wsdl
: WSDLドキュメントの絶対ファイル・パス、相対ファイル・パスまたはURLを指定します。「wsdl」を参照してください。
packageName
: JAX-RPCマッピング・ファイルにパッケージ名が宣言されていない場合に、生成されたクラス用に使用されるパッケージ名を指定します。「packageName」を参照してください。
このコマンドは、クライアント・プロキシを生成し、これらをディレクトリbuild/src/client
に格納します。クライアント・アプリケーションはこのスタブを使用して、リモート・サービスでの操作を起動します。genProxy
の必須およびオプションの引数の詳細は、「genProxy」を参照してください。
スタブ、DIIコールまたはエンドポイント・クライアント・インスタンス上でjavax.xml.rpc.Call.SESSION_MAINTAIN_PROPERTY
ランタイム・プロパティをtrue
に設定して、クライアントが確実にセッションに参加できるようにします。
このプロパティを直接設定するかわりに、OracleAS Web Servicesに用意されている、setMaintainSession(boolean)
メソッドがあるラッパー・クラスを使用することもできます。セッションを保持するには、このメソッドをtrue
に設定します。このようなプロパティの設定は、クライアント内でラッパーによって行います。たとえば、クライアント・コードで次のように入力します。
CounterServicePortClient c = new CounterServicePortClient(); //sets Maintain Session to true, as the endpoint is stateful. c.setMaintainSession(true);
クライアントをコンパイルする前に、クラスパス上にある適切なJARをリストします。クライアントのクラスパスで使用可能なすべてのJARファイルのリストについては、表A-2「クライアント・サイド・プロキシを使用するクライアントのクラスパス・コンポーネント」を参照してください。個々のJARをリストするかわりに、クライアントのクラスパスにクライアント側のJARとしてwsclient_extended.jar
を含めることができます。このJARファイルには、Webサービス・クライアントをコンパイルおよび実行するために必要なすべてのクラスが含まれます。これらのクラスは、表A-2にリストされている各JARファイルに含まれているものです。wsclient_extended.jar
およびクライアントのクラスパスの詳細は、「Webサービス・プロキシのクラスパスの設定」を参照してください。
ステートフルWebサービスのJava実装は、ステートレス・サービスの実装と同じ要件を満たす必要があります。
WebServicesAssemblerを使用すると、ステートフルJava実装に対するコール、セッションおよびエンドポイントの各スコープを定義できます。
call
スコープ: WebServicesAssemblerのcallScope引数をtrue
に設定すると、コールごとに新しいクラス・インスタンスが作成されます。インスタンスは、コールが終了するたびにガベージ・コレクションされます。callScope
のデフォルト値はfalse
です。
true
に設定すると、クラス・インスタンスはHTTPセッションに格納されます。これが適用されるのは、HTTPトランスポートの場合のみです。セッション・タイムアウトは、timeout
引数によってチューニングできます。 session
のデフォルト値はfalse
です。ただし、WebServicesAssemblerでtimeout
引数が設定されている場合は、session
は自動的にtrue
に設定されます。
ステートフルJava Webサービスの開発手順については、次の各項で説明します。
例7-3は、ステートフルWebサービスのCountInterface.java
インタフェースを示します。また、この例は、サービス・クラスがサービス・エンドポイント・インタフェースを直接実装する必要がないことも示しています。JAX-RPC 1.1の仕様に準拠するには、このインタフェースをパッケージに含める必要があります。また、このインタフェースはjava.rmi.Remote
を拡張して、そのメソッドでjava.rmi.RemoteException
オブジェクトをスローする必要があります。
package oracle.demo.count; import java.rmi.RemoteException; import java.rmi.Remote; public interface CounterInterface extends Remote { // gets the current counter value public int getCurrentCounter() throws RemoteException; }
Webサービスとして公開するインタフェースのメソッドを実装し、Javaクラスを作成します。通常、WebサービスのJavaクラスでは、1つ以上のパブリック・メソッドを定義します。JAX-RPC 1.1の仕様に準拠するには、この実装クラスをパッケージに含める必要があります。また、java.rmi.Remote
およびjava.rmi.RemoteException
をインポートする必要があります。
例7-4に、パブリック・クラスCounterImpl
を示します。このクラスは、カウントを初期化し、パブリック・メソッドgetCurrentCounter
を定義しています。
package oracle.demo.count; import java.rmi.RemoteException; import java.rmi.Remote; public class CounterImpl implements java.io.Serializable { private int counter = 0; public CounterImpl() { } public int getCurrentCounter() { System.out.println("Current counter value is: " + (++counter)); return (counter); } }
Javaクラスを公開するWebサービスのパッケージについては、「JavaクラスをベースにしたWebサービスのパッケージ化」を参照してください。
Oracle JDeveloperを使用して、J2EE準拠のJavaクラス・ファイルをWebサービスとして作成、変更およびデプロイできます。Oracle JDeveloperでJavaクラスを作成する場合、モデリング・ツールおよびウィザードを使用します。このウィザードを使用して、次のタスクを実行できます。
「JavaクラスからのWebサービスのアセンブル」を参照してください。
詳細は、次を参照してください。
|
![]() Copyright © 2006 Oracle Corporation. All Rights Reserved. |
|