![]() ![]() ![]() ![]() |
警告 : | JAX-RPC 1.1 および JAX-WS 2.0 は双方ともこのリリースの WebLogic Server でサポートされていますが、このチュートリアルでは、JAX-RPC 形式の Web サービスの作成方法のみを説明しています。 |
このチュートリアルでは、Enterprise Web Services 1.1 仕様 (JSR-921) に従って Java EE Web サービスを作成する方法について説明します。
最初に、Web サービスを実装する Java Web サービス (JWS) ファイルについて説明し、次に、WebLogic Web サービス Ant タスクの jwsc
を使用して、Web サービスを構成する補助的なアーティファクトをすべて自動的に生成する方法を示します。続いて、Web サービスをデプロイし、その WSDL ファイルを表示する方法を説明します。「チュートリアル 12 : クライアント アプリケーションからの Web サービスの呼び出し」では、さまざまなクライアント アプリケーションから SOAP を使用して Web サービスを呼び出す方法について説明します。
JWS ファイルは、JDK 5.0 メタデータ アノテーションを使用して Web サービスの形式や特性を指定した、通常の Java クラス ファイルです。JWS ファイルで使用できる JWS アノテーションには、Web Services Metadata for the Java Platform 仕様 (JSR-181) で定義された標準のアノテーションと、WebLogic 固有のアノテーションがあります。
JWS ファイルをプログラミングしたら、Enterprise Web Services 1.1 仕様で規定されているように、jwsc
WebLogic Web サービス Ant タスクを使用して、JWS ファイルを Java クラスまたはステートレス セッション EJB にコンパイルします。通常は、この Web サービスのバックエンドの実装をユーザが決定する必要はありません。jwsc
Ant タスクが、JWS ファイルに指定された JWS アノテーションに基づいて最適な実装を選択します。jwsc
Ant タスクは、Web サービスの補助的なアーティファクト (デプロイメント記述子、Java ユーザ定義データ型の XML スキーマ表現、WSDL ファイル) もすべて生成し、アーカイブ ファイルにすべてをパッケージ化して、WebLogic Server にデプロイできるエンタープライズ アプリケーションを作成します。
これまでのチュートリアルでは、Physician アプリケーション (physicianEar
) だけを扱ってきました。このチュートリアルでは、メインの MedRec アプリケーションである medrecEar
を使用します。medrecEar の webServices
サブディレクトリにはさまざまな Web サービスが含まれています。このチュートリアルでは、MedRecWebServices
サービスのプログラミング方法について説明します。このサービスの JWS ファイルは C:\medrec_tutorial\src\medrecEar\webServices\com\bea\medrec\webservices
ディレクトリにあります。この Web サービスは、患者や特定の通院に関する情報の取得、患者のプロファイルの更新など、メインの MedRec サービス用のパブリック オペレーションを提供します。
このチュートリアルを始める前に、「チュートリアル 5 : MedRec プロジェクト ディレクトリの作成」の手順に従って、プロジェクト ディレクトリを作成してソース ファイルと出力ディレクトリをコピーします。
MedRecWebServices
サービスを実装するには、次の手順に従います。
prompt> cd C:\medrec_tutorial\src\medrecEar\webServices\com\bea\medrec\webservices
MedRecWebServices.java
ファイルを表示します。prompt> notepad MedRecWebServices.java
MedRecWebServices.java
JWS ファイルは、Web サービスに固有の形式や動作を記述する、標準および WebLogic 固有の JWS アノテーションを含む Java ファイルです。Java ファイルのメソッドには、Web サービスのパブリック オペレーションを実装するビジネス ロジックが含まれています。このようなメソッドには、レコード ID に基づいて患者のレコードを返す getRecord
や、患者の社会保障番号に基づいて患者情報を返す findPatientBySsn
などがあります。
MedRecWebServices.java
で使用される JWS アノテーションは以下のとおりです。
@javax.jws.WebService
- Web サービスの内部的な名前、WSDL ファイルに表示される名前、および WSDL で使用される対象のネーム スペースを指定する、標準のクラス レベルのアノテーション。@WebService(name = "MedRecWebServicesPortType",
serviceName = "MedRecWebServices",
targetNamespace = "http://www.bea.com/medrec")
@javax.jws.SOAPBinding
- document-literal-wrapped (以下の例) や RPC エンコードなど、Web サービスのタイプを指定する標準のクラス レベルのアノテーション。@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
@weblogic.jws.WLHttpTransport
- WSDL ファイル内のポートの名前や Web サービスの呼び出しに使用される URI を指定する、WebLogic 固有のクラス レベルのアノテーション。@WLHttpTransport(portName = "MedRecWebServicesPort",
contextPath = "ws_medrec",
serviceUri = "MedRecWebServices")
@javax.jws.WebMethod
- Web サービスのパブリック オペレーションとして公開される JWS ファイルのメソッドを指定する、標準のメソッド レベルのアノテーション。
JWS ファイルの作成の詳細については、「JWS ファイルのプログラミング」を、JWS ファイルで使用できる JWS アノテーションの完全なリストについては、「JWS アノテーション リファレンス」を参照してください。
JWS ファイルをプログラミングしたら、jwsc
Ant タスクを使用してデプロイ可能な Web サービスを生成します。
medrecEar
サブディレクトリに移動します。prompt> cd c:\medrec_tutorial\src\medrecEar
medrecEar
ディレクトリに my_webserv.xml
というファイルを作成します。prompt> notepad my_webserv.xml
注意 : | ビルド ファイルを手動で入力したくない場合は、ファイル webservices_tutorial.xml を新しいファイル名 my_webserv.xml にコピーします。その上で、以降の手順でこのファイルの内容を理解してください。webservices_tutorial.xml ファイルは、c:/medrec_tutorial を MedRec プロジェクト ディレクトリとして扱います。 |
my_webserv.xml
ファイルに次の行を追加します (必要に応じて、c:/medrec_tutorial
を実際の MedRec プロジェクト ディレクトリに置き換えてください)。この手順の後の方で Ant タスクについて説明します。<project name="WebServicesTutorial" default="build.ws">
<path id="jwsc.class.path">
<pathelement path="${java.class.path}"/>
<pathelement path="c:/medrec_tutorial/build/medrecEar/sessionEjbs"/>
<pathelement path="c:/medrec_tutorial/build/medrecEar/APP-INF/lib/value.jar" />
<pathelement path="c:/medrec_tutorial/build/medrecEar/APP-INF/lib/utils.jar" />
<pathelement path="c:/medrec_tutorial/build/medrecEar/APP-INF/lib/log4j.jar" />
</path>
<taskdef name="jwsc" classname="weblogic.wsee.tools.anttasks.JwscTask" />
<target name="build.ws">
<jwsc
srcdir="webServices/com/bea/medrec/webservices"
sourcepath="webServices"
destdir="c:/medrec_tutorial/build/medrecEar"
applicationXml="c:/medrec_tutorial/src/medrecEar/META-INF/application.xml"
>
<classpath refid="jwsc.class.path" />
<jws file="MedRecWebServices.java" explode="true"/>
</jwsc>
</target>
</project>
<path>
要素を使用して jwsc.class.path
という構造が作成されています。ここには、JWS ファイルをコンパイルするときに、jwsc
Ant タスクの CLASSPATH に後で追加されるディレクトリと JAR ファイルのリストが含まれています。
<taskdef>
タスクでは、jwsc
Ant タスクの完全なクラス名を指定しています。
<jwsc>
Ant タスクでは以下の属性を使用しています。
srcdir
- MedRecWebServices.java JWS ファイルを格納している最上位ディレクトリのパス名。sourcepath
- パラメータとして使用される JavaBean やユーザ定義の例外など、JWS ファイルで参照される Java ファイルを格納する最上位ディレクトリのパス名。destdir
- コンパイルされた JWS ファイル、XML スキーマ、WSDL、および生成されたデプロイメント記述子ファイルが格納されるディレクトリのパス名。applicationXml
- エンタープライズ アプリケーションの application.xml
デプロイメント記述子の名前およびパス。
<jwsc>
要素の <classpath>
子要素は、<path>
要素で先に指定したディレクトリと JAR ファイルを CLASSPATH に追加しています。<jws>
子要素は、コンパイルされる JWS ファイルの名前を指定し、生成されるコンポーネントが WAR または JAR ファイルにアーカイブ化されるのではなく、展開形式になることを指定しています。
my_webserv.xml
ファイルを作成したら、そのファイルを使用して jwsc
Ant タスクを実行し、MedRecWebServices.java
JWS ファイルに基づいて Web サービスのアーティファクトを生成します。
MedRecDomain
環境スクリプトを使用して環境を設定します。prompt> c:\bea\user_projects\domains\MedRecDomain\bin\setDomainEnv.cmd
medrecEar
ディレクトリに移動します。prompt> cd c:\medrec_tutorial\src\medrecEar
ant
コマンドを使用して my_webserv.xml
スクリプトを実行し、Web サービス Ant タスクを実行します。prompt> ant -f my_webserv.xml
jwsc
Ant タスクにより、進捗状況を示す以下のような出力が表示されます。
Buildfile: my_webserv.xml
build.ws:
[jwsc] JWS: processing module /MedRecWebServices
[jwsc] Parsing source files
[jwsc] Parsing source files
[jwsc] 1 JWS files being processed for module /MedRecWebServices
[jwsc] JWS: C:\medrec_tutorial\src\medrecEar\webServices\com\bea\medrec\webservices\MedRecWebServices.java Validated.
[jwsc] Compiling 2 source files to C:\WINDOWS\TEMP\_40m0yp
[jwsc] Copying 1 file to C:\medrec_tutorial\build\medrecEar\MedRecWebServices\WEB-INF
[jwsc] Copying 9 files to C:\medrec_tutorial\build\medrecEar\MedRecWebServices\WEB-INF
[jwsc] Copying 4 files to C:\medrec_tutorial\build\medrecEar\MedRecWebServices\WEB-INF\classes
[jwsc] Copying 2 files to C:\medrec_tutorial\build\medrecEar\MedRecWebServices
[jwsc] [EarFile] Application File : C:\medrec_tutorial\src\medrecEar\META-INF\application.xml
[AntUtil.deleteDir] Deleting directory C:\WINDOWS\TEMP\_40m0yp
BUILD SUCCESSFUL
Total time: 16 seconds
上記の出力が表示されなかった場合や、問題が発生した場合には、代わりに、このチュートリアルで提供されている Ant ビルド ファイルを使用できます。
prompt> ant -f webservices_tutorial.xml
jwsc
Ant タスクによって生成されたアーティファクトは更新するべきではありませんが、デプロイ可能な Web サービスの構成内容を理解するために、表示すると役立つことがあります。
jwsc
Ant タスクが MedRecWebServices
のアーティファクトを生成したビルド ディレクトリに移動します。
prompt> cd c:\medrec_tutorial\build\medrecEar\MedRecWebServices
com/bea/medrec/webservices/MedRecWebServicesPortType.java
ファイルは生成されたエンドポイント サービス インタフェース ファイルです。その内容は、Web サービスのパブリック オペレーションとして公開される、JWS ファイルのメソッドに基づいています。
WEB-INF
サブディレクトリには、生成されたデプロイメント記述子 (webservices.xml
や weblogic-webservices.xml
など) と生成された WSDL ファイル MedRecWebServices.wsdl
が格納されています。この Web サービスは Web アプリケーション アーカイブにパッケージ化されるため、このディレクトリには対応する記述子 (web.xml
および weblogic.xml
) も含まれています。WEB-INF\classes
サブディレクトリには、コンパイルされた Web サービス クラスが格納されています。JWS ファイルからコンパイルされたものと、生成された Java ファイルからコンパイルされたもの (サービス エンドポイント インタフェース MedRecWebServicesPortType.java
など) があります。
この節では、「チュートリアル 9 : 開発環境の MedRec のデプロイ」で Physician アプリケーションをデプロイしたのと同じ方法で、MedRecWebServices
Web サービスを含む MedRec アプリケーション全体をデプロイします。ただし、このチュートリアルでは、新しいターゲットを作成するのではなく、medrecEar
ディレクトリにある既存の build.xml
ファイルの deploy ターゲットを使用します。
Web サービスをデプロイしたら、その WSDL ファイルを表示できます。
MedRecServer
が起動していない場合は、コマンド ウィンドウから起動スクリプトを実行して起動します。prompt> c:\bea\user_projects\domains\MedRecDomain\startweblogic.cmd
prompt> c:\bea\wlserver_10.0\common\eval\pointbase\tools\
startPointBase.cmd
prompt> c:\bea\user_projects\domains\MedRecDomain\bin\setDomainEnv.cmd
medrecEar
サブディレクトリ以外にいる場合は、このサブディレクトリに移動します。prompt> cd c:\medrec_tutorial\src\medrecEar
build.xml
ファイルの deploy.medrec.ear
ターゲットを実行します。prompt> ant deploy.medrec.ear
wldeploy
タスクにより、以下のような出力が表示されます。
Buildfile: build.xml
deploy.medrec.ear:
[wldeploy] weblogic.Deployer -noexit -name MedRecEAR -source C:\medrec_tutorial\build\medrecEar -targets MedRecServer -adminurl t3://localhost:7101 -user weblogic -password ******** -deploy -submoduletargets MedRecJMSServer@MedRecAppScoped JMS@MedRecJMSServer -securityModel CustomRolesAndPolicies
[wldeploy] weblogic.Deployer invoked with options: -noexit -name MedRecEAR -source C:\medrec_tutorial\build\medrecEar -targets MedRecServer -adminurl t3://localhost:7101 -user weblogic -deploy -submoduletargets MedRecJMSServer@MedRecAppScopedJMS@MedRecJMSServer -securityModel CustomRolesAndPolicies
[wldeploy] <Apr 5, 2007 2:26:18 PM PDT> <Info> <J2EE Deployment SPI> <BEA-260121> <Initiating deploy operation for application, MedRecEAR [archive: C:\medrec_tutorial\build\medrecEar], to MedRecServer MedRecJMSServer .>
[wldeploy] Task 9 initiated: [Deployer:149026]deploy application MedRecEAR on MedRecJMSServer,MedRecServer.
[wldeploy] Task 9 completed: [Deployer:149026]deploy application MedRecEAR on MedRecJMSServer,MedRecServer.
[wldeploy] Target state: deploy completed on JMS Server MedRecJMSServer
[wldeploy] Target state: deploy completed on Server MedRecServer
[wldeploy]
BUILD SUCCESSFUL
Total time: 34 seconds
上記の出力が表示されない場合は、MedRecServer が起動を完了していない可能性があります。その場合は、サーバを起動したコマンド ウィンドウで以下の状態が表示されるまで待機してから、deploy タスクに戻ってください。
<Apr 4, 2007 1:14:15 PM PDT> <Notice> <WebLogicServer> <BEA-000360> <Server started in RUNNING mode>
medrecEar
をデプロイしようとしたときに以下のエラーが表示された場合は、以前に Administration Console を使用したときにコンフィグレーションを解放していなかった可能性があります。
BUILD FAILED
C:\medrec_tutorial\src\physicianEar\deploy.xml:8: weblogic.management.ManagementException: [Deployer:149163]The domain edit lock is owned by another session in non-exclusive mode - this deployment operation requires exclusive access to the edit lock and hence cannot proceed.
この場合は、Administration Console で [変更のアクティブ化] または [コンフィグレーションの解放] をクリックしてから、deploy タスクを再度実行してください。
http://host
:7101/ws_medrec/MedRecWebServices?WSDL
host
は MedRecServer が実行されているコンピュータを指します。ブラウザが MedRecServer と同じコンピュータにある場合は、以下の URL を使用できます。
http://localhost:7101/
ws_medrec/MedRecWebServices?WSDL
@SOAPBinding
アノテーションを使用して Web サービスのタイプを指定します。document-literal-wrapped はデフォルトです。jwsc
Ant タスクを使用して、必要なすべての Web サービス アーティファクトを JWS ファイルから生成します。
MedRec アプリケーションの com.bea.medrec.webservices.MedRecWebServices
JWS ファイルには、getRecord()
、findPatientByLastName()
、updatePatient()
など、患者情報や医療記録情報を表示したり更新したりするメソッドが含まれます。パブリック オペレーションとして公開される JWS ファイルのメソッドには @WebMethod
アノテーションを付けます。実際にこれらのメソッドがビジネス ロジックを実行するのではなく、既存のセッション EJB (com.bea.medrec.controller.PatientSession
、com.bea.medrec.controller.RecordSession
など) を呼び出して、その EJB が患者情報や医療記録情報を表示したり検索したりする実際の作業を行います。MedRecWebServices
Web サービスは、MedRec アプリケーションが受信したリクエストを、実際の作業を行う他のセッション EJB やエンティティ EJB に渡す「窓口」だと考えることができます。
MedRecWebServices
JWS ファイルのメソッドは、パラメータおよび戻り値として次のユーザ定義 Java データ型を使用します。
クライアントは SOAP を使用して Web サービスを呼び出し、SOAP は XML ファイルを使用してネットワーク上で情報を転送するため、Java データ型には対応する XML スキーマ データ型が必要になります。これらのデータ型は、Web サービス ランタイムが、患者情報や医療記録情報を Java 表現と XML 表現の間で変換するときに使用します。jwsc
Ant タスクは JWS ファイルをコンパイルするときに、これらの Java データ型の XML スキーマ型も自動的に生成します。XML スキーマ型を確認するには、生成された WSDL ファイルの <types>
要素を参照してください。
MedRecWebServices
Web サービスがデプロイされると、別の WebLogic Server インスタンスで実行されている EJB から .NET クライアントまで、あらゆる種類のクライアント アプリケーションが、Web サービスのオペレーションを使用して、MedRec アプリケーションで管理されている患者情報や医療記録情報に簡単にアクセスしたり、更新したりできます。クライアント アプリケーションが SOAP を使用して Web サービス オペレーションを呼び出し、次に WebLogic Server が SOAP を使用してクライアントに情報を返します。
![]() ![]() ![]() |