Avitek Medical Record 開発チュートリアル

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

 


MedRec アプリケーションの開発

 


チュートリアル 11 : JWS ファイルのプログラミングによる Java EE Web サービスの作成

警告 : 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 サービスを実装するには、次の手順に従います。

手順 1 : Web サービスを実装する MedRecWebServices.java JWS ファイルを表示する

  1. コマンド ウィンドウを開いて、MedRecWebServices サービスを実装する MedRecWebServices.java JWS ファイルが格納されているディレクトリに移動します。
  2. prompt> cd C:\medrec_tutorial\src\medrecEar\webServices\com\bea\medrec\webservices
  3. IDE またはテキスト エディタを使用して MedRecWebServices.java ファイルを表示します。
  4. 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 アノテーション リファレンス」を参照してください。

手順 2 : jwsc Ant タスクの呼び出しを含むビルド ファイルを作成する

JWS ファイルをプログラミングしたら、jwsc Ant タスクを使用してデプロイ可能な Web サービスを生成します。

  1. コマンド ウィンドウを開いて、MedRec プロジェクト ディレクトリ内の medrecEar サブディレクトリに移動します。
  2. prompt> cd c:\medrec_tutorial\src\medrecEar
  3. テキスト エディタを使用して、medrecEar ディレクトリに my_webserv.xml というファイルを作成します。
  4. prompt> notepad my_webserv.xml
    注意 : ビルド ファイルを手動で入力したくない場合は、ファイル webservices_tutorial.xml を新しいファイル名 my_webserv.xml にコピーします。その上で、以降の手順でこのファイルの内容を理解してください。webservices_tutorial.xml ファイルは、c:/medrec_tutorial を MedRec プロジェクト ディレクトリとして扱います。
  5. my_webserv.xml ファイルに次の行を追加します (必要に応じて、c:/medrec_tutorial を実際の MedRec プロジェクト ディレクトリに置き換えてください)。この手順の後の方で Ant タスクについて説明します。
  6. <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 タスクでは以下の属性を使用しています。

<jwsc> 要素の <classpath> 子要素は、<path> 要素で先に指定したディレクトリと JAR ファイルを CLASSPATH に追加しています。<jws> 子要素は、コンパイルされる JWS ファイルの名前を指定し、生成されるコンポーネントが WAR または JAR ファイルにアーカイブ化されるのではなく、展開形式になることを指定しています。

手順 3 : jwsc Ant タスクを実行して Web サービスを生成する

my_webserv.xml ファイルを作成したら、そのファイルを使用して jwsc Ant タスクを実行し、MedRecWebServices.java JWS ファイルに基づいて Web サービスのアーティファクトを生成します。

  1. コマンド ウィンドウを開いて、MedRecDomain 環境スクリプトを使用して環境を設定します。
  2. prompt> c:\bea\user_projects\domains\MedRecDomain\bin\setDomainEnv.cmd
  3. medrecEar ディレクトリに移動します。
  4. prompt> cd c:\medrec_tutorial\src\medrecEar
  5. ant コマンドを使用して my_webserv.xml スクリプトを実行し、Web サービス Ant タスクを実行します。
  6. 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

手順 4 : 生成された Web サービスのアーティファクトを表示する

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.xmlweblogic-webservices.xml など) と生成された WSDL ファイル MedRecWebServices.wsdl が格納されています。この Web サービスは Web アプリケーション アーカイブにパッケージ化されるため、このディレクトリには対応する記述子 (web.xml および weblogic.xml) も含まれています。WEB-INF\classes サブディレクトリには、コンパイルされた Web サービス クラスが格納されています。JWS ファイルからコンパイルされたものと、生成された Java ファイルからコンパイルされたもの (サービス エンドポイント インタフェース MedRecWebServicesPortType.java など) があります。

手順 5 : Web サービスをデプロイして WSDL を表示する

この節では、「チュートリアル 9 : 開発環境の MedRec のデプロイ」で Physician アプリケーションをデプロイしたのと同じ方法で、MedRecWebServices Web サービスを含む MedRec アプリケーション全体をデプロイします。ただし、このチュートリアルでは、新しいターゲットを作成するのではなく、medrecEar ディレクトリにある既存の build.xml ファイルの deploy ターゲットを使用します。

Web サービスをデプロイしたら、その WSDL ファイルを表示できます。

  1. MedRecServer が起動していない場合は、コマンド ウィンドウから起動スクリプトを実行して起動します。
  2. prompt> c:\bea\user_projects\domains\MedRecDomain\startweblogic.cmd
  3. PointBase が起動していない場合は、別のコマンド ウィンドウから起動スクリプトを実行して起動します。
  4. prompt> c:\bea\wlserver_10.0\common\eval\pointbase\tools\startPointBase.cmd
  5. 別のコマンド シェルを開き、環境を設定します。
  6. prompt> c:\bea\user_projects\domains\MedRecDomain\bin\setDomainEnv.cmd
  7. medrecEar サブディレクトリ以外にいる場合は、このサブディレクトリに移動します。
  8. prompt> cd c:\medrec_tutorial\src\medrecEar
  9. 以下のコマンドを実行して、既存の build.xml ファイルの deploy.medrec.ear ターゲットを実行します。
  10. 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 タスクを再度実行してください。

  11. Web サービスがデプロイされたことを確認するには、新しいブラウザ ウィンドウを開き、この Web サービスの WSDL の URL を入力します。
  12. http://host:7101/ws_medrec/MedRecWebServices?WSDL

    host は MedRecServer が実行されているコンピュータを指します。ブラウザが MedRecServer と同じコンピュータにある場合は、以下の URL を使用できます。

    http://localhost:7101/ws_medrec/MedRecWebServices?WSDL

 


ベスト プラクティス

 


全体像

MedRec アプリケーションの com.bea.medrec.webservices.MedRecWebServices JWS ファイルには、getRecord()findPatientByLastName()updatePatient() など、患者情報や医療記録情報を表示したり更新したりするメソッドが含まれます。パブリック オペレーションとして公開される JWS ファイルのメソッドには @WebMethod アノテーションを付けます。実際にこれらのメソッドがビジネス ロジックを実行するのではなく、既存のセッション EJB (com.bea.medrec.controller.PatientSessioncom.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 を使用してクライアントに情報を返します。

 


関連情報


ページの先頭       前  次