| Oracle® Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門 11g リリース 1 (10.3.1) B55567-01 |
|
![]() 戻る |
![]() 次へ |
以下の節では、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 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 サービス機能用に自動的にコンフィグレーションするには、次の手順に従います。
コンフィグレーション ウィザードを起動します。
[ようこそ] ウィンドウで、[既存の WebLogic ドメインの拡張] を選択します。
[次へ] をクリックします。
拡張テンプレートを適用するドメインを選択します。
[次へ] をクリックします。
[既存の拡張テンプレートを使用してドメインを拡張する] を選択します。
[テンプレートの場所] テキスト ボックスに、次の値を入力します。
WL_HOME/common/templates/applications/wls_webservice.jar
WL_HOME はメイン WebLogic Server ディレクトリです。
[次へ] をクリックします。
JMS および JDBC リソースをさらにコンフィグレーションする場合は [はい] を選択します。これは一般的な手順ではありません。
それ以外の場合は、[次へ] をクリックします。
拡張しようとしているドメインが正しいことを確認して [拡張] をクリックします。
終了するには [完了] をクリックします。
コンフィグレーション ウィザードを使用して WebLogic Server ドメインを作成および更新する手順については、『Oracle WebLogic Server コンフィグレーション ウィザードを使用した WebLogic ドメインの作成』を参照してください。
この節では、Java から開始して WebLogic Web サービスを開発する一般的な手順について説明します。つまり、JWS ファイルを最初からコーディングして、サービスについて記述する WSDL ファイルを後で生成するという手順です。このプロセスの具体的な例については、「使用例とサンプル」を参照してください。
以下に示すのは推奨の手順に過ぎません。独自の開発環境を設定してある場合は、WebLogic Web サービスを開発するために既存の環境を更新する際のガイドとして、この手順を利用できます。
|
注意 : この手順では、WebLogic Web サービスの分割開発ディレクトリ環境は使用しません。この開発環境を使用していて、Web サービスの開発をそこに統合する場合の詳細については、Web サービスの WebLogic 分割開発ディレクトリ環境への統合」を参照してください。 |
表 3-1 Java から開始する Web サービスの開発手順
| # |
手順 | 説明 |
|---|---|---|
|
1 |
環境を設定する。 |
コマンド ウィンドウを開いて、ドメイン ディレクトリの |
|
2 |
プロジェクト ディレクトリを作成する。 |
JWS ファイル、ユーザ定義のデータ型の Java ソース、Ant |
|
3 |
Web サービスを実装する JWS ファイルを作成する。 |
|
|
4 |
ユーザ定義のデータ型を作成する (省略可能)。 |
Web サービスでユーザ定義のデータ型を使用する場合は、その型を記述した JavaBean を作成する。「ユーザ定義の Java データ型のプログラミング」を参照。 |
|
5 |
基本の Ant ビルド ファイル |
|
|
6 |
JWS ファイルに対して |
ソース コード、データ バインディング アーティファクト、デプロイメント記述子などが |
|
7 |
Web サービスを WebLogic Server にデプロイする。 |
|
|
8 |
Web サービスの WSDL を参照する。 |
Web サービスの WSDL を参照して、Web サービスが適切にデプロイされたことを確認する。「Web サービスの WSDL の参照」を参照。 |
|
9 |
Web サービスをテストする。 |
「Web サービスのテスト」を参照。 |
|
10 |
Web サービスを編集する (省略可能)。 |
Web サービスに変更を加えるには、JWS ファイルを更新し、「WebLogic Web サービスのデプロイとアンデプロイ」の説明のとおりに Web サービスをアンデプロイしてから、 |
Web サービスを呼び出すクライアント アプリケーションの記述については、「Web サービスの呼び出し」を参照してください。
この節では、既存の WSDL ファイルに基づいて WebLogic Web サービスを開発する一般的な手順について説明します。このプロセスの具体的な例については、「WebLogic Web サービスの開発」を参照してください。
以下に示すのは推奨の手順に過ぎません。独自の開発環境を設定してある場合は、WebLogic Web サービスを開発するために既存の環境を更新する際のガイドとして、この手順を利用できます。
この手順では既存の WSDL ファイルがすでにあることを前提としています。
|
注意 : この手順では、WebLogic Web サービスの分割開発ディレクトリ環境は使用しません。この開発環境を使用していて、Web サービスの開発をそこに統合する場合の詳細については、「Web サービスの WebLogic 分割開発ディレクトリ環境への統合」を参照してください。 |
表 3-2 Java から開始する Web サービスの開発手順
| # |
手順 | 説明 |
|---|---|---|
|
1 |
環境を設定する。 |
コマンド ウィンドウを開いて、ドメイン ディレクトリの |
|
2 |
プロジェクト ディレクトリを作成する。 |
生成されるアーティファクトや Ant |
|
3 |
基本の Ant ビルド ファイル |
|
|
4 |
WSDL ファイルを、 |
たとえば、WSDL ファイルをプロジェクト ディレクトリの |
|
5 |
WSDL ファイルに対して |
JWS サービス エンドポイント インタフェース (SEI)、途中まで作成済みの JWS クラス ファイル、XML スキーマ データ型を表す JavaBean などが、 |
|
6 |
|
|
|
7 |
JWS ファイルに対して |
|
|
8 |
Web サービスを WebLogic Server にデプロイする。 |
|
|
9 |
Web サービスの WSDL を参照する。 |
Web サービスの WSDL を参照して、Web サービスが適切にデプロイされたことを確認する。「Web サービスの WSDL の参照」を参照。 デプロイ済み Web サービスの WSDL を呼び出すときに使用する URL は、基本的に、元の WSDL 内の |
|
10 |
Web サービスをテストする。 |
「Web サービスのテスト」を参照。 |
|
11 |
Web サービスを編集する (省略可能)。 |
Web サービスに変更を加えるには、JWS ファイルを更新し、「WebLogic Web サービスのデプロイとアンデプロイ」の説明のとおりに Web サービスをアンデプロイしてから、 |
Web サービスを呼び出すクライアント アプリケーションの記述については、「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 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 ファイルには、コードを追加すべき場所に次のようなコメントがあります。
//ここを独自の実装で置き換える
また、他の 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 クラスは、Web サービスのエンドポイント インタフェース
* 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)
{
//ここを独自の実装で置き換える
return 0;
}
}
Web サービスはエンタープライズ アプリケーションとしてパッケージ化されるので、Web サービスのデプロイとは、該当する EAR ファイルまたは展開されたディレクトリをデプロイすることになります。
Administration Console の使用から 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 - エンタープライズ アプリケーションのデプロイメント名、または、Administration Console でデプロイメントのリストに表示される名前。
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 属性を指定する必要はなく、名前によってアンデプロイします。
Administration Console を使用して Web サービスをデプロイするには、最初に、ブラウザで次の URL を使用して Web サービスを呼び出します。
http://host:port/console
各値の説明は次のとおりです。
host - WebLogic Server が動作しているコンピュータの名前。
port - WebLogic Server がリスンしているポート番号 (デフォルト値は 7001)。
次にデプロイメント アシスタントを使用して、エンタープライズ アプリケーションをデプロイします。Administration Console の詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』を参照してください。
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> 子要素の値。serviceUri よりも <WLHttpTransport> が優先されます。JWS ファイルまたは jwsc Ant タスクにおいて serviceUri 属性を 1 つも指定しない場合、Web サービスの serviceUri はデフォルト値 (*.java 拡張子の付かない JWS ファイルの名前) になります。
たとえば、Web サービスを実装する JWS ファイルで以下の @WLHttpTransport アノテーションを指定したとします。
...
@WLHttpTransport(contextPath="complex",
serviceUri="ComplexService",
portName="ComplexServicePort")
/**
* この JWS ファイルは WebLogic Web サービスの基本となる。
*
*/
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 は、「Web サービスの WSDL の参照」で説明されているように @WLXXXTransport アノテーションまたは jwsc 要素の contextPath および serviceURI 属性を調べてこのアドレスの complex/ComplexService 部分を決定します。ただし、WebLogic Server では、アドレスのプロトコルとホストの部分 (例では、http://myhost:7101) を決定するのに使用される方法はより複雑です。以下に、その方法を説明します。この節では、分かりやすいように、アドレスのプロトコルとホストの部分をまとめて「サーバ アドレス」と呼ぶことにします。
WebLogic Server がデプロイ済みの Web サービスの動的な WSDL 内にパブリッシュするサーバ アドレスは、その Web サービスを HTTP/S や JMS で呼び出せるかどうか、プロキシ サーバをコンフィグレーションしているかどうか、Web サービスがクラスタにデプロイされているかどうか、Web サービスが実際にはコールバック サービスであるかどうかによって異なります。
以下では、これらのコンフィグレーションの違いに応じたサーバ アドレスの決定方法について説明します。また、ニーズに合わせてコンフィグレーションを変更するための手順説明へのリンクも示します。
なお、ここでは、クラスタとスタンドアロン サーバを、WebLogic Server Administration Console を使用してコンフィグレーションすることを前提としています。
Web サービスがクラスタにデプロイされており、クラスタの Frontend Host、Frontend HTTP Port、および Frontend HTTPS Port が設定されている場合は、動的な WSDL のサーバ アドレスにこれらの値が使用されます。
『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「クラスタの HTTP 設定のコンフィグレーション」を参照してください。
上記のクラスタ値は設定されていないが、Web サービスがデプロイされている「個々のサーバ」で Frontend Host、Frontend HTTP Port、および Frontend HTTPS Port の値が設定されている場合は、サーバ アドレスにこれらの値が使用されます。
『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「HTTP プロトコルのコンフィグレーション」を参照してください。
これらの値がクラスタにも個々のサーバにも設定されていない場合は、動的な WSDL 内の WSDL リクエストのサーバ アドレスが使用されます。
Web サービスがクラスタにデプロイされており、Cluster Address が設定されている場合は、動的な WSDL のサーバ アドレスにこの値が使用されます。
『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「クラスタのコンフィグレーション」を参照してください。
クラスタ値が設定されていないか、Web サービスがスタンドアロン サーバにデプロイされており、Web サービスがデプロイされているサーバの Listen Address が設定されている場合は、サーバ アドレスにこの値が使用されます。
『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「リスン アドレスのコンフィグレーション」を参照してください。
コールバック サービスがクラスタにデプロイされており、クラスタの Frontend Host、Frontend HTTP Port、および Frontend HTTPS Port が設定されている場合は、動的な WSDL のサーバ アドレスにこれらの値が使用されます。
『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「クラスタの HTTP 設定のコンフィグレーション」を参照してください。
コールバック サービスがクラスタまたはスタンドアロン サーバにデプロイされており、上記のクラスタ値は設定されていないが、コールバック サービスがデプロイされいる「個々のサーバ」で Frontend Host、Frontend HTTP Port、および Frontend HTTPS Port の値が設定されている場合は、サーバ アドレスにこれらの値が使用されます。
『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「HTTP プロトコルのコンフィグレーション」を参照してください。
コールバック サービスがクラスタにデプロイされており、上記のどの値も設定されていないが Cluster Address が設定されている場合は、サーバ アドレスにこの値が使用されます。
『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「クラスタのコンフィグレーション」を参照してください。
上記のどの値も設定されていないが、コールバック サービスがデプロイされているサーバの Listen Address が設定されている場合は、サーバ アドレスにこの値が使用されます。
『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「リスン アドレスのコンフィグレーション」を参照してください。
必須ではありませんが、Web サービスがデプロイされているクラスタまたは個々のサーバのいずれかの Frontend Host、FrontEnd HTTP Port、および Frontend HTTPS Port がプロキシ サーバを指すように明示的に設定することをお勧めします。
『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「クラスタの HTTP 設定のコンフィグレーション」または「HTTP プロトコルのコンフィグレーション」を参照してください。
WebLogic Web サービスのデプロイメントが完了したら、WebLogic Administration Console に含まれている Web サービス テスト クライアントを使用して、コードを記述することなくサービスをテストできます。複合型を持つ Web サービスや、WebLogic Server の高度な機能 (会話など) を使用する Web サービスも含めて、Web サービスを素早く簡単にテストできます。テスト クライアントはリクエストの完全なログを自動的に保持しているので、ユーザは以前の呼び出しに戻って結果を表示することができます。
デプロイした Web サービスを Administration Console を使用してテストするには、次の手順に従います。
次の URL を使用して、ブラウザで Administration Console を呼び出します。
http://host:port/console
各値の説明は次のとおりです。
host - WebLogic Server が動作しているコンピュータの名前。
port - WebLogic Server がリスンしているポート番号 (デフォルト値は 7001)。
『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「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 ターゲットを更新します。
<!-- helloWorldEar アプリケーション全体をビルドする --> <target name="build" description="Compiles helloWorldEar application and runs appc" depends="build-helloWebService,compile,appc" />
|
注意 : エンタープライズ アプリケーションを実際にビルドするときは、wlappc Ant タスクを実行する前に、jwsc Ant タスクを実行するようにしてください。wlappc を正常に実行するには、jwsc によって生成されるアーティファクトの一部が必要になるためです。この例の場合は、appc ターゲットよりも前に build-helloWebService ターゲットを指定する必要があります。 |
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>
|
注意 : jwsc Ant タスクでは通常、Web サービスを実装する JWS ファイルから Web アプリケーション WAR ファイルが生成されます。ただし、JWS ファイルに javax.ejb.SessionBean が明示的に実装されている場合は例外です。その場合は、application.xml ファイルに <ejb> モジュール要素を追加する必要があります。 |
これで、分割開発ディレクトリ環境は、Web サービスの開発を含むように更新されました。エンタープライズ アプリケーション全体を再ビルドしてデプロイするときに、Web サービスも EAR の一部としてデプロイされます。Web サービスは、「Web サービスの WSDL の参照」で説明されている標準的な方法で呼び出します。