ヘッダーをスキップ
Oracle Application Server Web Servicesアドバンスト開発者ガイド
10g(10.1.3.1.0)
B31869-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

10 Webサービス・プロバイダの使用方法

この章では、Oracle Application Server Web ServicesプロバイダAPIの使用方法を説明します。プロバイダAPIを使用すると、JAX-RPCのような特定のサービス・エンドポイント実装計画に関係のない、Webサービス・エンドポイント用のカスタム処理ロジックを定義できます。プロバイダ・モデルを使用すると、複数のエンドポイントに対して共通の機能を提供できます。プロバイダ・モデルを使用すると、同じ機能を複数のWebサービスに組み込むのでなく、ロジックをランタイムに直接追加できます。

プロバイダの概要

プロバイダを使用すると、JAX-RPC関連のフレームワークを使用せずに、メッセージ・ペイロードの検証および解析に独自のメカニズムを柔軟に選択できます。OC4Jコンテナ内で実行されるため、プロバイダは、スキーマ検証、セキュリティおよび信頼性などのコンテナのサービスを利用できます。

プロバイダを使用する場合

標準のJAX-RPCエンドポイント実装を使用中にパフォーマンス不足が判明した場合には、エンドポイント実装としてのプロバイダの使用を選択できます。プロバイダはJAX-RPCフレームワークを使用しないため、データのマーシャリングおよびアンマーシャリングは実行されません。そのため、メッセージの検証および解析メカニズムに基づいて、メッセージが処理される前の解析およびシリアライゼーション処理が少ない可能性があります。

また、プロバイダではSOAPメッセージを直接処理できるため、コンテンツベースのルーティングなど、より複雑な処理を実行できます。たとえば、最終的な宛先にルーティングする前に、インバウンド・メッセージを(中間レベルの処理を行うために)多数の中間の宛先にルーティングできます。

プロバイダAPIの概要

oracle.webservices.providerパッケージのインタフェースおよびクラスを使用すると、独自のプロバイダを実装して使用し、SOAPメッセージを処理できます。

プロバイダ・インタフェース

プロバイダ・クラスには、oracle.webservices.provider.Providerインタフェースを実装する必要があります。これ以降の各項では、実装する必要のあるプロバイダ・インタフェースのメソッドの詳細を説明します。

initメソッド

public void init(ProviderConfig config) throws ProviderException;

initメソッドは、プロバイダがロードおよび初期化されるとコールされます。メソッドをコールできるのは、プロバイダのライフサイクル中に一度のみです。initメソッドに応じ、コンテナによってProviderConfigのインスタンスがプロバイダに渡されます。このインスタンスは、プロバイダに関連する構成情報を提供します。ProviderConfigインスタンスは、プロパティとServletContextを設定および取得するメカニズムを提供します。initおよびdestroyメソッドは、ServiceLifecycleインタフェースがJAX-RPCサービス・エンドポイント実装(SEI)クラスにライフサイクル・メカニズムを提供するのと同じように、プロバイダにライフサイクル・メカニズムを提供します。

プロバイダはProviderConfigインスタンスを使用して、プロパティの設定または取得を行います。プロパティがコンテキストに設定されている場合は、デプロイメント・ディスクリプタの対応する静的プロパティ・セットが上書きされます。たとえば、プロバイダでブールVALIDATION_SOAP_SCHEMAプロパティをtrueに設定し、コンテナでスキーマ検証を実行することができます。スキーマ検証は、WSDLが使用可能な場合にのみ実行できます。パススルー・モードでは実行できません。パススルー・モードでは、プロバイダ自体はエンドポイントとして公開されていません。VALIDATION_SOAP_SCHEMAプロパティのデフォルト値はfalseです。スキーマ検証は、SOAP本体の子要素のQName値に基づいています。

起動時にロードするという適切なディレクティブが発行されると(プロバイダ・アプリケーションWARファイルのweb.xmlファイルを使用するなど)、アプリケーションの起動時にinitメソッドがコールされます。

processMessageメソッド

public SOAPMessage processMessage(SOAPMessage request, MessageContext messageContext) throws ProviderException;

processMessageメソッドはプロバイダの主要なアクセス・メソッドで、SOAPリクエストがプロバイダ・インスタンスにディスパッチされるたびに起動されます。processMessageメソッドは、SOAPメッセージの処理ロジックを指定する場所です。SOAPプロトコルでは、このメソッドはSOAPMessageインスタンスを引数として使用します。プロバイダは、このSOAPMessageインスタンスから、SOAP本体、ヘッダーおよび添付ファイルなどのメッセージ・ペイロードの他の部分へのアクセス権を取得します。

processMessageメソッドは、MessageContextオブジェクトも使用します。メッセージ・コンテキストにより、特定のメッセージに対して有効なプロパティが定義されます。

このメソッドはSOAPMessageインスタンスを戻します。インスタンスがNULLでない場合は、基礎となるトランスポート・プロトコルによってサポートされていることを前提に、プロバイダにより送信者にレスポンスが戻されます。基礎となるトランスポート・プロトコルがJMSなどの一方向プロトコルの場合には、レスポンスの送信を試行すると、サーバーのログにエラーがスローされる原因となります。戻り値は、純粋な一方向コールの場合はNULL、リクエスト・レスポンス・コールの場合はNULL以外である必要があります。

destroyメソッド

public void destroy() throws ProviderException;

destroyメソッドは、ワーキング・セットからプロバイダを削除することをプロバイダ・インスタンスに通知するために、コンテナによって起動されます。メソッドがコールされると、プロバイダ・インスタンスは破棄されてガベージ・コレクションされます。

ProviderConfigクラス

このクラスには、プロバイダ・インスタンスの構成関連の情報が含まれています。情報には、独自のデプロイメント・ディスクリプタにもリストされている詳細が含まれます。

ProviderConfigのプロパティは、コンテナとの通信に使用されます。たとえば、ポリシー・オブジェクトの参照は、(プロバイダ実装によりProviderConfigインスタンスへの参照が、initメソッドの起動中に初期化された属性として維持されることを想定し)processMessage内のProviderConfigプロパティとして設定できます。また、プロバイダ・インスタンスのinitメソッドとしても設定できます。コンテナによりこのポリシー・オブジェクトが読み取られ、プロバイダ・インスタンスに適切な管理機能が適用されます。

次の項では、ProviderConfigクラスのメソッドおよびプロパティの詳細を説明します。

addServiceおよびremoveServiceメソッド

これらのメソッドにより、プロバイダ・インスタンスがコンテナでサービスの作成または削除を動的に実行することが可能になります。コンテナでは、テスト・ページの表示、リクエスト・メッセージのスキーマ検証およびWebサービス管理処理など、サービスに対して様々なタスクを実行できます。また、サービス登録処理も、コンテナによる登録済のサービスに対するWebサービス管理処理の実行を可能にします。

public void addService(String pathInfo, URL wsdlURL, QName wsdlPort, QName serviceName, Object policy) throws ProviderException;

public void addService(String pathInfo, InputStream wsdlStream, String wsdlBaseURI, QName wsdlPort, QName serviceName, Object policy) throws ProviderException;

public void addService(String pathInfo, Definition wsdl, QName wsdlPort, QName serviceName, Object policy) throws ProviderException;

public void removeService(String pathInfo);

ProviderConfigクラスのaddServiceおよびremoveServiceメソッドをプロバイダのinitおよびprocessMessageメソッドに起動し、それぞれ一意のURIを使用して、管理可能なサービス・エンドポイントを動的に追加および削除できます。コンテナにより、WSDLのリポジトリおよび受信リクエストのURIが含まれるWSDLのマップが、内部的に維持されます。また、Application Server Controlツールを使用してこれらの動的エンドポイントを管理すると、セキュリティ、信頼性、監査およびロギング機能を適用できます。プロバイダのMessageContextから使用可能なURIに基づいて、プロバイダは受信リクエストの処理を決定します。

addServiceおよびremoveServiceメソッドのどちらもpathInfoパラメータを使用します。このパラメータには、エンドポイントの起動時にクライアントによって送信されたURLに関連する外部パス情報が含まれます。外部パス情報はサーブレット・パス形式に準拠していますが、問合せ文字列より優先され、スラッシュ(/)文字で始まります。pathInfoパラメータをNULL値にはできませんが、空の文字列を設定することができます。

3つの形式のaddServiceメソッドが使用できます。これらはサービスへのWSDLロケーションの指定方法のみが異なります。

  • WSDLをURLとして指定する: この形式のaddServiceメソッドを使用すると、WSDLをURLとして指定できます(URL wsdlURL)。

  • WSDLを入力ストリームから読み込む: この形式のメソッドを使用すると、WSDLを入力ストリームから読み込めます(InputStream wsdlStream)。このメソッドでは、WSDLファイルのURIを指定するパラメータも使用できます(String wsdlBaseURI)。このパラメータの値は、プロバイダWSDL入力ストリームの相対インポートを解決するために使用します。

  • WSDLを Definition オブジェクトとして指定する: この形式のメソッドを使用すると、WSDLをjavax.wsdl.Definitionオブジェクトとして指定できます。エンドポイントを動的に構成して、すでに初期化したDefinitionオブジェクトがある場合に、この署名を使用します。たとえば、メモリーに作成したDefinitionオブジェクトが、ファイル・システムのWSDLを表していない場合などです。

addServiceメソッドでも、動的エンドポイントの管理機能を定義するpolicyパラメータが使用されます。policyパラメータは、例10-1にリストにされている構造に準拠するorg.w3c.dom.Elementである必要があります。この要素の定義は、oracle-webservices-10_0.xsdスキーマの型としてリストされています。

例10-1 provider-policy-typeの定義

<xsd:complexType name="provider-policy-type">
   <xsd:all>
      <xsd:element name="runtime" type="serverPortRuntimeType" minOccurs="0"/>
      <xsd:element name="operations" type="serverOperationsType" minOccurs="0"/>
   </xsd:all>
</xsd:complexType>

例10-2に、oracle-webservices.xmlデプロイメント・ディスクリプタで使用されるように、この型によって定義されている構造を示します。

例10-2 policy要素のXML構造

<policy>
   <runtime enabled="logging,auditing,security,reliability">
      <logging>…</logging>
      <security>…</security>
      <reliability>…</reliability>
   </runtime>
   <operations>
      <operation name="…" inputName="..." outputName="...">
         <runtime>
            <logging>…</logging>
            <auditing>…<auditing>
            <reliability>…</reliability>
         </runtime>
      </operation>
   </operations>
</policy>

PROPAGATE_DYNAMIC_ENDPOINTSプロパティ

クラスタ環境をサポートするために、ProviderConfigクラスでは、ブール型定数PROPAGATE_DYNAMIC_ENDPOINTSが使用できます。この定数は、次のプロパティを表します。

oracle.webservices.provider.propagateDynamicEndpoints

このプロパティにより、構成グループまたはクラスタ全体でアプリケーションのすべてのインスタンスからアクセス可能な動的エンドポイントをプロバイダで作成できます。このプロパティの使用方法の詳細は、「クラスタ環境でアクセス可能な動的なエンドポイントの作成方法」を参照してください。

MessageContextクラス

このクラスには、トランスポートに依存しないメッセージ・プロパティの定義が含まれています。これらのプロパティは、processMessageへのコールごとに更新されます。一連の標準の定数は、HTTPトランスポート用に定義されています。同じ名前のプロパティを、MessageContextクラスから使用できます。MessageContextクラスには、HTTP以外のトランスポート用に定義されている定数の定義も含まれています。

HTTPConstantsクラス

このクラスにより、コンテナがMessageContextに設定するHTTPプロトコルの明確に定義された一連のプロパティが提供されます。プロバイダ・インスタンスにより、これらのプロパティが上書きされないことが保証されます。

ProviderServletクラス

ProviderServletoracle.j2ee.ws.server.provider.ProviderServlet)は、プロバイダ・インスタンスへのリクエストのルーティングを処理します。デプロイ後、ProviderServletはSOAP over HTTPの受信リクエスト用のURLをリスニングします。サーブレットでSOAPメッセージを受信すると、ProviderServletによりプロバイダ・インスタンスのprocessMessageメソッドにディスパッチされます。

サーブレット・コンテナでプロバイダをホストしている場合は、プロバイダ・アプリケーションのweb.xmlデプロイメント・ディスクリプタ内の<servlet><servlet-class>サブ要素にこのサーブレットを指定します。サーブレットURLは、<url-pattern>要素に指定されています。

例10-3に、web.xmlファイルのフラグメントを示します。ファイルでは、<servlet-class>要素にProviderServletが指定されており、<url-pattern>要素にリスニングするURLである/LoggerServiceが指定されています。このURLパターンは、Webアプリケーションのコンテキスト・ルートに関連します。

<servlet-name>要素には、このエントリと、例10-5に示されているoracle-webservices.xml内のプロバイダ固有の情報との間のリンクが指定されます。

例10-3 ProviderServletおよびリスニングするURLを含むweb.xmlのフラグメント

...
<servlet>
     <servlet-name>LoggerProviderPort</servlet-name>
     <display-name>LoggerProviderPort</display-name>
     <description>JAX-RPC endpoint  Provider Port</description>
     <servlet-class>oracle.j2ee.ws.server.provider.ProviderServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
     <servlet-name>LoggerProviderPort</servlet-name>
     <url-pattern>/LoggerService</url-pattern>
</servlet-mapping>
...

ProviderServletの拡張

ProviderServletを拡張して、特定の使用方法に合うようその機能を調整できます。例10-4に、HTTP問合せ文字列に基づいて特定のリソースを取得できるようにするために、サーブレットのdoGetメソッドをどのように拡張できるかを示します。この場合、拡張したサーブレットによって問合せ文字列が処理されない際には、リクエストが親サーブレットのdoGetメソッドに渡されることに注意してください。受信のGETリクエストが処理されない場合の、superへのコールに注意してください。

例10-4 superへのコールを含むProviderServletメソッドの拡張

public class ExtendedProviderServlet extends ProviderServlet{

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String queryString = request.getQueryString();

        if ((queryString != null) &&
                (queryString.equalsIgnoreCase("someotherquery"))) {
            response.setContentType("text/html; charset=UTF-8");
            response.setStatus(HttpServletResponse.SC_OK);
            OutputStream outputStream = response.getOutputStream();
            OutputStreamWriter writer = new OutputStreamWriter(outputStream);
            writer.write( "<HTML><BODY>TEST RESPONSE</BODY></HTML>" );
            writer.close();
        } else {
            super.doGet(request, response);
...
}

サーブレットによって生成されたデフォルトのテスト・ページではなく、ProviderServletを拡張して、独自のテスト・ページ生成メカニズムを使用することもできます。

プロバイダ対応のWebサービスの作成方法

Webサービスがプロバイダを認識するようにするには、oracle-webservices.xmlおよびweb.xmlデプロイメント・ディスクリプタ編集して、プロバイダの情報を追加する必要があります。Oracle JDeveloperおよびApplication Server Controlツールでは、この情報の追加はサポートされていないため手動で編集する必要があります。

oracle-webservices.xmlデプロイメント・ディスクリプタの編集方法

Webサービスがプロバイダに対応できるようにするには、oracle-webservices.xmlデプロイメント・ディスクリプタに<provider-description>句を追加します。例10-5に、この句を含むoracle-webservices.xmlデプロイメント・ディスクリプタのフラグメントを示します。「oracle-webservices.xmlのプロバイダ要素」では、<provider-description>句に使用できる要素が説明されています。

例10-5 <provider-description>句を含むoracle-webservices.xmlのフラグメント

<oracle-webservices>
 <provider-description>
  <provider-description-name> some name</provider-description-name>
  <wsdl-file>/file location</wsdl-file>
  <wsdl-service-name xmlns:ns_="urn:oracle-ws">ns_:PhotoService
  </ wsdl-service-name>
  <provider-port>
             <provider-name>LoggerProviderPort</provider-name>
             <wsdl-port xmlns:ns_="urn:oracle-ws">ns_:PhotoIFPort</wsdl-port>
             <implementation-class>oracle.myprovider.JmsRetriever
             </ implementation-class >
            <servlet-link>LoggerProviderPort</servlet-link>
            <property name="connection-factory-name">
                jms/ws/mdb/theQueueConnectionFactory</property>
            <property name="queue-name">jms/ws/mdb/theQueue</property>
             <policy>
               <runtime enabled="logging,auditing,security,reliability">
                  <logging>…</logging>
                  <security>…</security>
                  <reliability>…</reliability>
               </runtime>
               <operations>
                  <operation name="..." inputName="..." outputName="...">
                     <runtime>
                        <logging>…</logging>
                        <auditing>…<auditing>
                        <reliability>…</reliability>
                     </runtime>
                 </operation>
               </operations>
            </policy>
  </provider-port>
 </provider-description>
</oracle-webservices>

oracle-webservices.xmlのプロバイダ要素

トップレベルのプロバイダ要素は<provider-description>です。この要素では、複数のプロバイダ・ポートを特定します。表10-1に、<provider-description>のサブ要素を説明します。<provider-port>サブ要素は必須で、それ以外はオプションです。

表10-1 <provider-description>要素のサブ要素

要素名 説明

<property>

定義されたすべてのプロバイダ・ポートで使用可能な、グローバルに定義されたプロパティを指定します。この要素はname属性を認識します。

<provider-description-name>

プロバイダの説明の名前。

<provider-port>

WSDLポートをWebサービス・インタフェースおよび実装と関連付けます(必須)。ポート名をコンポーネントとして定義します。ポートをサービス・エンドポイントとも関連付けます。wsdl-fileが存在しない場合、provider-portはパススルー・ゲートウェイを定義します。<provider-port>のサブ要素の詳細は、表10-2を参照してください。

<wsdl-file>

プロバイダに関連するWSDLの位置を指定します。

<wsdl-service-name>

WSDLのサービス名をプロバイダの名前と関連付けます。WSDLに2つ以上のサービスがある場合にはこの要素を指定する必要があります。WSDLのサービスが1つのみの場合はこの要素は不要です。


<provider-port>要素は、WSDLポートをWebサービス・インタフェースおよび実装と関連付けます。表10-2に、<provider-port>のサブ要素を説明します。<provider-name><implementation-class>および<servlet-links>サブ要素は必須で、それ以外はオプションです。

表10-2 <provider-port>要素のサブ要素

要素名 説明

<expose-testpage>

テスト・ページを公開するかどうかを指定します。デフォルトはtrueです。

<expose-wsdl>

WSDLを公開するかどうかを指定します。デフォルトはtrueです。

<implementation-class>

oracle.webservices.provider.Providerインタフェースを実装するクラスの名前を指定します(必須)。

<max-request-size>

正の値が指定されている場合は、サービスによりリクエストのサイズがその値(バイト単位)に制限されます。最大長を超えるリクエストはエラーの原因となります。デフォルトは、制限がないことを意味する-1です。

<policy>

プロバイダのWebサービス管理ポリシーを定義します。表10-3に、<policy>のサブ要素を説明します。

<property>

ローカルで定義されたプロパティ。ローカルおよびグローバルの両方に特定の名前のプロパティが定義されている場合、ローカルに定義されたプロパティがグローバルに定義されたプロパティより優先されます。

<provider-name>

プロバイダの名前(必須)。<provider-port>内の<provider-name>は、デプロイメント・ディスクリプタ内で一意である必要があります。

<servlet-link>

provider-port値を/WEB-INF/web.xmlファイルで定義されているサーブレット・エンドポイントと関連付けます(必須)。

<wsdl-port>

wsdl-file要素によって定義されているWSDLの特定のポートをプロバイダと関連付けます。WSDLファイルが定義されている場合はこの要素は不要です。


<policy>要素により、プロバイダのWebサービス管理ポリシーが定義されます。例10-2に、oracle-webservices.xmlデプロイメント・ディスクリプタで使用されるように、要素の構造を示します。表10-3に、<policy>要素のサブ要素を説明します。

表10-3 <policy>要素のサブ要素

要素名 説明

<operations>

操作ごとに要素を1つずつ指定した、一連の要素を指定します。<operation>サブ要素は、個々の操作に適用される管理を説明します。表10-4に、<operation>のサブ要素を説明します。

<runtime>

参照先のWebサービスにより提供されるすべての操作に適用されるサーバー・サイドの、サービスのクオリティのランタイム情報(セキュリティ、信頼性、監査およびロギング)を指定します。各機能の構成は、それぞれの子要素に指定します。


表10-4に、特定のプロバイダ操作に管理ポリシーを定義する<operation>要素を説明します。

表10-4 <operations>要素のサブ要素

要素名 説明

<operation>

参照先のWebサービスにより提供される特定の操作に対する、クライアント・サイドのサービスのクオリティ構成を指定します。構成はこの要素の<runtime>サブ要素に表示されます。

<operation>要素には次の属性があります。

  • input: WSDLの操作の入力名を含みます。

  • name: (必須)含まれるサービスのクオリティ構成を特定の操作に関連付けます。属性値は、WSDLの操作名と一致する必要があります。

  • output: WSDLの操作の出力名を含みます。



関連資料:

Webサービス管理ポリシーの詳細は、次のリソースを参照してください。


web.xmlデプロイメント・ディスクリプタの編集方法

Webサービスがプロバイダに対応できるようにするには、<servlet>句に<servlet-class>要素を、<servlet-mapping>句に<url-pattern>要素を追加します。例10-6に、これらの要素を含むweb.xmlデプロイメント・ディスクリプタを示します。これらの要素は、表10-5で説明されています。

例10-6 web.xmlデプロイメント・ディスクリプタのプロバイダ要素

<web-app><display-name/>
<description/>
<servlet>
     <servlet-name>LoggerProviderPort</servlet-name>
     <display-name>LoggerProviderPort</display-name>
     <description>JAX-RPC endpoint  Provider Port</description>
     <servlet-class>oracle.j2ee.ws.server.provider.ProviderServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
     <servlet-name>LoggerProviderPort</servlet-name>
     <url-pattern>/LoggerService</url-pattern>
</servlet-mapping>
</web-app>

web.xmlのプロバイダ要素

表10-5に、プロバイダと対応するためにweb.xmlに追加する必要のある要素を説明します。

表10-5 web.xmlのプロバイダ要素

要素名 説明

<servlet-class>

プロバイダ・サーブレットの名前を指定します。値はoracle.j2ee.ws.server.provider.ProviderServletか、「ProviderServletの拡張」で説明されているサブクラスのいずれかです。

<url-pattern>

Webサービスに使用するURLパターンを指定します。プロバイダ・サーブレットは、接頭辞がこの要素によって指定されているURLをリスニングします。URLパターンは、Webモジュールのプロバイダ・サーブレット・コンテキストに関連している必要があります。

動的なパススルー・モードの場合、<url-pattern>/*の必要があります。


プロバイダ管理のエンドポイントの登録

次の項では、Webサービスのプロバイダ管理のエンドポイントの登録方法を説明します。

静的なプロバイダ管理のエンドポイントの登録方法

次の手順では、Webサービスの静的なプロバイダ管理のエンドポイントを登録する方法の概要を説明します。各手順の詳細はリンク先を参照してください。

  1. プロバイダ・アプリケーションを記述し、Providerインタフェースを実装します。

    ProviderメソッドのinitprocessMessageおよびdestroyが実装されている必要があります。このインタフェースおよびそのメソッドの詳細は、「プロバイダ・インタフェース」を参照してください。

  2. oracle-webservices.xmlおよびweb.xmlデプロイメント・ディスクリプタを編集します。

    これらのディスクリプタの編集の詳細は、「プロバイダ対応のWebサービスの作成方法」を参照してください。

  3. 管理構成を指定します(オプション)。

    構成は、oracle-webservices.xmlデプロイメント・ディスクリプタのpolicy句として指定されます。例10-2に、デプロイメント・ディスクリプタのpolicy句の構造の例を示します。

  4. サービスをパッケージ化します。

    プロバイダ・クラスを含むサービスのパッケージ化の詳細は、「プロバイダWebアプリケーション・プロバイダ・クラスのパッケージ化方法」を参照してください。

動的なプロバイダ管理のエンドポイントの登録方法

ProviderConfig.addServiceメソッドを使用して追加のプロバイダ管理エンドポイントを登録し、それらのエンドポイントの管理機能を構成できます。たとえば、Business Process Execution Language(BPEL)プロセス・マネージャでは、このメカニズムを使用してそのプロセスを登録します。

動的なプロバイダ管理のエンドポイントの生成、パッケージ化およびデプロイは、「静的なプロバイダ管理のエンドポイントの登録方法」で説明されているのと同じ手順に従います。エンドポイントを登録するには、次に示す追加の手順を実行する必要があります。

  • providerConfig参照でaddServiceメソッドを起動してサービスを登録します。実装には、メソッドのpolicyパラメータを使用して、ポリシー構成を渡すオプションもあります。

例10-7に、プロバイダによりどのようにして動的にエンドポイントが追加されるかを示します。この例では、ADD_SERVICE_POLICYプロパティで、動的に追加されたエンドポイントのWebサービス管理機能が宣言されます(この場合はセキュリティ、監査および信頼性)。

プロバイダのinitメソッドに渡されたproviderConfig参照(config)で、addService起動が作成されます。addServiceメソッドのpolicyパラメータはXMLUtil.elementFromString(ADD_SERVICE_POLICY)を使用して、管理機能をサービスに渡します。WSDLがWARファイルの一部としてパッケージ化され、servletContextを使用してリソースとして取得されていることに注意してください。

例10-7 プロバイダ管理のエンドポイントの動的な登録

...
 private static final String ADD_SERVICE_POLICY = "<policy>\n" +
            "           <runtime enabled=\"security,auditing,reliability\">\n" +
            "              <security>\n" +
            "                   <inbound>\n" +
            "                      <verify-username-token password-type=\"PLAINTEXT\" require-nonce=\"false\" " +
            "                      require-created=\"false\"/>\n" +
            "                   </inbound>\n" +
            "              </security>\n" +
            "           </runtime>\n" +
            "       </policy>";
...
  public void init(ProviderConfig config) throws ProviderException {
...
URL wsdlURL1 = ((ServletContext)config.getContainerContext()).
                  getResource("/WEB-INF/wsdl/HelloService.wsdl");
...
        config.addService("/loanservice",wsdlURL1,new QName("http://hello.demo.oracle/","HttpSoap11"),null, XMLUtil.elementFromString( ADD_SERVICE_POLICY ));
...
}

クラスタ環境でアクセス可能な動的なエンドポイントの作成方法

クラスタ環境をサポートするために、ProviderConfigクラスでは、ブール型定数PROPAGATE_DYNAMIC_ENDPOINTSが使用できます。この定数は、次のプロパティを表します。

oracle.webservices.provider.propagateDynamicEndpoints

このプロパティにより、構成グループまたはクラスタ全体でアプリケーションのすべてのインスタンスからアクセス可能な動的エンドポイントを作成できます。

プロパティをtrueに設定すると、動的エンドポイントがOC4Jインスタンスで初期化された後にaddServiceを起動すると、エンドポイントはクラスタまたは構成グループ全体のアプリケーションのすべてのインスタンスにアクセス可能になります。

PROPAGATE_DYNAMIC_ENDPOINTSはオプションのプロパティで、oracle-webservices.xmlデプロイメント・ディスクリプタの<provider-port><property>サブ要素として設定できます。例10-8に、プロパティの使用方法を示します。

例10-8 PROPAGATE_DYNAMIC_ENDPOINTSプロパティ

<oracle-webservices>
 <provider-description>
  ...
   <provider-port>
        ...
        <property name="oracle.webservices.provider.propagateDynamicEndpoints">true</property>
       ...
   </provider-port>
 </provider-description>
</oracle-webservices>

プロバイダWebアプリケーション・プロバイダ・クラスのパッケージ化方法

プロバイダWebアプリケーションは、標準のWebアプリケーションと同じようにパッケージ化されます。プロバイダ・アプリケーションにWSDLファイルがある場合は、WARファイルの/WEB-INF/wsdlディレクトリに保存します。プロバイダ・クラスは、/WEB-INFの子である/classesディレクトリに保存します。例10-9に、プロバイダWebアプリケーションのEARファイルの内容を示します。

例10-9 プロバイダ・アプリケーションを含むWebサービスのパッケージ構造

provider.ear
    |__/META-INF/application.xml
    |__ provider-web.war
           |__/WEB-INF
                  |__web.xml
                  |__oracle-webservices.xml
                  |__/wsdl/<wsdl_name>.wsdl (optional)
                  |__/lib
                  |__/classes
                         |__ /provider instance classes

プロバイダWebアプリケーションのデプロイ

プロバイダWebアプリケーションは、(標準のデプロイ・メカニズムを使用して)J2EEサーブレット・コンテナにデプロイされます。コンテナには、プロバイダ・システム・クラス、およびランタイムで使用可能なサポート・クラスが必要です。


関連資料:

プロバイダWebアプリケーションのデプロイの詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。


プロバイダWebアプリケーションのデプロイのテスト

プロバイダWebアプリケーションのエンドポイントは、エンドポイントを静的に構成して使用または動的に追加することにより、公開できます。エンドポイントにより関連するWSDLファイルが指定されている場合は、Webサービスのテスト・ページを起動してデプロイが成功したかどうかを参照できます。エンドポイントによってWSDLファイルが指定されていない場合は、テスト・ページは使用できません。


関連資料:

Webサービスのホーム・ページの詳細は、『Oracle Application Server Web Services開発者ガイド』の「Webサービス・デプロイのテスト」を参照してください。


プロバイダ・エンドポイントの管理

静的または動的に追加されたプロバイダ・エンドポイントにより関連するWSDLファイルが指定されている場合は、Application Server ControlのWebサービス・インタフェースを使用して構成できます。詳細は、Application Server Controlのオンライン・ヘルプの「Webサービスのホーム・ページ」のトピックを参照してください。

プロバイダWebサービス・アプリケーションのクライアントのアセンブル

プロバイダWebサービス・アプリケーションにアクセスできるのは、標準のJ2SEまたはJ2EE静的スタブまたはDIIクライアントです。


関連資料:

Webサービス・クライアントのアセンブルの詳細は、次の章を参照してください。

  • J2EE Webサービス・クライアントの作成方法の詳細は、『Oracle Application Server Web Services開発者ガイド』の「J2EE Webサービス・クライアントのアセンブル」を参照してください。

  • J2SE Webサービス・クライアントのアセンブルの詳細は、『Oracle Application Server Web Services開発者ガイド』の「J2SE Webサービス・クライアントのアセンブル」を参照してください。


トラブルシューティング

「Webサービス・プロバイダの使用方法」を参照してください。

追加情報

詳細は、次を参照してください。