Oracle Application Server Web Services開発者ガイド 10g(10.1.3.1.0) B31868-01 |
|
この章では、J2EEコンテナ内でのWebサービス・クライアントの開発方法を説明します。バージョン2.4のサーブレット、2.1のEJBまたは2.0のJSPアプリケーションなど、J2EE 1.4互換コンテナの任意のコンポーネントを、J2EE Webサービス・クライアントとして使用できます。
この章の内容は、次のとおりです。
J2EEプラットフォームにより、クライアント・アプリケーションがWebサービスにアクセスするための環境が提供されます。J2EE環境では、クライアント・サイドからのWebサービスへのアクセス情報は、デプロイメント・ディスクリプタによって定義します。このアクセス情報はデプロイ時に変更できます。さらに、J2EEプラットフォームは、Webサービスへのアクセスの作成および初期化を支援します。
J2EE Webサービス・クライアントは、宣言的なセキュリティ、トランザクションおよびインスタンス管理など、J2EEプラットフォームのメリットを継承します。プラットフォームの持つこれらの特性と一緒にOracleAS Web Servicesの管理フレームワークを利用することで、SOAPのロギングおよび監査、WS-ReliabilityおよびWS-Securityを構成できるようになります。
J2SE Webサービス・クライアントとは異なり、J2EEクライアントはOC4Jコンテナ内に存在し、OC4Jコンテナによって管理されます。プロキシ・コードの生成やパッケージ化は不要です。JSP、サーブレットおよびEJBに容易に埋め込んで移植できる、Webサービス・アクセス用のクライアント・アプリケーションを構築できます。コンテナ管理の永続性(CMP)、Bean管理の永続性(BMP)およびメッセージドリブンBean(MDB)などのEJB変数が、Webサービス・エンドポイントをコールアウトできます。
必要な情報: 次の各項には、J2EE Webサービス・クライアントのアセンブルに必要な手順が含まれています。
オプションの情報: 次の各項には、作成するクライアントのタイプまたはクライアントが使用する機能に依存する、オプションの情報が含まれる場合があります。
開始する前に、次のファイルと情報を用意してください。
WebServicesAssemblerツールを使用して、サービス・エンドポイント・インタフェースおよびJ2EE Webサービス・クライアントをアセンブルします。次に、デプロイメント・ディスクリプタを編集し、Webサービスへのアクセス情報を追加します。次の手順でこれらのタスクを詳細に説明します。
genInterface
コマンドに入力します。 次の例では、HelloService.wsdl
を使用して、HelloInterface
をoracle.demo.hello
パッケージに生成します。
コマンドライン:
java -jar wsa.jar -genInterface -wsdl HelloService.wsdl -output build -packageName oracle.demo.hello
Antタスク:
<oracle:genInterface wsdl="${etc.web1.dir}/HelloService.wsdl" output="build" packageName="oracle.demo.hello" />
このコマンドおよびAntタスクの説明:
genInterface
: 各ポート・タイプのサービス・エンドポイント・インタフェースと、WSDLに定義された複合型に対応するJava値タイプ・クラス(Bean)を作成します。また、XMLスキーマ型とJava値タイプ・クラス間のマッピングを記述するJAX-RPCマッピング・ファイルも作成されます。「genInterface」を参照してください。
wsdl
: WSDLドキュメントの絶対ファイル・パス、相対ファイル・パスまたはURLを指定します。「wsdl」を参照してください。
output
: 生成されるファイルを格納するディレクトリを指定します。そのディレクトリが存在しない場合は、作成します。「output」を参照してください。
packageName
: JAX-RPCマッピング・ファイルにパッケージ名が宣言されていない場合に、生成されたクラス用に使用されるパッケージ名を指定します。「packageName」を参照してください。
<service-ref>
要素を追加します。この要素には、Webサービスへのアクセス情報のすべてが取得されます。<service-ref>
要素およびそのサブ要素のサンプルは、「J2EE Webサービス・クライアント情報のデプロイメント・ディスクリプタへの追加方法」を参照してください。
クライアントがJAX-RPCハンドラの形式でのメッセージ処理も行う場合は、これらのハンドラもデプロイメント・ディスクリプタに追加しておく必要があります。デプロイメント・ディスクリプタへのハンドラ情報の追加の詳細は、「メッセージ処理用JAX-RPCハンドラのデプロイメント・ディスクリプタへの追加方法」を参照してください。
たとえば、EJBの場合は、WSDLをMETA-INF/wsdl/
にコピーし、JAX-RPCマッピング・ファイルおよびejb-jar.xml
やorion-ejb-jar.xml
などのデプロイメント・ファイルはMETA-INF
にコピーします。サーブレット、EJBまたはJSP Webサービス・クライアントの各ファイルの位置は、「J2EEクライアントのパッケージ構造の概要」を参照してください。
現行のツール・セットではJ2EE Webサービス・クライアントをパッケージできません。J2EE Webサービス・クライアントは手動でパッケージする必要があります。パッケージ方法の詳細は、「J2EEクライアントのパッケージ構造の概要」を参照してください。
注意
EJB、JSPまたはその他のJ2EEクライアントをデプロイするには、次のステップに従います。アプリケーション・クライアントをデプロイする場合は、これらのステップをスキップし、「アプリケーション・クライアント・モジュールのデプロイと実行の手順」に進みます。
java -jar oc4j.jar
java -jar admin_client.jar deployer:oc4j:<oc4jHost>:<oc4jPort> <adminID> <adminPassword> -deploy -file .\client\myClient.ear -deploymentName myClient -bindWebApp default-web-site
oc4jHost
およびoc4jPort
変数は、OC4Jサーバーのホスト名およびポート番号です。adminID
およびadminPassword
は、OC4Jサーバーのユーザー名およびパスワードです。次は、-deploy
スイッチのサブスイッチです。
アプリケーション・クライアントを実行する場合は、「アプリケーション・クライアント・モジュールのデプロイと実行の手順」を参照してください。
J2EEコンポーネントのデプロイメント・ディスクリプタを編集し、コンポーネントがWebサービス・エンドポイントにアクセスするための情報を追加する必要があります。
META-INF/ejb-jar.xml
デプロイメント・ディスクリプタを編集します。
WEB-INF/web.xml
デプロイメント・ディスクリプタを編集します。
META-INF/application-client.xml
デプロイメント・ディスクリプタを編集します。
デプロイメント・ディスクリプタを編集し、<service-ref>
要素を追加します。この要素を追加することで、EJB、JSPまたはサーブレットを、リモートWebサービスを起動可能なWebサービス・クライアントとして使用できます。<service-ref>
要素およびそのサブ要素には、Webサービスへのアクセス情報がすべて取得されます。この情報には、WSDLおよびマッピング・ファイルの位置、サービス・インタフェース、サービス・ポート、サービス・ポートのサービス・エンドポイント・インタフェースなどがあります。<service-ref>
要素に格納される可能性のある情報の詳細は、service-ref
(J2EEクライアント)スキーマを参照してください。
http://java.sun.com/xml/ns/j2ee/j2ee_web_services_client_1_1.xsd
例14-1は、MyHelloService
Webサービス用のweb.xml
デプロイメント・ディスクリプタに追加された、サンプルの<service-ref>
要素を示します。この例に含まれる各<service-ref>
サブ要素を、表14-1で説明します。この<service-ref>
のサンプルでは、スキーマで使用可能なすべてのWebサービス・アクセス情報のサブセットのみが使用されている点に注意してください。
<service-ref> <service-ref-name>service/MyHelloServiceRef</service-ref-name> <service-interface>javax.xml.rpc.Service</service-interface> <wsdl-file>WEB-INF/wsdl/HelloService.wsdl</wsdl-file> <jaxrpc-mapping-file>WEB-INF/HelloService-java-wsdl-mapping.xml </jaxrpc-mapping-file> <service-qname xmlns:service-qname_ns__="http://hello.demo.oracle/"> service-qname_ns__:HelloService</service-qname> <port-component-ref> <service-endpoint-interface>oracle.demo.hello.HelloInterface </service-endpoint-interface> <port-component-link></port-component-link> </port-component-ref> </service-ref>
表14-1で、このサンプル内で使用されている<service-ref>
サブ要素を説明します。
service-refサブ要素 | 説明 |
---|---|
<jaxrpc-mapping-file> |
JAX-RPCマッピング・ファイルの完全修飾パスを指定します。 |
<port-component-link>(オプション) |
Webサービスをクライアントと同じモジュールに実装してある場合は、この要素を追加することでサービスにアクセスできます。この要素の詳細は、「同じモジュール内のクライアントからのWebサービスへのアクセス方法」を参照してください。 |
<port-component-ref> |
コンテナへのクライアントの依存性を宣言します。この依存性はサービス・エンドポイント・インタフェースをWSDLポートに解決するために必要です。このサブ要素は、オプションとして、サービス・エンドポイント・インタフェースと特定のポート・コンポーネントの関連付けも行います。コンテナは、 |
<service-endpoint-interface> |
WSDLポートのサービス・エンドポイント・インタフェースとなる完全修飾Javaクラスを指定します。 |
<service-interface> |
クライアントが依存するJAX-RPCサービス・インタフェースの完全修飾クラス名を指定します。ほとんどの場合、値として |
<service-qname> |
サービスのサービス |
<service-ref-name> |
クライアントによって割り当てられるJNDIパスおよびサービス名を指定します。 |
<wsdl-file> |
WSDLファイルの完全修飾パスを指定します。 |
アプリケーション・クライアント・モジュールをデプロイおよび実行するには、次の手順に従ってください。EJB、JSPまたはその他のJ2EEクライアントの場合とは異なり、生成されるdeployment-cache.jar
を格納するディレクトリを指定する必要があります。また、実行コマンドにdeployment-cache.jar
の位置を指定することも必要です。
java -jar oc4j.jar
次は、デプロイメント・コマンドのサンプルです。
java -jar admin_client.jar deployer:oc4j:<oc4jHost>:<oc4jPort> <adminID> <adminPassword> -deploy -file .¥client¥myAppClient.ear -deploymentName myAppClient -deploymentDirectory C:¥home¥myDir
このコマンドは、deployment-cache.jar
ファイルを作成し、C:¥home¥myDir
に格納します。
oc4jHost
、oc4jPort
、adminID
、adminPassword
の各変数、および-deploy
のfile
およびdeploymentName
サブスイッチの詳細は、「J2EE Webサービス・クライアントのアセンブル手順」ステップ4bを参照してください。
deploymentDirectory
サブスイッチには、OC4Jによるdeployment-cache.jar
のデプロイ先となる位置を指定します。この例では、OC4JはC:¥home¥myDirにこのファイルをデプロイします。このサブスイッチを指定しない場合は、OC4JはアプリケーションをディレクトリOC4J_HOME
/application-deployments/
にデプロイします。空の文字列(" ")を指定すると、OC4Jはアプリケーションをデプロイするたびに、常にEARファイルからデプロイ構成を読み取ります。
deployment-cache.jar
の位置を含めておく必要があります。次は、実行コマンドのサンプルです。
java -classpath .:C:¥home¥myDir¥deployment-cache.jar:'oc4jclient.jar' :appclient.jar oracle.myappclient.classname
このサンプルでは、appclient.jar
にクラスoracle.myappclient.
classnameが含まれているものと想定しています。
Oracle Application Serverがクライアントと同じモジュールに実装されているWebサービスにアクセスできるようにするには、クライアントのデプロイメント・ディスクリプタの<service-ref>
句に<port-component-link>
要素を追加し、構成system-application.xml
にPortComponentLinkResolver
プロパティを追加します。このタスクを、次の手順で簡単に説明します。
<port-component-link>
要素を、J2EEクライアントのデプロイメント・ディスクリプタの<service-ref>
句に追加します。このステップの詳細は、「J2EEクライアントのデプロイメント・ディスクリプタへのポート・コンポーネント・リンクの追加方法」を参照してください。
system-application.xml
サーバー構成ファイルに、PortComponentLinkResolver
プロパティを追加します。このファイルは、ディレクトリORACLE_HOME
/j2ee/home/config
にあります。 次の行をこのファイルに追加します。
<ejb-module id="PortComponentLinkResolver" path="../../../webservices/lib/wsserver.jar"/>
Webサービスをクライアントと同じコンテナに実装してある場合に、サービスにアクセスできるようにするには、J2EEクライアントのデプロイメント・ディスクリプタ(web.xml
、ejb-jar.xml
またはapplication-client.xml
)の<service-ref>
句に<port-component-link>
要素を追加します。
<port-component-link>
要素は、<port-component-ref>
を、サーバー・サイドのデプロイメント・ディスクリプタ内の特定ポート・コンポーネントにリンクします。<port-component-name>
要素は、サーバー・サイドのデプロイメント・ディスクリプタ、webservices.xml
内にあります。
次の各例はこの関係を示したものです。例14-2のwebservices.xml
フラグメントは、EJB InterModuleEjb
を公開するWebサービスのデプロイ構成を示します。このフラグメントでは、ポート・コンポーネント名はInterPC
です。例14-3に示すクライアント・サイドのデプロイメント・ディスクリプタでは、この名前が<service-ref>
句の<port-component-link>
要素から参照されています。この要素を使用することで、J2EEクライアントはWebサービスにアクセスできます。
これらの例では、WebサービスがJ2EE Webサービス・クライアントと同じコンテナで動作しているものと想定しています。
<webservices> <webservice-description> <webservice-description-name>InterModuleEjb</webservice-description-name> <wsdl-file>META-INF/wsdl/InterModuleService.wsdl</wsdl-file> <jaxrpc-mapping-file>META-INF/InterModuleService.xml</jaxrpc-mapping-file> <port-component> <port-component-name>InterPC</port-component-name> <wsdl-port xmlns:wsdl1="http://PortCompLink.org/ejb/inter">wsdl1:InterModuleSeiPort </wsdl-port> <service-endpoint-interface>oracle.demo.InterModuleSei </service-endpoint-interface> <service-impl-bean> <ejb-link>InterModuleEjb</ejb-link> </service-impl-bean> </port-component> </webservices>
例14-3は、クライアント・サイドのデプロイメント・ディスクリプタのフラグメントを示します。ここでは、サーバー・サイドのデプロイメント・ディスクリプタ内の<port-component-name>
要素の値が、<service-ref>
句の<port-component-link>
要素から参照されています。この要素を使用することで、クライアントはWebサービスにアクセスできます。
<port-component-link>
のポート・コンポーネント名の値には、接頭辞としてPortCompLinkEjb-ejb.jar#
が付けられている点に注目してください。この値は、EJB名を、EJB名が含まれているJARファイルの名前で修飾したものです。
<service-ref> <service-ref-name>service/portcomplink/inter</service-ref-name> <service-interface>javax.xml.rpc.Service</service-interface> <wsdl-file>META-INF/wsdl/InterModuleService.wsdl</wsdl-file> <jaxrpc-mapping-file>META-INF/InterModuleService.xml</jaxrpc-mapping-file> <port-component-ref> <service-endpoint-interface>oracle.demo.InterModuleSei </service-endpoint-interface> <port-component-link>PortCompLinkEjb-ejb.jar#InterPC</port-component-link> </port-component-ref> </service-ref>
<service-ref-mapping>
要素は、OC4J固有のデプロイメント・ディスクリプタ・ファイルであるorion-web.xml
、orion-ejb-jar.xml
またはorion-application-client.xml
の<orion-web-app>
要素のサブ要素として指定できます。このサブ要素によって、OC4Jによって実行時およびデプロイ時に生成される独自のWebサービス参照設定を定義します。この要素を使用して、次の情報を構成できます。
<service-ref-mapping>
要素は、標準のデプロイメント・ディスクリプタに含まれている<service-ref>
要素との組合せで使用します。<service-ref>
要素には、EJB、JSPまたはサーブレットを、リモートWebサービスを起動するためのWebサービス・クライアントとして使用するための情報を指定します。
<service-ref>
要素をweb.xml
、ejb-jar.xml
またはapplication-client.xml
ファイルのいずれかに指定した場合には、対応する<service-ref-mapping>
要素を、orion-web.xml
、orion-ejb-jar.xml
またはorion-application-client.xml
ファイルのいずれかに指定できる点に注意してください。
<service-ref-mapping>
要素によってサポートされる機能の詳細は、orion-web
、orion-ejb-jar
およびorion-application-client
の各XSDにインポートされているservice-ref-mapping-10_0.xsd
を参照してください。service-ref-mapping-10_0.xsdに値を設定するための、Oracle JDeveloperウィザードのようなツールは、現時点ではサポートされていません。スキーマを参照し、XMLファイルを手動で編集する必要があります。
最も単純なケースでは、<service-ref-mapping>
要素にデプロイメント情報のみを指定します。クライアントをマネージド・クライアントとして使用しない場合は、ランタイム要素つまりサービスのクオリティ要素を追加しないでください。マネージド・クライアントは、パフォーマンスの点で高負荷です。
例14-4には、固有のデプロイメント・ディスクリプタで使用できる<service-ref-mapping>
のサンプルが含まれます。この要素の階層がわかるように、サブ要素をすべて表示しています。このXMLサンプルの後に、サブ要素について説明した表が続きます。
... <service-ref-mapping name="service/MyJAXRPCTime"> <service-impl-class>oracle.demo.MyTime_Impl</service-impl-class> <wsdl-file final-location="file:/myhome/mytime/client-wsdl/MyJAXRPCTime.wsdl"> <wsdl-location wsdl-override-last-modified=19NOV> <service-qname namespaceURI="urn:oracle-ws" localpart="MyService" /> <stub-property> <name>...</name> <value>...</value> </stub-property> <call-property> <name>javax.xml.rpc.service.endpoint.address</name> <value>http://myhost:8888/time-ejb/timeport</value> </call-property> <port-info> <wsdl-port> <service-endpoint-interface>time.TimeService</service-endpoint-interface> <stub-property> <name>another.endpoint.address</name> <value>http://anotherhost:8888/time-ejb/timeport</value> </stub-property> <call-property> <name>...</name> <value>...</value> </call-property> <runtime>...</runtime> <operations> <operation name="echo"> <runtime> <auditing request="true" response="false" fault="false"/> <reliability><reject-non-reliable-messages value="false"/></reliability> ... </runtime> </operation> </operations> </port-info> </service-ref-mapping> ...
表14-2は、<service-ref-mapping>
のサブ要素の説明です。
要素名 | 説明 |
---|---|
<call-property> |
すべてのポートに適用可能な、コールのプロパティ値を定義します。これは、ポート名を指定せずにプロパティを指定できる便利な方法です。
|
<port-info> |
サービス参照のポートを定義します。 |
<service-impl-class> |
|
<service-qname> |
この要素はデプロイ時に導出され、Webサービスの |
<stub-property> |
すべてのポートに適用可能な、スタブのプロパティ値を定義します。これは、ポート名を指定せずにプロパティを指定できる便利な方法です。
|
<wsdl-file> |
WSDLファイルのデプロイ時生成名を定義します。この要素には、次の属性があります。 |
<wsdl-location> |
(オプション)WSDLドキュメントを指す有効なURLを指定します。URLを指定すると、デプロイ時にこのURLのWSDLドキュメントを、標準のデプロイメント・ディスクリプタで この要素には、次の属性があります。 |
表14-3は、<port-info>
要素のサブ要素の説明です。この要素は、サービス参照のポートの詳細を提供します。コンテナがコンテナ管理ポートの選択で使用するポートを、<service-endpoint-interface>
または<wsdl-port>
に指定します。両方を指定すると、<wsdl-port>
の値が使用されます。<wsdl-port>
や<service-endpoint-interface>
を指定しない場合は、<port-info>
プロパティの値が、すべての使用可能なポートに対して適用されます。
また、<port-info>
要素には、ポートおよびその操作に対して、使用可能なサービスのクオリティ機能を指定できるサブ要素も含めることができます。
要素名 | 説明 |
---|---|
<call-property> |
|
<operations> |
操作ごとに要素を1つずつ指定した、一連の要素を指定します。個々の操作は、 |
<runtime> |
参照先のWebサービスにより提供されるすべての操作に適用されるクライアント・サイドの、サービスのクオリティのランタイム情報(セキュリティまたは信頼性(あるいはその両方))を指定します。各機能の構成は、それぞれの子要素に指定します。 |
<service-endpoint-interface> |
WSDLポートのサービス・エンドポイント・インタフェースの完全修飾パスを指定します。コンテナは、このポートをコンテナ管理ポートの選択に使用します。 |
<stub-property> |
|
<wsdl-port> |
コンテナによりコンテナ管理ポートの選択に使用されるWSDL内ポート名を指定します。 コンテナ管理ポートの選択では、コンテナがインスタンスのコールを直接管理し、クライアントは、複数の異なるインスタンスへのアクセスに使用できる汎用ポートをリクエストします。この要素には、次の属性があります。 |
表14-4は、<operations>
要素の<operation>
サブ要素の説明です。
要素名 | 説明 |
---|---|
<operation> |
参照先のWebサービスにより提供される特定の操作に対する、クライアント・サイドのサービスのクオリティ構成を指定します。この構成の指定は、この要素の
この |
表14-5は、<operation>
要素の<runtime>
サブ要素の説明です。
要素名 | 説明 |
---|---|
<runtime> |
ポート内の個々の操作に対する、クライアント・サイドのサービスのクオリティ構成を指定します。サービスのクオリティ機能(セキュリティ、信頼性または監査(あるいはこれらの任意の組合せ))の各構成は、それぞれの子要素に指定します。 |
表14-6は、<stub-property>
および<call-property>
要素の、name
およびvalue
サブ要素の説明です。
J2EE Webサービス・クライアントは、JAX-RPCハンドラを使用することで、Webサービス・エンドポイントに関する追加のメッセージ処理機能を実現できます。たとえば、ハンドラを使用してSOAPメッセージを処理できます。
ハンドラ情報は、J2EE Webサービス・クライアントのデプロイメント・ディスクリプタ内で、<service-ref>
のサブ要素として入力する必要があります。<handler>
要素にハンドラ情報をカプセル化します。
この項の内容は、次のとおりです。
この項では、J2EEコンポーネントがWebサービスにアクセスできるようにする共通コードのいくつかについて説明します。実行時には、すべてのJ2EE Webサービス・クライアントが標準JNDIルックアップを使用し、Webサービスを検索します。次に、サーブレット、EJBまたはJSPで使用できるようにJNDIルックアップをコーディングする際の一般的な手順を示します。
Context ic = new InitialContext();
OC4Jコンテナにより、初期コンテキストのプロパティが設定されます。
lookup
メソッドを使用し、サービスを検索します。例14-5では、comp/env/service/MyHelloServiceRef
を使用してサービス参照を戻しています。このJNDIコールにより、service
オブジェクトへの参照が戻されます。
Service service = (Service) ic.lookup("java:comp/env/service/MyHelloServiceRef");
クライアントは、常にJNDIルックアップを使用してサービス実装にアクセスします。このルックアップにより、コンテナ管理のサービス参照が戻されます。これにより、コンテナは、クライアントに介入し、ロギング、セキュリティおよび管理などの追加サービス機能をクライアントに提供できます。
getPort
メソッドを使用し、サービス・ポートのハンドルを取得します。戻り値をインタフェース・タイプにキャストします。
HelloInterface helloPort = (HelloInterface) service.getPort(portQName, oracle.demo.hello.HelloInterface.class);
このステップはQName
が定義済であることが前提ですので、注意してください。次に例を示します。
QName portQName = new QName("http://hello.demo.oracle/", "HelloInterfacePort");
クライアントは、getPort
のかわりにservice
オブジェクトを使用し、Call
オブジェクトのハンドルを取得して、DIIによってWebサービスをコールすることもできます。
Call call = service.createCall(new QName("http://hello.demo.oracle/", "HelloInterfacePort");
resultFromService = helloPort.sayHello(name);
例14-5は、サーブレットまたはJSPのWebサービス・クライアントがWebサービスをルックアップするためのコードの例を示しています。
public String consumeService (String name) { ...... Context ic = new InitialContext(); Service service = (Service)ic.lookup("java:comp/env/service/MyHelloServiceRef"); // declare the qualified name of the port, as specified in the wsdl QName portQName= new QName("http://hello.demo.oracle/","HelloInterfacePort"); //get a handle on that port : Service.getPort(portQName,SEI class) HelloInterface helloPort = (HelloInterface) service.getPort(portQName,oracle.demo.hello.HelloInterface.class); //invoke the operation : sayHello() resultFromService = helloPort.sayHello(name); ..... }
J2EE Webサービス・クライアントは、構成ファイルまたはプログラムを使用して、ステートフルWebサービスを使用するように構成できます。
ステートフルWebサービスを使用するようにJ2EEクライアントを構成するには、適切なOracle固有デプロイメント・ディスクリプタ(orion-web.xml
、orion-ejb-jar.xml
またはorion-application-client.xml
)の<service-ref-mapping>
句を編集します。
<service-ref-mapping>
句に<stub-property>
要素を追加します。具体的には、その<name>
サブ要素にjavax.xml.rpc.session.maintain
プロパティを設定し、<value>
サブ要素にtrue
を指定します。
J2EE標準プロパティjavax.xml.rpc.session.maintain
の値を使用して、特定のサービス・エンドポイントでクライアントがセッションに参加するかどうかを設定します。このプロパティをtrue
に設定することは、クライアントにセッションを持たせることを意味します。
例14-6は、ステートフルWebサービス用のWebサービス・クライアント構成を示します。<stub-property>
の定義では、クライアントが、CycleCounterInterface
サービス・エンドポイントで特定されるポートでセッションに参加できるようになっています。<stub-property>
要素とその設定であるjavax.xml.rpc.session.maintain
を、太字で強調してあります。
<service-ref-mapping name="service/CycleCounter"> <port-info> <service-endpoint-interface>test.oracle.stateful.CycleCounterInterface</service-endpoin t-interface> <!-- set the javax.xml.rpc.session.maintain property to true for a stateful client --> <stub-property> <name>javax.xml.rpc.session.maintain</name> <value>true</value> </stub-property> <stub-property> <name>javax.xml.rpc.service.endpoint.address</name> <value>http://%J2EE_HOST%:%HTTP_PORT%/testsfWS-session/testsfWS-session</value> </stub-property> </port-info> </service-ref-mapping>
J2EEクライアントをプログラムで構成し、ステートフルWebサービスを使用できます。このような構成を行うには、スタブ、DIIコールまたはエンドポイント・クライアント・インスタンスにおいて、SESSION_MAINTAIN_PROPERTY
ランタイム・プロパティ(javax.xml.rpc.session.maintain
)をtrue
に設定して、クライアントがセッションに参加できるようにします。
たとえば、このプロパティの値を、javax.xml.rpc.Stub
の生成される実装_port
内で設定できます。
((Stub)__port)._setProperty(Stub.SESSION_MAINTAIN_PROPERTY, Boolean.valueOf (maintainSession));
このプロパティを直接設定するかわりに、OracleAS Web Servicesに用意されている、setMaintainSession(boolean)
メソッドがあるラッパー・クラスを使用することもできます。このメソッドをtrue
に設定すると、セッションが持たれます。このようなプロパティの設定は、クライアント内でラッパーによって行います。たとえば、クライアント・コードに次のように入力します。
HttpSoap11Client c = new HttpSoap11Client(); // client wrapper class c.setMaintainSession(true);
J2EEクライアントを静的に構成し、JMSトランスポート・コールを実行できます。このような構成を行うには、Webサービス用の適切なOracle固有J2EEクライアント用デプロイメント・ディスクリプタ・ファイル(orion-web.xml
、orion-ejb-jar.xml
またはorion-application-client.xml
)に、<service-ref-mapping>
句を追加します。この句の中で、次の各アイテムに対して、<stub-property>
要素をname
およびvalue
属性によって構成します。
<stub-property>
要素を、name
サブ要素をReplyToQueueName
API(oracle.webservices.transport.ReplyToQueueName
)に、value
サブ要素をReplyToキューのJNDI名に設定して、入力します。
<stub-property>
要素を、name
サブ要素をReplyToFactoryName
API(oracle.webservices.transport.ReplyToFactoryName
)に、value
サブ要素をReplyToファクトリのJNDI名に設定して、入力します。
<stub-property>
要素を、name
サブ要素をサービス・エンドポイント・アドレスAPI(javax.xml.rpc.service.endpoint.address
)に、value
サブ要素をサービス・エンドポイント・インタフェース・ファイルに設定して入力します。
例14-7は、サンプルの構成を示します。
<service-ref-mapping name="service/MyJMSService"> <stub-property> <name>oracle.webservices.transport.ReplyToQueueName</name> <value>jms/receiverQueue</value> </stub-property> <stub-property> <name>oracle.webservices.transport.ReplyToFactoryName</name> <value>jms/receiverQueueConnectionFactory</value> </stub-property> <stub-property> <name>javax.xml.rpc.service.endpoint.address</name> <value>/bank/soap12bank</value> </stub-property> </service-ref-mapping>
プロトコルがHTTP 1.1の場合、OracleAS Web Servicesでは、メッセージのチャンク転送エンコーディングが可能です。チャンク・データ転送は、J2SEスタブ、J2EEスタブおよびDII Webサービス・クライアントから起動できます。
チャンクを使用すると、ペイロードが小さなピースに分割されるので、パフォーマンスが向上します。これらのピースは、ケーブル中を、大きなペイロードよりも高速に送信できます。チャンク転送エンコーディングには、受信者が、自分がメッセージ全体を受信できたかどうかを確認するために必要なすべての情報が含まれます。チャンク転送エンコーディングは、トランスポート・レベルで実行されるため、Webサービス・コールの起動元またはサーバーによって検出および処理されることはありません。
チャンクの有効化およびチャンク・サイズの設定を行うには、oracle.webservices.ClientConstants
クラスの次のプロパティを、Stub
またはCall
オブジェクトに設定します。
DO_NOT_CHUNK
: このプロパティを設定しないか、またはtrue
に設定すると、チャンクはオフになります(デフォルト)。このプロパティをfalse
に設定すると、チャンクが有効になります。
CHUNK_SIZE
: チャンク・サイズをバイト単位で設定します。このプロパティを設定しない場合、デフォルトでチャンク・サイズは4096バイトになります。
例14-8は、クライアント・プロキシ・スタブ・コード内でのチャンクの設定およびチャンク・サイズのプロパティの設定を示しています。
import oracle.webservices.ClientConstants; ... ((OracleStub)port)._setProperty(ClientConstants.DO_NOT_CHUNK, true); ((OracleStub)port)._setProperty(ClientConstants.CHUNK_SIZE, 1024); ...
例14-9は、DIIクライアント・コード内でDO_NOT_CHUNK
およびCHUNK_SIZE
プロパティを使用してチャンク・サイズを1024バイトに設定するための方法を示しています。
import oracle.webservices.ClientConstants; ... ServiceFactory factory = ServiceFactory.newInstance(); Service service = factory.createService(new QName("http://whitemesa.net/wsdl/rpc-lit-test", "tns" ) ); QName stringType = new QName( "http://www.w3.org/2001/XMLSchema", "string"); Call call = service.createCall(); ... call.setProperty(ClientConstants.DO_NOT_CHUNK, false); call.setProperty(ClientConstants.CHUNK_SIZE, 1024); ...
デフォルトでは、OracleAS Web ServicesでアセンブルされたJ2EEクライアント(静的スタブまたはDII)は、UTF-8でエンコードされたSOAPエンベロープを持つリクエスト・メッセージを送信します。この動作をオーバーライドする場合は、次のOracle固有のプロパティを設定します。
oracle.webservices.ClientConstants.CHARACTER_SET_ENCODING
このプロパティは、javax.xml.rpc.Stub
またはjavax.xml.rpc.Call
オブジェクトに対して、setProperty
メソッドを使用して適用できます。
CHARACTER_SET_ENCODING
プロパティの値は、java.lang.String
またはjava.nio.charset.Charset
型のいずれかを使用できます。サポートされる文字コード・セットは、背後で動作するJava Virtual Machine(JVM)に依存します。JVMでサポートされる文字コードのリストを取得するには、Charset.availableCharsets
メソッドを使用します。Charset.availableCharsets
メソッドの詳細は、java.nio.charset.Charset
クラスのJavadocツール出力を参照してください。
また、このプロパティは、J2SE Webサービス・クライアント用にも使用できます。
例14-10は、SOAPエンベロープで使用する文字コードとしてShift_JIS
を設定したスタブ・クライアント・コードを示します。
import oracle.webservices.ClientConstants; ... ((OracleStub)port)._setProperty(ClientConstants.CHARACTER_SET_ENCODING, "Shift_JIS"); ...
例14-11は、SOAPエンベロープで使用する文字コードとしてShift_JIS
を設定したDIIクライアント・コードを示します。
import oracle.webservices.ClientConstants; ... ServiceFactory factory = ServiceFactory.newInstance(); Service service = factory.createService(new URL("path to wsdl"), new QName("service namespace", "service name" ) ); Call call = service.createCall(); call.setProperty(ClientConstants.CHARACTER_SET_ENCODING, Charset.forName("Shift_JIS")); ...
Oracle JDeveloperは、WebアプリケーションおよびEJBクライアント・ファイルに対して標準パッケージ構造を作成します。この項では、クライアントEARファイルのコンテンツのカスタマイズが必要な場合のために、この構造を説明します。
この項では、サーブレットまたはWebアプリケーション・クライアントのパッケージ化について説明します。デプロイメント・ディスクリプタ内のいくつかの要素の値には、EARファイル内でのファイル名および格納位置が反映されます。EARファイルの内容を変更した場合は、デプロイメント・ディスクリプタの内容の変更が必要になります。
サーブレットまたはWebアプリケーション・クライアントは、<ear_file_name
>.ear
という名前のEARファイルにパッケージ化されます。EARファイルでは、トップレベルにマニフェスト・ファイルおよびapplication.xml
ファイルのためのMETA-INF
ディレクトリ、サーブレットまたはWebアプリケーション・ファイル、JAX-RPCマッピング・ファイル、WSDLファイルおよびデプロイメント・ディスクリプタのための<war_file_name
>.war
ファイルがあります。例14-12は、EARファイルの標準パッケージの構造を示します。
./META-INF ./MANIFEST.MF ./application.xml ./<war file
>.war ./WEB-INF/ /orion-web.xml /web.xml /wsdl/<wsdl file name
>.wsdl /<mapping file>.xml /classes /class files /lib /.jar files ./*.jsp or html files
この項では、J2EE標準デプロイメント・ディスクリプタweb.xml
、サーブレットまたはWebアプリケーションのためのOC4Jデプロイメント・ディスクリプタorion-web.xml
、およびクライアントEARファイルのパッケージの構造の間の関係について説明します。クライアントEARファイルの構造または内容を編集すると、デプロイメント・ディスクリプタの内容も編集が必要になるため、これらの関係は重要です。
クライアント情報は、web.xml
の<service-ref>
要素に指定します。この要素には、サーブレットまたはJSPの内部からルックアップおよび使用できるWebサービスの情報を指定します。たとえば、次のものの位置を指定します。WSDL(<wsdl-file>
)、JAX-RPCマッピング・ファイル(<jaxrpc-mapping-file>
)、JNDIルックアップで使用するサービス・インタフェース(<service-ref-name>
)、サービス・インタフェース・クラス(<service-interface>
)およびサービス・エンドポイント・インタフェース(<service-endpoint-interface>
)。web.xml
の<service-ref-name>
は、orion-web.xml
の<service-ref-mapping>
要素の属性としても指定される点に注意してください。EARの前述したアイテムの名前および位置を変更する場合は、デプロイメント・ディスクリプタも対応するように変更する必要があります。
関連項目
|
例14-13は、サーブレットまたはWebアプリケーション・クライアントのためのweb.xml
の内容を示しています。<service-ref>
要素を太字で強調してあります。
<web-app> <servlet> <servlet-name>consumer</servlet-name> <servlet-class>oracle.ServiceConsumerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>consumer</servlet-name> <url-pattern>/consumer</url-pattern> </servlet-mapping> <service-ref> <service-ref-name>service/MyHelloServiceRef</service-ref-name> <service-interface>javax.xml.rpc.Service</service-interface> <wsdl-file>WEB-INF/wsdl/HelloService.wsdl</wsdl-file> <jaxrpc-mapping-file>WEB-INF/HelloService-java-wsdl-mapping.xml</jaxrpc-mapping-file> <service-qname xmlns:service-qname_ns__="http://hello.demo.oracle/">service-qname_ns__:HelloService</s ervice-qname> <port-component-ref> <service-endpoint-interface>oracle.demo.hello.HelloInterface</service-endpoint-interfac e> </port-component-ref> </service-ref> </web-app>
例14-14は、Webアプリケーションおよびサーブレットのための、OC4J固有のorion-web.xml
デプロイメント・ディスクリプタの内容を示しています。<service-ref-mapping>
要素を太字で強調してあります。
<orion-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-web-10_0.x sd"> <service-ref-mapping name="service/MyHelloServiceRef"> <!-- stub property applicable across all ports --> <stub-property> <name>javax.xml.rpc.service.endpoint.address</name> <value>http://localhost:8888/hello/HelloService</value> </stub-property> </service-ref-mapping> </orion-web-app>
この項では、EJBクライアントのパッケージ化について説明します。デプロイメント・ディスクリプタ内のいくつかの要素の値には、EARファイル内でのファイル名および格納位置が反映されます。EARファイルの内容を変更した場合は、デプロイメント・ディスクリプタの内容の変更が必要になります。
EJBクライアントは、<ear_file_name
>.ear
という名前のEARファイルにパッケージ化されます。EARファイルでは、トップレベルにマニフェスト・ファイルおよびapplication.xml
ファイルのためのMETA-INF
ディレクトリ、EJBクラス・ファイル、および<ejb_jar_file_name
>.jar
ファイルがあります。JARファイルには、JARマニフェスト・ファイル、JAX-RPCマッピング・ファイル、WSDLファイルおよびデプロイメント・ディスクリプタがあります。例14-15に、EJBクライアントのEARファイルのパッケージの構造を示します。
./META-INF ./MANIFEST.MF ./application.xml ./<ejb jar file name>.jar ./class files ./META-INF/ /MANIFEST.MF /ejb-jar.xml /orion-ejb-jar.xml /wsdl/<wsdl file name>.wsdl /<mapping file>.xml
この項では、J2EE標準デプロイメント・ディスクリプタejb-jar.xml
、サーブレットまたはWebアプリケーションのためのOC4Jデプロイメント・ディスクリプタorion-ejb-jar.xml
、およびEJBクライアントEARファイルのパッケージの構造の間の関係について説明します。クライアントEARファイルの構造または内容を編集すると、デプロイメント・ディスクリプタの内容も編集が必要になるため、これらの関係は重要です。
クライアント情報は、ejb-jar.xml
の<service-ref>
要素に指定します。この要素には、Webサービス・クライアントとして使用できるサーブレットまたはWebアプリケーションの情報を指定します。たとえば、次のものの位置を指定します。WSDL(<wsdl-file>
)、JAX-RPCマッピング・ファイル(<jaxrpc-mapping-file>
)、JNDIルックアップで使用するサービス・インタフェース(<service-ref-name>
)、サービス・インタフェース・クラス(<service-interface>
)およびサービス・エンドポイント・インタフェース(<service-endpoint-interface>
)。ejb-jar.xml
の<service-ref-name>
は、orion-ejb-jar.xml
の<service-ref-mapping>
要素の属性としても指定される点に注意してください。EARの前述したアイテムの名前および位置を変更する場合は、デプロイメント・ディスクリプタも対応するように変更する必要があります。
関連項目
|
例14-16は、EJBクライアント用のejb-jar.xml
の内容を示しています。<service-ref>
要素を太字で強調してあります。
<ejb-jar> <display-name>serviceConsumerEJB</display-name> <enterprise-beans> <session> <ejb-name>ServiceConsumer</ejb-name> <home>oracle.ServiceConsumerHome</home> <remote>oracle.ServiceConsumerRemote</remote> <ejb-class>oracle.ServiceConsumerBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> <service-ref> <service-ref-name>service/MyHelloService</service-ref-name> <service-interface>javax.xml.rpc.Service</service-interface> <wsdl-file>META-INF/wsdl/HelloService.wsdl</wsdl-file> <jaxrpc-mapping-file>META-INF/HelloService-java-wsdl-mapping.xml</jaxrpc-mapping-file> <service-qnamexmlns:ns="http://hello.demo.oracle/">ns:HelloService</service-qname> <port-component-ref> <service-endpoint-interface>oracle.demo.hello.HelloInterface</service-endpoint-interfac e> </port-component-ref> </service-ref> </session> </enterprise-beans> </ejb-jar>
例14-17は、Webアプリケーションおよびサーブレットのための、OC4J固有のorion-ejb-jar.xml
デプロイメント・ディスクリプタの内容を示しています。<service-ref-mapping>
要素を太字で強調してあります。
<orion-ejb-jar> <enterprise-beans> <session-deployment name="ServiceConsumer"> <service-ref-mapping name="service/MyHelloService"> <stub-property> <name>javax.xml.rpc.service.endpoint.address</name> <value>http://localhost:8888/hello/HelloService</value> </stub-property> </service-ref-mapping> </session-deployment> </enterprise-beans> </orion-ejb-jar>
「J2EE Webサービス・クライアントのアセンブル」を参照してください。
詳細は、次を参照してください。
|
![]() Copyright © 2006 Oracle Corporation. All Rights Reserved. |
|