ヘッダーをスキップ

Oracle Application Server Web Services開発者ガイド
10g(10.1.3.1.0)

B31868-01
目次
目次
索引
索引

戻る 次へ

7 Javaクラスを使用したWebサービスのアセンブル

この章では、JavaクラスをベースにしてステートレスおよびステートフルなWebサービスをアセンブルする方法について説明します。アセンブリは、WebServicesAssemblerによってボトムアップ方式で実行されます。

ステートレスWebサービスは、複数のコールにわたったローカル状態の保持を行いません。ステートレスWebサービスは、.NETまたは任意のベンダーのWebサービスと相互運用可能です。サービスは、トランスポート・メカニズムとしてHTTPまたはJMSを使用できます。

対照的に、ステートフルWebサービスは、複数のコールにわたって状態を保持します。このため、メソッド起動の結果は、メソッドのスコープに応じて異なってきます。Oracle Application Server Web ServicesによってサポートされるステートフルWebサービスは、HTTPベースです。JavaクラスをベースとしたステートフルOracleAS Web Servicesは、Oracle固有の拡張機能を備えており、サービス・プロバイダが同じセマンティックを持つスコープを用意しないかぎり、その他のサービスとは相互運用できません。

この章の内容は、次のとおりです。

Webサービス用Javaクラスの記述に対する要件

JAX-RPCを使用し、Javaファイルを使用してWebサービスを作成するには、サービスとして公開するリモート・メソッドを定義するパブリック・インタフェースを用意する必要があります。また、このインタフェースの定義は、java.rmi.Remoteを拡張して、そのメソッドでjava.rmi.RemoteExceptionオブジェクトをスローする必要があります。また、このインタフェースはパッケージに含めることも必要です。

また、このパブリック・インタフェースを使用して、Webサービスで使用可能にするパブリック・メソッドのシグネチャ(または、サポートされているデータ型を使用するパブリック・メソッド)をリストすることもできます。つまり、インタフェースを使用して、公開するメソッドをフィルタ処理することができます。

インタフェースの実装は、次の要件も満たす必要があります。

Webサービス・クライアントがサービス・リクエストを行うと、OC4Jはそのクラス内の対応するメソッドを実行します。Webサービスで実行できるアクションには、制限がほとんどありません。Webサービスでは、クライアントに送信するデータが生成されるか、Webサービス・リクエストで指定されたアクションが実行されます。


注意

サービス・インタフェースを提供せず、クラスが準拠クラスの条件の一部を満たしていない場合であっても、OracleAS Web ServicesはJavaクラスをWebサービスとして直接公開できる場合があります。このような場合にJavaクラスをWebサービスとして公開するには、@WebServiceなどのJ2SE 5.0注釈を使用する必要があります。詳細は、第11章「注釈を使用したWebサービスのアセンブル」を参照してください。

また、このような条件の下でアセンブルされたWebサービスは、JAX-RPC仕様で定義されている適合性または移植性を備えていないことにも注意してください。 


関連項目

ステートレスWebサービス用のJavaクラスを記述する方法の詳細は、「ステートレスWebサービス用のJava実装の記述方法」を参照してください。また、ステートフルWebサービス用のJavaクラスを記述する方法の詳細は、「ステートフルWebサービス用のJava実装の記述方法」を参照してください。 

JavaクラスとステートレスWebサービス

この項の内容は、次のとおりです。

ステートレス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)をベースにすることができます。

関連項目

クラスとインタフェースの要件の詳細は、「Webサービス用Javaクラスの記述に対する要件」を参照してください。  

Javaクラスを使用したステートレスWebサービスのアセンブル方法

この項の内容は、次のとおりです。

前提条件

開始する前に、次のファイルと情報を用意してください。

Javaクラスを使用したステートレスWebサービスのアセンブル手順

次の手順は、WebServicesAssemblerを使用してJavaクラスを基にステートレスWebサービスを公開する方法を示しています。

  1. Webサービスとして公開するコンパイル済Javaクラスとそのコンパイル済インタフェースを用意します。

    次の例では、HelloInterfaceインタフェースとHelloImplクラスを使用しています。これらのファイルのコード・リストについては、「Javaクラスを使用したステートレスWebサービスのアセンブル手順」を参照してください。

  2. 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: アプリケーションの名前を指定します。この名前は、通常contexturiなどの他の引数のベース値として使用されます。「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」を参照してください。

  3. サービスをデプロイし、アプリケーションをバインドします。

    通常の方法で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
    

    次のリストは、このコード例で使用される変数の説明です。

    • <OC4J_HOME>: OC4Jインストールが含まれているディレクトリ。

    • <user>: OC4Jのインスタンスのユーザー名。ユーザー名はインストール時に割り当てられます。

    • <password>: OC4Jのインスタンス用のパスワード。パスワードはインストール時に割り当てられます。

    • default-web-site: アプリケーションのバインド先のWebサイト。通常、これはdefault-web-siteになります。Webサイトを構成するには、<OC4J_HOME>/j2ee/home/configserver.xmlファイルを参照してください。

  4. 必要に応じて、デプロイメントが成功したかどうかを確認します。OracleAS Web Servicesでは、デプロイされたWebサービスごとにWebサービス・テスト・ページが提供されます。Webサービス・テスト・ページへのアクセスおよびその使用方法の詳細は、「Webサービス・テスト・ページの使用方法」を参照してください。

  5. クライアント・サイドのコードを生成します。

    • J2SE環境の場合、genProxyコマンドを使用してWebServicesAssemblerツールを実行し、J2SE Webサービス・クライアントのスタブ(クライアント・プロキシ)を生成します。J2SE環境向けのクライアント・サイド・コードの生成およびアセンブルの詳細は、第15章「J2SE Webサービス・クライアントのアセンブル」を参照してください。

    • J2EE環境の場合、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」を参照してください。

  6. クライアント・アプリケーションを記述します。

  7. クライアントをコンパイルおよび実行します。

    クライアントをコンパイルする前に、クラスパス上にある適切なJARをリストします。クライアントのクラスパスで使用可能なすべてのJARファイルのリストについては、表A-2「クライアント・サイド・プロキシを使用するクライアントのクラスパス・コンポーネント」を参照してください。個々のJARをリストするかわりに、クライアントのクラスパスにクライアント側のJARとしてwsclient_extended.jarを含めることができます。このJARファイルには、Webサービス・クライアントをコンパイルおよび実行するために必要なすべてのクラスが含まれます。これらのクラスは、表A-2にリストされている各JARファイルに含まれているものです。wsclient_extended.jarおよびクライアントのクラスパスの詳細は、「Webサービス・プロキシのクラスパスの設定」を参照してください。

ステートレスWebサービス用のJava実装の記述方法

OracleAS Web Servicesでは、Webサービスとして動作するJavaクラスのステートレス実装がサポートされます。ステートレスJava実装の場合、OracleAS Web Servicesでは、Javaクラスの複数インスタンスがプール内に作成されます。リクエストの処理には、任意のインスタンスを使用できます。リクエストの処理が完了すると、オブジェクトは後続のリクエストに使用できるようにプールに戻されます。

ステートレスWebサービス用のJavaクラスをアセンブルできるのは、SOAP/HTTPエンドポイントの場合のみであり、SOAP/JMSエンドポイントの場合はできません。

ステートレスJava Webサービスを開発するには、Javaインタフェースおよびその実装を定義します。これについては、次の各項で説明します。

Javaインタフェースの定義方法

例7-1は、ステートレスWebサービスのHelloInterface.javaインタフェースを示します。JAX-RPC 1.1の仕様に準拠するには、このインタフェースをパッケージに含める必要があります。また、このインタフェースはjava.rmi.Remoteを拡張して、そのメソッドでjava.rmi.RemoteExceptionオブジェクトをスローする必要があります。

例7-1    ステートレスWebサービスのインタフェースの定義

package oracle.demo.hello; 
 
import java.rmi.RemoteException;
import java.rmi.Remote;
 
public interface HelloInterface extends Remote {
    public String sayHello(String name) throws RemoteException;
}

Javaクラスの定義方法

Webサービスとして公開するインタフェースのメソッドを実装し、Javaクラスを作成します。通常、WebサービスのJavaクラスでは、1つ以上のパブリック・メソッドを定義します。JAX-RPC 1.1の仕様に準拠するには、この実装クラスをパッケージに含める必要があります。また、java.rmi.Remoteおよびjava.rmi.RemoteExceptionをインポートする必要があります。

例7-2に、パブリック・クラスHelloImplを示します。このクラスでは、「Hello name!」という文字列を戻すパブリック・メソッドsayHelloを定義します。この場合、nameは入力値です。

例7-2    ステートレスWebサービスのパブリック・クラスの定義

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を参照してください。 

メソッド、パラメータおよび戻り値にサポートされていない型が使用されている場合、次のいずれかの方法でこれらを処理する必要があります。

JavaクラスとステートフルWebサービス

この項の内容は、次のとおりです。

ステートフルWebサービスとしてのJavaクラスの公開

OC4Jは、JavaクラスをベースとしたステートフルWebサービスをサポートしています。このサービスを実装したJavaオブジェクトは、HTTPセッションの期間中有効です。これらのサービスは、状態を保持するためOracle固有の拡張機能を備えています。これらの拡張機能のため、サービス・プロバイダが同じセマンティックを持つスコープを用意しないかぎり、ステートフルOracleAS Web Servicesはその他のサービスとは相互運用できません。

OracleAS Web ServicesによってサポートされるステートフルWebサービスは、HTTPセッション・ベースです。

ステートフルWebサービスのアセンブル方法

この項の内容は、次のとおりです。

前提条件

JavaクラスからステートフルWebサービスを生成するための前提条件は、ステートレスWebサービスについて説明した前提条件と同じです。用意する必要がある情報およびファイルの詳細は、「前提条件」を参照してください。

ステートフルWebサービスのアセンブル手順

次の手順では、WebServicesAssemblerを使用してJavaクラスからステートフルWebサービスを作成する方法について説明します。このサービスを実装したJavaオブジェクトは、HTTPセッションの期間中有効です。

  1. Webサービスとして公開するJavaクラスとそのインタフェースを用意します。

  2. 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: アプリケーションの名前を指定します。この名前は、通常contexturiなどの他の引数のベース値として使用されます。「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に設定します。sessiontrueである場合は、サービス・インスタンスがHTTPセッションにおいて保持されます。

    recoverable引数は、このステートフル・アプリケーションを分散可能とする必要があることを指定します。リカバリ可能とは、対話しているノードがダウンした場合に、サービスが分散環境内でリカバリできることを意味します。つまり、Webサービスの状態も分散可能である必要があります。

  3. サービスをデプロイし、アプリケーションをバインドします。

    通常の方法で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
    

    次のリストは、このコード例で使用されているパラメータの説明です。

    • <OC4J_HOME>: OC4Jのインストールが含まれているディレクトリ。

    • <user>: OC4Jのインスタンスのユーザー名。ユーザー名はインストール時に割り当てられます。

    • <password>: OC4Jのインスタンス用のパスワード。パスワードはインストール時に割り当てられます。

    • default-web-site: アプリケーションのバインド先のWebサイト。通常、これはdefault-web-siteになります。Webサイトを構成するには、<OC4J_HOME>/j2ee/home/configserver.xmlファイルを参照してください。

  4. (オプション)デプロイが成功したことを確認します。

    OracleAS Web Servicesでは、デプロイされたWebサービスごとにWebサービス・テスト・ページが提供されます。Webサービス・テスト・ページへのアクセスおよびその使用方法の詳細は、「Webサービス・テスト・ページの使用方法」を参照してください。

  5. クライアント・コードを生成します。

    • J2SE環境の場合、genProxyコマンドを使用してWebServicesAssemblerツールを実行し、スタブ(クライアント・プロキシ)を生成します。J2SE環境向けのクライアント・サイド・コードの生成およびアセンブルの詳細は、第15章「J2SE Webサービス・クライアントのアセンブル」を参照してください。

    • J2EE環境の場合、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」を参照してください。


    注意

    UNIXやLinuxなどのシステムでは、コマンドラインで必要に応じてURLを引用符(" ")で囲んでください。 


  6. クライアント・アプリケーションを記述します。

    スタブ、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); 
    
  7. クライアントをコンパイルおよび実行します。

    クライアントをコンパイルする前に、クラスパス上にある適切なJARをリストします。クライアントのクラスパスで使用可能なすべてのJARファイルのリストについては、表A-2「クライアント・サイド・プロキシを使用するクライアントのクラスパス・コンポーネント」を参照してください。個々のJARをリストするかわりに、クライアントのクラスパスにクライアント側のJARとしてwsclient_extended.jarを含めることができます。このJARファイルには、Webサービス・クライアントをコンパイルおよび実行するために必要なすべてのクラスが含まれます。これらのクラスは、表A-2にリストされている各JARファイルに含まれているものです。wsclient_extended.jarおよびクライアントのクラスパスの詳細は、「Webサービス・プロキシのクラスパスの設定」を参照してください。

ステートフルWebサービス用のJava実装の記述方法

ステートフルWebサービスのJava実装は、ステートレス・サービスの実装と同じ要件を満たす必要があります。

関連項目

Java実装に対する要件の詳細は、「Webサービス用Javaクラスの記述に対する要件」を参照してください。 

WebServicesAssemblerを使用すると、ステートフルJava実装に対するコール、セッションおよびエンドポイントの各スコープを定義できます。

ステートフルJava Webサービスの開発手順については、次の各項で説明します。

Javaインタフェースの定義方法

例7-3は、ステートフルWebサービスのCountInterface.javaインタフェースを示します。また、この例は、サービス・クラスがサービス・エンドポイント・インタフェースを直接実装する必要がないことも示しています。JAX-RPC 1.1の仕様に準拠するには、このインタフェースをパッケージに含める必要があります。また、このインタフェースはjava.rmi.Remoteを拡張して、そのメソッドでjava.rmi.RemoteExceptionオブジェクトをスローする必要があります。

例7-3    ステートフルWebサービスのインタフェースの定義

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;
}

Javaクラスの定義方法

Webサービスとして公開するインタフェースのメソッドを実装し、Javaクラスを作成します。通常、WebサービスのJavaクラスでは、1つ以上のパブリック・メソッドを定義します。JAX-RPC 1.1の仕様に準拠するには、この実装クラスをパッケージに含める必要があります。また、java.rmi.Remoteおよびjava.rmi.RemoteExceptionをインポートする必要があります。

例7-4に、パブリック・クラスCounterImplを示します。このクラスは、カウントを初期化し、パブリック・メソッドgetCurrentCounterを定義しています。

例7-4    ステートフルWebサービスのパブリック・クラスの定義

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);
   }
}  

Webサービスのパッケージ化およびデプロイ

Javaクラスを公開するWebサービスのパッケージについては、「JavaクラスをベースにしたWebサービスのパッケージ化」を参照してください。

関連資料

Webモジュールのデプロイメントの詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。  

WebサービスとしてJavaクラスを公開するためのツールのサポート

Oracle JDeveloperを使用して、J2EE準拠のJavaクラス・ファイルをWebサービスとして作成、変更およびデプロイできます。Oracle JDeveloperでJavaクラスを作成する場合、モデリング・ツールおよびウィザードを使用します。このウィザードを使用して、次のタスクを実行できます。

制限事項

「JavaクラスからのWebサービスのアセンブル」を参照してください。

追加情報

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


戻る 次へ
Oracle
Copyright © 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引