| Oracle® Fusion Middleware Oracle WebLogic Server JAX-RPC Webサービス・スタート・ガイド 11g リリース1 (10.3.6) B61647-05 |
|
![]() 前 |
![]() 次 |
この章では、Java API for XML-based RPC (JAX-RPC)を使用したWebLogic Webサービスの反復的な開発プロセスについて説明します。
この章では、以下のトピックについて説明します。
WebLogic Webサービスのプログラミング・モデルはJWSファイル(JWSアノテーションを使用してWebサービスの形式や動作を指定したJavaファイル)と、JWSファイルを実行するAntタスクを中心に展開されます。JWSアノテーションは、JDKのバージョン5.0で導入されたメタデータ機能(http://www.jcp.org/en/jsr/detail?id=175にあるJSR-175により指定されています)に基づいており、Web Services Metadata for the Java Platform仕様(JSR-181) (http://www.jcp.org/en/jsr/detail?id=181に記載されています)で定義されている標準のアノテーションのほかに、追加のアノテーションを含みます。サポートされるJWSアノテーションの完全なリストについては、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』のWebサービスのアノテーション・サポートに関する項を参照してください。このプログラミング・モデルの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの紹介』のWebLogic Webサービスの構造に関する項を参照してください。
以下の項では、Webサービスを繰返し開発する主要な手順を、Javaから開始する場合、または既存のWSDLファイルから開始する場合について説明します。
反復的な開発とは、希望どおりに動作するまで、Webサービスを繰返しコーディング、コンパイル、パッケージ化、デプロイ、およびテストできるように、開発環境を設定することです。WebLogic Webサービス・プログラミング・モデルでは、Antタスクを使用して、反復的な開発のほとんどの手順を実行します。一般に、すべての手順に対応するターゲットを含んだ1つのbuild.xmlファイルを作成して、そのターゲットを繰返し実行します。JWSファイルを新しいJavaコードで更新したら、その更新が期待どおりに動作することをテストします。
Webサービスを開発するために、この項で説明したコマンド・ライン・ツールの他に、Oracle JDeveloperなどのIDEも使用できます。詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービスの紹介』のOracle IDEを使用したWebサービスのビルドに関する項を参照してください。
WebLogic Serverドメインを作成したら、構成ウィザードでWebサービス固有の拡張テンプレートを使用してドメインを更新し、特定のWebLogic Webサービス機能で必要になるリソースを自動的に構成できます。この拡張テンプレートの使用は必須ではありませんが、これを使用することでJMSおよびJDBCリソースの構成を大幅に簡略化できます。
Webサービス拡張テンプレートを使用すると、以下の機能で必要になるリソースを自動的に構成できます。
Webサービスの信頼性のあるメッセージング
バッファリング
JMSトランスポート
|
注意: Webサービスのリソースを含まないドメインは、Webサービス以外のシナリオおよび非同期のリクエスト/レスポンスが含まれないWebサービス・シナリオにおいて、適切に起動および実行されます。ただし、サーバー・ログに、非同期リソースが構成されていないこと、およびWebサービスの非同期レスポンス・サービスが完全にデプロイされていないことを示すINFOメッセージが表示されます。 |
次の各手順は、Webサービスの高度な機能を使用するようにドメインを自動的に構成するためのドメインの作成方法および拡張方法を示しています。構成ウィザードを使用してWebLogic Serverドメインを作成および更新する手順の詳細は、『Oracle WebLogic Server構成ウィザードによるWebLogicドメインの作成』を参照してください。
Webサービスの高度な機能を使用するように自動的に構成されたドメインを作成するには:
構成ウィザードを起動します。
「ようこそ」ウィンドウで、「新しいWebLogicドメインの作成」を選択します。
「次へ」をクリックします。
「以下の製品をサポートするために、自動的に構成されたドメインを生成する」を選択し、「WebLogic Advanced Web Services for JAX-RPC Extension」を選択します。
「次へ」をクリックします。
ドメインの名前と場所を入力し、「次へ」をクリックします。
管理者のユーザー名とパスワードを構成し、「次へ」をクリックします。
サーバーの起動モードとJDKを構成し、「次へ」をクリックします。
JMSサービス、ファイル・ストア、その他の機能をさらに構成する場合は、「オプションの構成を選択」画面で項目を選択します。通常はこれは行いません。
それ以外の場合は、すべての項目が選択解除された状態で、「次へ」をクリックします。
「構成のサマリー」画面に達したら、ドメインの詳細を確認して「作成」をクリックします。
「完了」をクリックして終了します。
既存のドメインを拡張してこれらのWebサービス機能用に自動的に構成するには:
構成ウィザードを起動します。
「ようこそ」ウィンドウで、「既存のWebLogicドメインの拡張」を選択します。
「次へ」をクリックします。
拡張テンプレートを適用するドメインを選択します。
「次へ」をクリックします。
「以下の追加製品をサポートするために、自動的にドメインを拡張する」を選択し、「WebLogic Advanced Web Services for JAX-RPC Extension」を選択します。
「次へ」をクリックします。
JMSサービスやファイル・ストアをさらに構成する場合は、「オプションの構成を選択」画面で項目を選択します。通常はこれは行いません。
それ以外の場合は、すべての項目が選択解除された状態で、「次へ」をクリックします。
拡張しようとしているドメインが正しいことを確認して、「拡張」をクリックします。
「完了」をクリックして終了します。
この節では、Javaから開始してWebLogic Webサービスを開発する一般的な手順について説明します。つまり、JWSファイルを最初からコーディングして、サービスについて記述するWSDLファイルを後で生成するという手順です。このプロセスの具体的な例については、第2章「使用例とサンプル」を参照してください。
以下に示すのは推奨の手順に過ぎません。独自の開発環境を設定してある場合は、WebLogic Webサービスを開発するために既存の環境を更新する際のガイドとして、この手順を利用できます。
|
注意: この手順では、WebLogic Webサービスの分割開発ディレクトリ環境は使用しません。この開発環境を使用していて、Webサービスの開発をそこに統合する場合の詳細は、「WebサービスのWebLogic分割開発ディレクトリ環境への統合」を参照してください。 |
表3-1 Javaから開始するWebサービスの開発手順
| # |
手順 | 説明 |
|---|---|---|
|
1 |
環境を設定します。 |
コマンド・ウィンドウを開いて、ドメイン・ディレクトリの |
|
2 |
プロジェクト・ディレクトリを作成します。 |
JWSファイル、ユーザー定義のデータ型のJavaソース、Ant |
|
3 |
Webサービスを実装するJWSファイルを作成します。 |
「JWSファイルのプログラミング: 一般的な手順」を参照してください。 |
|
4 |
ユーザー定義のデータ型を作成する(オプション) |
Webサービスでユーザー定義のデータ型を使用する場合は、その型を記述したJavaBeanを作成します。「ユーザー定義のJavaデータ型のプログラミング」を参照してください。 |
|
5 |
基本のAntビルド・ファイル |
「基本的なAnt build.xmlファイルの作成」を参照してください。 |
|
6 |
JWSファイルに対して |
ソース・コード、データ・バインディング・アーティファクト、デプロイメント記述子などが |
|
7 |
WebサービスをWebLogic Serverにデプロイします。 |
「WebLogic Webサービスのデプロイとアンデプロイ」を参照してください。 |
|
8 |
WebサービスのWSDLを参照します。 |
WebサービスのWSDLを参照して、Webサービスが適切にデプロイされたことを確認します。「WebサービスのWSDLの参照」を参照してください。 |
|
9 |
Webサービスをテストします。 |
「Webサービスのテスト」を参照してください。 |
|
10 |
Webサービスを編集する(オプション) |
Webサービスに変更を加えるには、JWSファイルを更新し、「WebLogic Webサービスのデプロイとアンデプロイ」の説明のとおりにWebサービスをアンデプロイしてから、 |
Webサービスを呼び出すクライアント・アプリケーションの記述については、第6章「Webサービスの呼出し」を参照してください。
この項では、既存のWSDLファイルに基づいてWebLogic Webサービスを開発する一般的な手順について説明します。このプロセスの具体的な例については、第3章「WebLogic Webサービスの開発」を参照してください。
以下に示すのは推奨の手順に過ぎません。独自の開発環境を設定してある場合は、WebLogic Webサービスを開発するために既存の環境を更新する際のガイドとして、この手順を利用できます。
この手順では既存のWSDLファイルがすでにあることを前提としています。
|
注意: この手順では、WebLogic Webサービスの分割開発ディレクトリ環境は使用しません。この開発環境を使用していて、Webサービスの開発をそこに統合する場合の詳細は、「WebサービスのWebLogic分割開発ディレクトリ環境への統合」を参照してください。 |
表3-2 Javaから開始するWebサービスの開発手順
| # |
手順 | 説明 |
|---|---|---|
|
1 |
環境を設定します。 |
コマンド・ウィンドウを開いて、ドメイン・ディレクトリの |
|
2 |
プロジェクト・ディレクトリを作成します。 |
生成されるアーティファクトやAnt |
|
3 |
基本のAntビルド・ファイル |
「基本的なAnt build.xmlファイルの作成」を参照してください。 |
|
4 |
WSDLファイルを、 |
たとえば、WSDLファイルをプロジェクト・ディレクトリの |
|
5 |
WSDLファイルに対して |
JWSサービス・エンドポイント・インタフェース(SEI)、途中まで作成済みのJWSクラス・ファイル、XMLスキーマ・データ型を表すJavaBeanなどが、 |
|
6 |
|
|
|
7 |
JWSファイルに対して |
|
|
8 |
WebサービスをWebLogic Serverにデプロイします。 |
「WebLogic Webサービスのデプロイとアンデプロイ」を参照してください。 |
|
9 |
WebサービスのWSDLを参照します。 |
WebサービスのWSDLを参照して、Webサービスが適切にデプロイされたことを確認します。「WebサービスのWSDLの参照」を参照してください。 デプロイ済みWebサービスのWSDLを呼び出すときに使用するURLは、基本的に、元のWSDL内の |
|
10 |
Webサービスをテストします。 |
「Webサービスのテスト」を参照してください。 |
|
11 |
Webサービスを編集する(オプション) |
Webサービスに変更を加えるには、JWSファイルを更新し、「WebLogic Webサービスのデプロイとアンデプロイ」の説明のとおりにWebサービスをアンデプロイしてから、 |
Webサービスを呼び出すクライアント・アプリケーションの記述については、第6章「Webサービスの呼出し」を参照してください。
Antでは、XMLで記述されたビルド・ファイル(デフォルト名はbuild.xml)を使用します。このファイルには、<project>ルート要素と、Webサービス開発プロセスのさまざまな段階を指定した1つまたは複数のターゲットが含まれています。各ターゲットには、1つまたは複数のタスク、または実行可能なコードが含まれています。この節では、基本的なAntビルド・ファイルの作成方法について説明し、その後の節では、Webサービス開発プロセスのさまざまな段階(jwsc Antタスクを実行してJWSファイルを処理する、WebサービスをWebLogic Serverにデプロイする、など)の実行方法を指定したターゲットをビルド・ファイルに追加する方法について説明します。
以下のスケルトンのbuild.xmlファイルでは、以降の項で追加される他のすべてのターゲットを呼び出す、デフォルトのallターゲットを指定しています。
<project default="all">
<target name="all"
depends="clean,build-service,deploy" />
<target name="clean">
<delete dir="output" />
</target>
<target name="build-service">
<!--add jwsc and related tasks here -->
</target>
<target name="deploy">
<!--add wldeploy task here -->
</dftarget>
</project>
jwsc Antタスクは、JWSアノテーションを含むJWSファイルを入力として取り、WebLogic Webサービスの作成に必要なアーティファクトをすべて生成します。JWSファイルは、最初から自分でコーディングしたものでも、wsdlc Antタスクによって生成されたものでもかまいません。jwscによって生成されるアーティファクトには、以下のものがあります。
JSR-109 Webサービスのクラス・ファイル。
必要な全デプロイメント記述子。以下を含みます。
標準のWebサービス・デプロイメント記述子(webservices.xml)およびWebLogic固有のWebサービス・デプロイメント記述子(weblogic-webservices.xml)。
JAX-RPCマッピング・ファイル。
Javaクラス実装のWebサービスweb.xmlおよびweblogic.xml。
EJB実装のWebサービスejb-jar.xmlおよびweblogic-ejb-jar.xml。
Earデプロイメント記述子ファイルapplication.xmlおよびweblogic-application.xml。
Webサービス操作のパラメータまたは戻り値として使用されるJavaユーザー定義データ型のXMLスキーマ表現。
Webサービスの内容を外部に公開する形で記述したWSDLファイル。
これらのアーティファクトは、wsdlc Antタスクによってすでに生成され、JARファイル内にパッケージ化されているため、wsdlc Antタスクによって生成されたJWSファイルに対してjwsc Antタスクを実行しても、jwscタスクによってはアーティファクトは生成されません。この場合、jwsc Antタスクの属性を使用して、このwsdlc生成JARファイルを指定します。
必要なアーティファクトをすべて生成した後、jwsc Antタスクは、Javaファイル(JWSファイルも含む)をコンパイルし、コンパイルされたクラスと生成されたアーティファクトを、デプロイ可能なJARアーカイブ・ファイルにパッケージ化して、最後に、そのJARファイルを格納する、展開されたエンタープライズ・アプリケーション・ディレクトリを作成します。
jwsc Antタスクを実行するには、以下のtaskdefおよびbuild-serviceターゲットをbuild.xmlファイルに追加します。
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<target name="build-service">
<jwsc
srcdir="src_directory"
destdir="ear_directory"
>
<jws file="JWS_file"
compiledWsdl="WSDLC_Generated_JAR"
type="WebService_type"/>
</jwsc>
</target>
説明:
ear_directory - 生成されたすべてのアーティファクトを格納するエンタープライズ・アプリケーション・ディレクトリ。
src_directory - JWSファイルのパッケージ名に対応するサブディレクトリを含む最上位ディレクトリ。
JWS_file - src_directory属性の値に対して相対的なJWSファイルのパス名。
WSDLC_Generated_JAR - JWS SEIと、既存のWSDLファイルに対応するデータ・バインディング・アーティファクトが含まれる、wsdlc Antタスクによって生成されたJARファイル。
WebService_type - Webサービスの種類。この値は、JAXWSまたはJAXRPCに設定できます。
必須のtaskdef要素では、jwsc Antタスクの完全修飾クラス名を指定します。
jwsc Antタスクのsrcdirおよびdestdir属性のみが必須です。つまり、デフォルトでは、JWSファイルが参照するJavaファイル(JavaBean入力パラメータやユーザー定義の例外など)はJWSファイルと同じパッケージ内にあると想定されています。これに当てはまらない場合は、sourcepath属性を使用して、これらの他のJavaファイルの最上位ディレクトリを指定します。詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「jwsc」を参照してください。
以下のbuild.xmlの抜粋では、JWSファイルに対してjwsc Antタスクを実行する基本的な例を示します。
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<target name="build-service">
<jwsc
srcdir="src"
destdir="output/helloWorldEar">
<jws
file="examples/webservices/hello_world/HelloWorldImpl.java"
type="JAXRPC"/>
</jwsc>
</target>
この例では:
カレント・ディレクトリに対して相対的なoutput/helloWorldEarに、エンタープライズ・アプリケーションが展開形式で生成されます。
JWSファイルはHelloWorldImpl.javaという名前で、カレント・ディレクトリに対して相対的なsrc/examples/webservices/hello_worldディレクトリにあります。つまり、JWSファイルはパッケージexamples.webservices.helloWorld内にあります。
JAX-RPC Webサービスが生成されます。
以下の例は前の例と似ていますが、compiledWsdl属性を使用して、wsdlcが生成したアーティファクト(「WSDLから開始する」ユース・ケース)を含むJARファイルを指定している点が異なります。
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<target name="build-service">
<jwsc
srcdir="src"
destdir="output/wsdlcEar">
<jws
file="examples/webservices/wsdlc/TemperaturePortTypeImpl.java"
compiledWsdl="output/compiledWsdl/TemperatureService_wsdl.jar"
type="JAXRPC"/>
</jwsc>
</target>
この例では、TemperaturePortTypeImpl.javaファイルが、独自のビジネス・ロジックを含めて更新した、途中まで作成されていたJWSファイルです。compiledWsdl属性が指定されてJARファイルを指し示しているので、jwsc Antタスクでは、JARに含まれているアーティファクトを再生成することはありません。
このタスクを実際に実行するには、コマンド・ラインで次のように入力します。
prompt> ant build-service
この項では、jwsc Antタスクの非常に簡単な使用例を紹介します。ただし、このタスクには、非常に有用なツールにするための追加の属性と子要素を含めます。以下のような使用方法が考えられます。
複数のJWSファイルを一度に処理します。生成されたWebサービスをそれぞれ別のWebアプリケーションWARファイルにパッケージ化するか、すべてのWebサービスをグループ化して1つのWARファイルにパッケージ化するかを選択できます。
クライアント・アプリケーションがWebサービスを呼び出すときに使用できるトランスポート形式(HTTP/HTTPS/JMS)を指定します。状況によっては、既存の@WLXXXTransportアノテーションをすべてオーバーライドすることも可能です。
JWSファイル内で呼び出す他のWebサービスのJAX-RPCクライアント・スタブを自動的に生成します。
新しいエンタープライズ・アプリケーションまたはWebアプリケーションを生成するのではなく、既存のアプリケーションを更新します。
jwsc Antタスクの詳細および例については、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「jwsc」を参照してください。
wsdlc AntタスクはWSDLファイルを入力として取り、WebLogic Webサービスの実装を構成するアーティファクトを生成します。アーティファクトは次を含みます:
WSDLファイルで記述されたWebサービスを実装するJWSサービス・エンドポイント・インタフェース(SEI)。
生成されるJWS SEIの不完全な(途中まで作成済みの)実装が含まれるJWS実装ファイル。このファイルは開発者がカスタマイズする必要があります。
Webサービスのパラメータと戻り値をXML表現とJava表現の間で変換するために、WebLogic Serverによって使用されるデータ・バインディング・アーティファクト。
(オプション)生成されるJWS SEIのJavadoc。
wsdlc AntタスクはJWS SEIとデータ・バインディング・アーティファクトを一緒にJARファイルにパッケージ化します。このJARファイルを後でjwsc Antタスクに指定します。このJARファイルを更新する必要はありません。更新するファイルはJWS実装クラスのみです。
wsdlc Antタスクを実行するには、以下のtaskdefおよびgenerate-from-wsdlターゲットをbuild.xmlファイルに追加します。
<taskdef name="wsdlc"
classname="weblogic.wsee.tools.anttasks.WsdlcTask"/>
<target name="generate-from-wsdl">
<wsdlc
srcWsdl="WSDL_file"
destJwsDir="JWS_interface_directory"
destImplDir="JWS_implementation_directory"
packageName="Package_name"
type="WebService_type"/>
</target>
説明:
WSDL_file - 部分的な実装を生成する元となるWSDLファイルの名前(絶対パスまたは相対パスを含めます)。
JWS_interface_directory - JWS SEIおよびデータ・バインディング・アーティファクトを含むJARファイルの生成先となるディレクトリ。
生成されるJARファイルの名前はWSDLFile_wsdl.jar (WSDLFileはWSDLファイルのルート名)。たとえば、file属性に対して指定したWSDLファイルの名前がMyService.wsdlの場合、生成されるJARファイルはMyService_wsdl.jarとなります。
JWS_implementation_directory - 途中まで作成済みのJWS実装ファイルの生成先となる最上位ディレクトリ。ファイルはパッケージ名に対応するサブディレクトリ階層に生成されます。
生成されるJWSファイルの名前はPortTypeImpl.javaです。PortTypeは、Webサービスを生成するWSDLファイル内の<portType>要素のname属性です。たとえば、ポート・タイプ名がMyServicePortTypeの場合、JWS実装ファイルはMyServicePortTypeImpl.javaという名前になります。
Package_name - 生成されるJWS SEIおよび実装ファイルの生成先となるパッケージ。この属性を指定しない場合、wsdlc Antタスクは、WSDLのtargetNamespaceに基づいてパッケージ名を生成します。
WebService_type - Webサービスの種類。この値は、JAXWSまたはJAXRPCに設定できます。
必須のtaskdef要素では、wsdlc Antタスクの完全修飾クラス名を指定します。
wsdlc Antタスクでは、srcWsdlおよびdestJwsDir属性のみが必須です。ただし、通常は、プログラミングを容易にするために、途中まで作成済みのJWSファイルを生成します。WSDLファイルのtargetNamespaceが、読取り可能なパッケージ名への変換に適していない場合に備えて、パッケージ名を明示的に指定することをお薦めします。
以下のbuild.xmlの抜粋では、WSDLファイルに対してwsdlc Antタスクを実行する例を示します。
<taskdef name="wsdlc"
classname="weblogic.wsee.tools.anttasks.WsdlcTask"/>
<target name="generate-from-wsdl">
<wsdlc
srcWsdl="wsdl_files/TemperatureService.wsdl"
destJwsDir="output/compiledWsdl"
destImplDir="impl_output"
packageName="examples.webservices.wsdlc"
type="JAXRPC" />
</target>
この例では:
既存のWSDLファイルはTemperatureService.wsdlという名前で、build.xmlファイルを格納するディレクトリのwsdl_filesサブディレクトリにあります。
JWS SEIとデータ・バインディング・アーティファクトを含むJARファイルはoutput/compiledWsdlディレクトリに生成され、JARファイルの名前はTemperatureService_wsdl.jarです。
生成されるJWSファイルのパッケージ名はexamples.webservices.wsdldです。
途中まで作成済みのJWSファイルは、カレント・ディレクトリに対して相対的なimpl_output/examples/webservices/wsdlcディレクトリに生成されます。
WSDLファイル内のポート・タイプ名がTemperaturePortTypeの場合、JWS実装ファイルの名前はTemperaturePortTypeImpl.javaになります。
JAX-RPC Webサービスが生成されます。
このタスクを実際に実行するには、コマンド・ラインで次のように入力します。
prompt> ant generate-from-wsdl
詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「wsdlc」を参照してください。
wsdlc Antタスクは、destImplDir属性で指定されたディレクトリに、途中まで作成済みのJWS実装ファイルを生成します。ファイルの名前はPortTypeImpl.javaです(PortTypeは元のWSDLにあるportTypeの名前)。このクラス・ファイルには、独自のビジネス・ロジックを除いて、Webサービスへコンパイルするために必要なすべてのものが含まれています。
JWSクラスは、WSDLファイルに対応するJWS Webサービス・エンドポイント・インタフェースを実装しています。このJWS SEIもwsdlcによって生成され、他のアーティファクト(WSDL内のXMLスキーマ・データ型のJava表現など)が含まれているJARファイル内に置かれています。JWSクラスのパブリック・メソッドはWSDLファイル内の操作に対応しています。
wsdlc Antタスクは、JWS実装クラスに@WebServiceおよび@WLHttpTransportアノテーションを自動的に含めます。属性の値はWSDL内の関連する値に対応しています。たとえば、@WebServiceのserviceName属性は、WSDLファイル内の<service>要素のname属性と同じです。@WLHttpTransportのcontextPathおよびserviceUri属性は共に、WSDL内の<address>要素のlocation属性で指定されたエンドポイント・アドレスを構成します。
JWSファイルを更新するときは、該当のWebサービス操作が希望どおりに動作するように、メソッドにJavaコードを追加します。通常、生成されるJWSファイルには、コードを追加すべき場所に次のようなコメントがあります。
//replace with your impl here
また、他のJWSアノテーションをファイルに追加することもできますが、以下のような制限があります。
JWS実装ファイルに含めることができる標準(JSR-181)のjavax.jwsパッケージのアノテーションは、@WebService、@HandlerChain、@SOAPMessageHandler、および@SOAPMessageHandlersのみです。javax.jwsパッケージの他のJWSアノテーションを指定し、JWSファイルをWebサービスにコンパイルしようとすると、jwsc Antタスクはエラーを返します。
@WebServiceアノテーションでは、serviceName、endpointInterface、およびtargetNamespace属性のみを指定できます。まれに、WSDLファイルに複数の<service>要素が指定されていることがあります。その場合は、serviceName属性を使用して、wsdlc Antタスクで使用していたものとは別の<service> WSDL要素を指定します。wsdlc Antタスクで生成されたJWS SEIを指定するには、endpointInterface属性を使用します。WSDLサービスのネームスペースを指定するには、targetNamespace属性を使用します。JWS SEIネームスペースと異なるネームスペースを指定できます。
必要に応じて、WebLogic固有のJWSアノテーションを指定することができます。
JWSファイルを更新したら、wsdlcの出力ディレクトリにそのまま置いておかないで、正式なソースの場所に移動することをお薦めします。
以下の例は、「サンプルWSDLファイル」のWSDLからwsdlcが生成したJWS実装ファイルです。太字のテキストは、Webサービスの1つの操作(getTemp)を実装するJavaコードを追加する場所を示しています。
package examples.webservices.wsdlc;
import javax.jws.WebService;
import weblogic.jws.*;
/**
* TemperaturePortTypeImpl class implements web service endpoint interface
* TemperaturePortType */
@WebService(
serviceName="TemperatureService",
endpointInterface="examples.webservices.wsdlc.TemperaturePortType")
@WLHttpTransport(
contextPath="temp",
serviceUri="TemperatureService",
portName="TemperaturePort")
public class TemperaturePortTypeImpl implements TemperaturePortType {
public TemperaturePortTypeImpl() {
}
public float getTemp(java.lang.String zipcode)
{
//replace with your impl here
return 0;
}
}
Webサービスはエンタープライズ・アプリケーションとしてパッケージ化されるので、Webサービスのデプロイとは、該当するEARファイルまたは展開されたディレクトリをデプロイすることになります。
管理コンソールの使用からweblogic.Deployer Javaユーティリティの使用まで、WebLogicアプリケーションのデプロイには多様な方法があります。開発環境とは異なり、本番環境にアプリケーションをデプロイする際には、他にも様々な問題を考慮する必要があります。デプロイメントの詳細な説明については、『Oracle Fusion Middleware Oracle WebLogic Serverへのアプリケーションのデプロイ』を参照してください。
このガイドでは、開発の性質上、Webサービスの2つのデプロイ方法についてのみ説明します。
反復的な開発プロセスの一環としてWebサービスをデプロイする最も簡単な方法は、wldeploy WebLogic Antタスクを実行するターゲットを、jwsc Antタスクが含まれる同じbuild.xmlファイルに追加することです。Javaコードを追加してサービスを再生成するたびに、サービスの再デプロイとテストを繰返し行えるように、Webサービスをデプロイするターゲットとアンデプロイするターゲットの両方を追加することができます。
wldeploy Antタスクを使用するには、以下のターゲットをbuild.xmlファイルに追加します。
<target name="deploy">
<wldeploy action="deploy"
name="DeploymentName"
source="Source" user="AdminUser"
password="AdminPassword"
adminurl="AdminServerURL"
targets="ServerName"/>
</target>
説明:
DeploymentName - エンタープライズ・アプリケーションのデプロイメント名、または、管理コンソールでデプロイメントのリストに表示される名前。
Source - デプロイするエンタープライズ・アプリケーションのEARファイルまたは展開されたディレクトリの名前。デフォルトでは、jwsc Antタスクが展開されたエンタープライズ・アプリケーション・ディレクトリを生成します。
AdminUser - 管理ユーザー名。
AdminPassword - 管理パスワード。
AdminServerURL - 管理サーバーのUrl。通常はt3://localhost:7001です。
ServerName - WebサービスをデプロイするWebLogic Serverインスタンスの名前。
たとえば、以下のwldeployタスクでは、エンタープライズ・アプリケーションの展開されたディレクトリ(カレント・ディレクトリに対して相対的なoutput/ComplexServiceEarにあります)がmyServer WebLogic Serverインスタンスにデプロイされることを指定します。デプロイメント名はComplexServiceEarです。
<target name="deploy">
<wldeploy action="deploy"
name="ComplexServiceEar"
source="output/ComplexServiceEar" user="weblogic"
password="weblogic" verbose="true"
adminurl="t3://localhost:7001"
targets="myserver"/>
</target>
Webサービスを実際にデプロイするには、コマンド・ラインでdeployターゲットを実行します。
prompt> ant deploy
ソース・コードに変更を加えてからWebサービスを再デプロイできるように、Webサービスを簡単にアンデプロイするターゲットを追加することもできます。
<target name="undeploy">
<wldeploy action="undeploy"
name="ComplexServiceEar"
user="weblogic"
password="weblogic" verbose="true"
adminurl="t3://localhost:7001"
targets="myserver"/>
</target>
Webサービスをアンデプロイするときは、source属性を指定する必要はなく、名前によってアンデプロイします。
管理コンソールを使用してWebサービスをデプロイするには、最初に、ブラウザで次のURLを使用してWebサービスを呼び出します。
http://host:port/console
説明:
host WebLogic Serverが動作しているコンピュータの名前。
port - WebLogic Serverがリスニングしているポート番号(デフォルト値は7001)。
次にデプロイメント・アシスタントを使用して、エンタープライズ・アプリケーションをデプロイします。管理コンソールの詳細は、Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプを参照してください。
WebサービスのWSDLをブラウザで表示して、Webサービスが適切にデプロイされていることを確認できます。
次のURLは、WebサービスのWSDLをブラウザで表示する方法を示しています。
http://host:port/contextPath/serviceUri?WSDL
説明:
host - WebLogic Serverが動作しているコンピュータの名前(localhostなど)。
port - WebLogic Serverがリスニングしているポート番号(デフォルト値は7001)。
contextPath - Webサービスのコンテキスト・ルート。コンテキスト・ルートを設定する場所としては、@WLHttpTransportアノテーションのcontextPath属性、jwscの<WLHttpTransport、<module、または<jws要素があり、オーバーライドの順位が決まっています。包括的な説明については、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』のWebLogic Webサービスのコンテキスト・パスの定義に関する項を参照してください。
serviceUri - Webサービスを実装するJWSファイルの@WLHttpTransport JWSアノテーションのserviceUri属性の値、またはjwsc Antタスクの<WLHttpTransport>子要素の値です; 前者より後者が優先されます。JWSファイルまたはjwsc AntタスクにおいてserviceUri属性を何も指定しない場合、WebサービスのserviceUriはデフォルト値(*.java拡張子の付かないJWSファイルの名前)になります。
たとえば、Webサービスを実装するJWSファイルで以下の@WLHttpTransportアノテーションを指定したとします。
...
@WLHttpTransport(contextPath="complex",
serviceUri="ComplexService",
portName="ComplexServicePort")
/**
* This JWS file forms the basis of a WebLogic Web Service.
*
*/
public class ComplexServiceImpl {
...
ここでは、jwsc Antタスクの<WLHttpTransport>要素と同等の属性を設定し、contextPathまたはserviceURIの値をオーバーライドしないこととします。そして、Webサービスがarielというホストのデフォルトのポート番号(7001)で実行されているとすると、そのWebサービスのWSDLを表示するURLは次のようになります。
http://ariel:7001/complex/ComplexService?WSDL
デプロイ済のWebサービスのWSDL(動的なWSDLともいいます)には、特定のWebサービス・ポートにアドレス(URI)を割り当てる<address>要素が含まれています。たとえば、次に示すWSDLの抜粋には、ComplexServiceというデプロイ済みのWebLogic Webサービスの一部が記述されています。
<definitions name="ComplexServiceDefinitions"
targetNamespace="http://example.org">
...
<service name="ComplexService">
<port binding="s0:ComplexServiceSoapBinding" name="ComplexServicePort">
<s1:address location="http://myhost:7101/complex/ComplexService"/>
</port>
</service>
</definitions>
この例では、ComplexService WebサービスにComplexServicePortというポートが含まれており、そのアドレスはhttp://myhost:7101/complex/ComplexServiceとなっています。
WebLogic Serverは、このアドレスのcomplex/ComplexServiceの部分を、@WLXXXTransportアノテーションまたはjwsc要素のcontextPathおよびserviceURI属性を調べることによって決定します(「WebサービスのWSDLの参照」に説明があります)。しかし、WebLogic Serverがアドレスのプロトコルおよびホスト部分(この例ではhttp://myhost:7101)を決定するために使用する方法は、次で説明するとおり、より複雑です。この項では、わかりやすいように、アドレスのプロトコルとホストの部分をまとめてサーバー・アドレスと呼ぶことにします。
WebLogic Serverがデプロイ済みのWebサービスの動的なWSDL内にパブリッシュするサーバー・アドレスは、そのWebサービスをHTTP/SやJMSで呼び出せるかどうか、プロキシ・サーバーを構成しているかどうか、Webサービスがクラスタにデプロイされているかどうか、Webサービスが実際にはコールバック・サービスであるかどうかによって異なります。
以下では、これらの構成の違いに応じたサーバー・アドレスの決定方法について説明します。また、ニーズに合わせて構成を変更するための手順説明へのリンクも示します。
なお、ここでは、クラスタとスタンドアロン・サーバーを、WebLogic Server管理コンソールを使用して構成することを前提としています。
Webサービスがクラスタにデプロイされており、クラスタのFrontend Host、Frontend HTTP Port、およびFrontend HTTPS Portが設定されている場合は、動的なWSDLのサーバー・アドレスにこれらの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのクラスタのHTTP設定の構成に関する項を参照してください。
上記のクラスタ値は設定されていないが、Webサービスがデプロイされている個々のサーバーでFrontend Host、Frontend HTTP Port、およびFrontend HTTPS Portの値が設定されている場合は、サーバー・アドレスにこれらの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのHTTPプロトコルの構成に関する項を参照してください。
これらの値がクラスタにも個々のサーバーにも設定されていない場合は、動的なWSDL内のWSDLリクエストのサーバー・アドレスが使用されます。
Webサービスがクラスタにデプロイされており、Cluster Addressが設定されている場合は、動的なWSDLのサーバー・アドレスにこの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのクラスタの構成に関する項を参照してください。
クラスタ値が設定されていないか、Webサービスがスタンドアロン・サーバーにデプロイされており、WebサービスがデプロイされているサーバーのListen Addressが設定されている場合は、サーバー・アドレスにこの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのリスニング・アドレスの構成に関する項を参照してください。
コールバック・サービスがクラスタにデプロイされており、クラスタのFrontend Host、Frontend HTTP Port、およびFrontend HTTPS Portが設定されている場合は、動的なWSDLのサーバー・アドレスにこれらの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのクラスタのHTTP設定の構成に関する項を参照してください。
コールバック・サービスがクラスタまたはスタンドアロン・サーバーにデプロイされており、上記のクラスタ値は設定されていないが、コールバック・サービスがデプロイされている個々のサーバーでFrontend Host、Frontend HTTP Port、およびFrontend HTTPS Portの値が設定されている場合は、サーバー・アドレスにこれらの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのHTTPプロトコルの構成に関する項を参照してください。
コールバック・サービスがクラスタにデプロイされており、上記のどの値も設定されていないがCluster Addressが設定されている場合は、サーバー・アドレスにこの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのクラスタの構成に関する項を参照してください。
上記のどの値も設定されていないが、コールバック・サービスがデプロイされているサーバーのListen Addressが設定されている場合は、サーバー・アドレスにこの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのリスニング・アドレスの構成に関する項を参照してください。
必須ではありませんが、Webサービスがデプロイされているクラスタまたは個々のサーバーのいずれかのFrontend Host、FrontEnd HTTP Port、およびFrontend HTTPS Portがプロキシ・サーバーを指すように明示的に設定することをお薦めします。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのクラスタのHTTP設定の構成に関する項またはHTTPプロトコルの構成に関する項を参照してください。
WebLogic Webサービスのデプロイメントが完了したら、WebLogic管理コンソールに含まれているWebサービス・テスト・クライアントを使用して、コードを記述することなくサービスをテストできます。複合型を持つWebサービスや、WebLogic Serverの高度な機能(会話など)を使用するWebサービスも含めて、Webサービスを素早く簡単にテストできます。テスト・クライアントはリクエストの完全なログを自動的に保持しているので、ユーザーは以前の呼出しに戻って結果を表示することができます。
デプロイしたWebサービスを管理コンソールを使用してテストするには、次の手順に従います。
次のURLを使用して、ブラウザで管理コンソールを呼び出します。
http://host:port/console
説明:
host WebLogic Serverが動作しているコンピュータの名前。
port - WebLogic Serverがリスニングしているポート番号(デフォルト値は7001)。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのWebサービスのテストに関する項で説明されている手順に従います。
この項では、Webサービスの開発をWebLogic分割開発ディレクトリ環境に統合する方法について説明します。このWebLogic機能について理解していること、標準のJava Platform, Enterprise Edition (Java EE)バージョン5アプリケーションおよびモジュール(EJBやWebアプリケーションなど)の開発用にこのタイプの環境を設定済みであること、Webサービスの開発が含まれるようにbuild.xmlファイルを更新しようとしていることを前提としています。
WebLogic分割開発ディレクトリ環境の詳細は、『Oracle Fusion Middleware Oracle WebLogic Serverアプリケーションの開発』の分割開発ディレクトリ環境の作成に関する項およびWebLogic Serverと一緒にインストールされるsplitdir/helloWorldEarサンプルを参照してください。サンプルは、WL_HOME/samples/server/examples/src/examplesディレクトリにあります。WL_HOMEはWebLogic Serverがインストールされている最上位ディレクトリです。
メイン・プロジェクト・ディレクトリ内に、Webサービスを実装するJWSファイルを格納するためのディレクトリを作成します。
たとえば、メイン・プロジェクト・ディレクトリが/src/helloWorldEarである場合、/src/helloWorldEar/helloWebServiceというディレクトリを作成します。
prompt> mkdir /src/helloWorldEar/helloWebService
helloWebServiceディレクトリの下に、JWSファイルのパッケージ名に対応するディレクトリ階層を作成します。
たとえば、JWSファイルがexamples.splitdir.helloパッケージにパッケージ化されている場合は、examples/splitdir/helloというディレクトリ階層を作成します。
prompt> cd /src/helloWorldEar/helloWebService prompt> mkdir examples/splitdir/hello
メイン・プロジェクト・ディレクトリに作成したWebサービスのサブディレクトリ(この例では/src/helloWorldEar/helloWebService/examples/splitdir/hello)にJWSファイルを置きます。
エンタープライズ・アプリケーションをビルドするbuild.xmlファイル内に、「jwsc WebLogic WebサービスAntタスクの実行」の説明に従ってjwsc WebLogic WebサービスAntタスクの呼出しを追加して、Webサービスをビルドする新しいターゲットを作成します。
jwscのsrcdir属性は、JWSファイルを格納する最上位ディレクトリ(この例ではhelloWebService)を指すようにします。jwscのdestdir属性は、wlcompileに指定するのと同じ宛先ディレクトリを指すようにします。次の例を参照してください。
<target name="build.helloWebService">
<jwsc
srcdir="helloWebService"
destdir="destination_dir"
keepGenerated="yes" >
<jws file="examples/splitdir/hello/HelloWorldImpl.java"
type="JAXRPC" />
</jwsc>
</target>
この例のdestination_dirは、他の分割開発ディレクトリ環境のAntタスク(wlappcやwlcompileなど)も使用する宛先ディレクトリを表します。
Webサービス関連のターゲットを呼び出すように、build.xmlファイルのメインのbuildターゲットを更新します。
<!-- Builds the entire helloWorldEar application -->
<target name="build"
description="Compiles helloWorldEar application and runs appc"
depends="build-helloWebService,compile,appc" />
|
注意: エンタープライズ・アプリケーションを実際にビルドするときは、 |
wlcompileおよびwlappc Antタスクを使用してエンタープライズ・アプリケーション全体をコンパイルおよび検証する場合は、両方のAntタスクでWebサービスのソース・ディレクトリを除外するようにしてください。これは、jwsc AntタスクでWebサービスのコンパイルとパッケージ化をすでに扱っているからです。例:
<target name="compile">
<wlcompile srcdir="${src.dir}" destdir="${dest.dir}"
excludes="appStartup,helloWebService">
...
</wlcomplile>
...
</target>
<target name="appc">
<wlappc source="${dest.dir}" deprecation="yes" debug="false"
excludes="helloWebService"/>
</target>
META-INFプロジェクト・ソース・ディレクトリにあるapplication.xmlファイルを更新して、<web>モジュールを追加し、jwsc Antタスクによって生成されるWARファイルの名前を指定します。
たとえば、helloWorld Webサービスのapplication.xmlファイルに以下のように追加します。
<application>
...
<module>
<web>
<web-uri>examples/splitdir/hello/HelloWorldImpl.war</web-uri>
<context-root>/hello</context-root>
</web>
</module>
...
</application>
|
注意:
|
これで、分割開発ディレクトリ環境は、Webサービスの開発を含むように更新されました。エンタープライズ・アプリケーション全体を再ビルドしてデプロイするときに、WebサービスもEARの一部としてデプロイされます。Webサービスは、「WebサービスのWSDLの参照」で説明されている標準的な方法で呼び出します。