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

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

 


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

 


チュートリアル 7 : Ant タスクによる分割開発ディレクトリ アプリケーションのコンパイル

このチュートリアルでは、wlcompile Ant タスクを使用してエンタープライズ アプリケーションのソース ファイルをコンパイルする方法を説明します。wlcompile は WebLogic 分割開発ディレクトリ構造を使用して、コンパイル済みの Java クラスが格納されるビルドまたは出力ディレクトリを生成します。ビルド ディレクトリと「チュートリアル 6 : WebLogic Server の分割ディレクトリ構造について」で説明されるソース ディレクトリで、WebLogic Server のデプロイ可能なアプリケーションが構成されます。

分割開発ディレクトリを使用して以下のようなアプリケーション ビルド タスクを実行するその他の WebLogic Server Ant タスクの使用方法については、後続のチュートリアルで説明します。

このチュートリアルは、以下の節で構成されています。

 


前提条件

このチュートリアルを始める前に、以下のことを行ってください。

medrec_tutorial.zip ファイルを復元した後で \build ディレクトリの内容を見ると、MedRec アプリケーションを構成する多くのクラスがすでにビルドされていることがわかります。\medrecEar および \startBrowserEar アプリケーションのすべてのクラスや、\physicianEar アプリケーションの Web サービスなどです。このチュートリアルでは、wlcompile Ant タスクを使用して、まだコンパイルされていない physicianEar アプリケーションのクラス (EJB や Web サービス関連) をコンパイルする方法について説明します。ビルド済みのクラスは、再コンパイルすることもできます。

 


手順

MedRec アプリケーション スイートで分割開発ディレクトリと共に wlcompile タスクを使用するには、次の手順に従います。

手順 1 : build.xml ファイルを作成する

WebLogic 分割開発ディレクトリ構造を使用してソース ファイルを格納すると、アプリケーションのコンパイルに必要な build.xml ファイルを簡略化できます。ほとんどのエンタープライズ アプリケーションの場合、すべてのモジュールをコンパイルするのに数行の簡単なスクリプトで十分です。wlcompile タスクにより、アプリケーションで使用されるモジュールが自動的に判断され、それに従ってクラスパスの依存関係が維持されるからです。

注意: このリリースの WebLogic Server では、wlcompile Ant タスクは Java Web サービス (JWS) ファイルで実装された Web サービスをコンパイルしません。代わりに、wlcompile タスクを呼び出して EJB などの他のすべてのコンポーネントをコンパイルする前に、jwsc Web サービス Ant タスクを明示的に呼び出して Web サービスを生成する必要があります。jwsc の詳細については、「チュートリアル 11 : JWS ファイルのプログラミングによる J2EE Web サービスの作成」で説明します。
  1. wlcompile のしくみを理解するために、簡単な XML ファイルを作成して Physician アプリケーションをコンパイルします。まず MedRec プロジェクト ディレクトリ内の physicianEar サブディレクトリに移動します。
  2. prompt> cd c:\medrec_tutorial\src\physicianEar

    physicianEar の最上位には、エンタープライズ アプリケーションを構成する Web アプリケーション、EJB、および Web サービス コンポーネントのサブディレクトリが含まれます。XML ファイルもこの場所に格納します。

  3. テキスト エディタを使用して、physicianEar ディレクトリに新しい mybuild.xml ファイルを作成します。
  4. prompt> notepad mybuild.xml
    注意: build.xml ファイルを手動で入力したくない場合は、wlcompile_tutorial.xml ファイル (c:\medrec_tutorial\src\physicianEar 内) をコピーして、新しいファイル名 mybuild.xml にします。その上で、以降の手順でこのファイルの内容を理解してください。
  5. mybuild.xml ファイルで、まず tutorial という名前のプロジェクトを定義します。
  6. <project name="tutorial" default="build">
  7. アプリケーションをビルドするメイン ターゲットを定義します。このターゲット (名前は build) は、非常に単純です。wlcompile タスクを使用して、ソース ディレクトリ (分割開発ディレクトリ構造を使用) およびコンパイルされたファイルを格納する出力ディレクトリを指定します。次の行を入力します。
  8.   <target name="build">
    <wlcompile srcdir="c:/medrec_tutorial/src/physicianEar"
    destdir="c:/medrec_tutorial/build/physicianEar">
    <ejbgen source="1.5" />
    </wlcompile>
    </target>

    単純なエンタープライズ アプリケーションで必要なことは、多くの場合、wlcompile でコンパイル用に使用するソース ディレクトリとビルド ディレクトリを指定することだけです。srcdir ディレクトリと destdir ディレクトリが必ず別々の場所を指すようにしてください。開発プロセス中はソース ファイルと出力ファイルが別々に格納されるようにする必要があります。

    ejbgen Ant タスクでは、EJBGen コマンドが *.ejb ファイルを処理するときに使用する JDK のバージョンを指定します。MedRec の EJB は新しい JDK 5.0 メタデータ アノテーション機能を使用しているため、version 属性を 1.5 (JDK の 5.0 バージョンと同じ) に設定してください。

  9. mybuild.xml ファイルを完成するには、次の行を追加してプロジェクトを閉じます。
  10. </project>

    完成したファイルは次のようになっている必要があります。すべてのテキストを入力する代わりに、wlcompile_tutorial.xml をコピーすることもできます。

    <project name="tutorial" default="build">

    <target name="build">
    <wlcompile srcdir="c:/medrec_tutorial/src/physicianEar"
    destdir="c:/medrec_tutorial/build/physicianEar">
    <ejbgen source="1.5" />
    </wlcompile>
    </target>

    </project>

手順 2 : アプリケーションをコンパイルする

mybuild.xml ファイルを作成したら、これを使用してアプリケーションをコンパイルできます。

  1. 次のように MedRecDomain 環境スクリプトを使用して環境を設定済みであることを確認します。
  2. prompt> c:\bea\user_projects\domains\MedRecDomain\bin\setDomainEnv.cmd
  3. physicianEar ディレクトリに移動し、ant コマンドを使用して mybuild.xml スクリプトを実行してコンパイルします。
  4. prompt> cd c:\medrec_tutorial\src\physicianEar
    prompt> ant -f mybuild.xml

    ビルド スクリプトに情報メッセージを追加しなかった場合でも、wlcompile タスクにより、進捗状況を示す独自の出力が表示されます。

    Buildfile: mybuild.xml
    build:
    [javac] Compiling 1 source file to C:\medrec_tutorial\build\physicianEar\APP-INF\classes
    [ejbgen] EJBGen WebLogic Server 9.2 SP0 Fri Jun 23 20:47:26 EDT 2006 783464
       [ejbgen]  Creating C:\medrec_tutorial\build\physicianEar\physSessionEjbs\com\bea\medrec\controller\PhysicianSessionHome.java
    [ejbgen] Creating C:\medrec_tutorial\build\physicianEar\physSessionEjbs\com\bea\medrec\controller\PhysicianSession.java
    [ejbgen] Creating C:\medrec_tutorial\build\physicianEar\physSessionEjbs\\ejb-jar.xml
    [ejbgen] Creating C:\medrec_tutorial\build\physicianEar\physSessionEjbs\\weblogic-ejb-jar.xml
    [move] Moving 2 files to C:\medrec_tutorial\build\physicianEar\physSessionEjbs\META-INF
    [javac] Compiling 3 source files to C:\medrec_tutorial\build\physicianEar\physSessionEjbs
    [wlcompile] Note: C:\medrec_tutorial\build\physicianEar\physSessionEjbs\com\bea\medrec\controller\PhysicianSessionEJB.java uses or overrides a deprecated API.
    [wlcompile] Note: Recompile with -Xlint:deprecation for details.
    [javac] Compiling 12 source files to C:\medrec_tutorial\build\physicianEar\physicianWebApp\WEB-INF\classes
    BUILD SUCCESSFUL
    Total time: 10 seconds
  5. 上記の出力が表示されなかった場合や、問題が発生した場合には、代わりに、このチュートリアルで提供されている Ant ビルド ファイルを使用できます。
  6. prompt> ant -f wlcompile_tutorial.xml

手順 3 : 出力ファイルを検査する

physicianEar をコンパイルしたので、ここでビルド ディレクトリがどのようになっているかを確認します。ビルド ターゲットのすべての出力は、エンタープライズ アプリケーションの出力ディレクトリ c:\medrec_tutorial\build\physicianEar にあります。

wlcompile の出力は、ビルドがまず、Physician アプリケーションのセッション EJB の ejbgen を実行したことを示しています。デプロイメント記述子が作成されたことを確認してください。

prompt> dir c:\medrec_tutorial\build\physicianEar\physSessionEjbs\META-INF
 Directory of c:\medrec_tutorial\build\physicianEar\physSessionEjbs\META-INF
07/24/2006  02:56 PM    <DIR>          .
07/24/2006 02:56 PM <DIR> ..
07/24/2006 02:56 PM 2,294 ejb-jar.xml
07/24/2006 02:56 PM 1,037 weblogic-ejb-jar.xml

また、wlcompile Ant タスクで実際の EJB クラスもコンパイルされ、physSessionEjbs ディレクトリにコピーされています。

prompt> dir c:\medrec_tutorial\build\physicianEar\physSessionEjbs\com\bea\medrec\controller

Directory of c:\medrec_tutorial\build\physicianEar\physSessionEjbs\com\bea\medrec\controller
07/24/2006  02:54 PM    <DIR>          .
07/24/2006 02:54 PM <DIR> ..
07/24/2006 02:56 PM 731 PhysicianSession.class
07/24/2006 02:56 PM 3,013 PhysicianSession.java
07/24/2006 02:56 PM 7,683 PhysicianSessionEJB.class
07/24/2006 02:56 PM 10,724 PhysicianSessionEJB.java
07/24/2006 02:56 PM 326 PhysicianSessionHome.class
07/24/2006 02:56 PM 994 PhysicianSessionHome.java

wlcompile により Web アプリケーションのサーブレット クラスがコンパイルされ、WEB-INF\classes ディレクトリに置かれています。

prompt> dir c:\medrec_tutorial\build\physicianEar\physicianWebApp\WEB-INF\classes\com\bea\medrec
 Directory of c:\medrec_tutorial\build\physicianEar\physicianWebApp\WEB-INF\classes\com\bea\medrec
07/24/2006  02:54 PM    <DIR>          .
07/24/2006 02:54 PM <DIR> ..
07/24/2006 02:54 PM <DIR> actions

actions ディレクトリには Struts アクション クラスが格納されます。

エンタープライズ アプリケーションのビルド ディレクトリ (c:\medrec_tutorial\build\physicianEar) 全体には、EJB および Web サービス コンポーネントのみのデプロイメント記述子ファイルが含まれています。これは、EJB 記述子と Web サービス記述子が、それぞれ ejbgen と Java Web サービス (JWS) アノテーションを使用して生成されるためです (Web サービスは .zip ファイルの一部としてあらかじめコンパイルされています)。ビルド スクリプトを再び実行して、EJB および Web サービス デプロイメント記述子を含むビルド ディレクトリの内容全体を再作成できます。

エンタープライズ アプリケーションおよび Web アプリケーションのデプロイメント記述子 (application.xmlweblogic-application.xmlweb.xml、および weblogic.xml) は、手動で作成および編集されるためソース ディレクトリに残っています。これらは簡単に置き換えたり再ビルドしたりすることはできません。

 


ベスト プラクティス

より複雑なエンタープライズ アプリケーションでは、wlcompile タスクで自動的に処理できないコンパイルの依存関係がある場合があります。ただし、wlcompileinclude および exclude オプションを使用して独自の依存関係を強制できます。include および exclude オプションはエンタープライズ アプリケーションのモジュール名 (エンタープライズ アプリケーションのソース ディレクトリ内のサブディレクトリ名) を受けて、これらをコンパイル処理に含めたり除外したりします。例については、「全体像」を参照してください。

 


全体像

MedRec エンタープライズ アプリケーションでは WebLogic 分割開発ディレクトリ構造を使用し、ビルド スクリプトで wlcompile タスクを使用しますが、デフォルトの wlcompile タスクで処理されない特定の依存関係があります。たとえば、build.xml ファイルの次のようなサンプルを見てみましょう。

    <wlcompile srcdir="${src.dir}" destdir="${dest.dir}"
excludes="adminWebApp, xml, mdbEjbs, webServicesEjb"/>

ビルド スクリプトがまず、エンタープライズ アプリケーションの adminWebAppxmlmdbEjbs、および webServicesEjb を除くすべてのモジュールをコンパイルすることがわかります。コンパイルされないこれらのモジュールは、ソース ディレクトリ内のサブディレクトリ名に対応しています。

続いて、アプリケーションの xml および webServicesEjb モジュールだけがコンパイルされます

    <wlcompile srcdir="${src.dir}" destdir="${dest.dir}"
includes="xml, webServicesEjb"

また、コンパイルの前に、wlcompile Ant タスクは、build/earName/APP-INF/lib および build/earName/APP-INF/classes の両方の内容を CLASSPATH に追加することに注意してください。

 


関連情報


  ページの先頭       前  次