この章の内容は次のとおりです。
WebLogic分割開発ディレクトリ環境は、ディレクトリ・レイアウトと、Java EEアプリケーションの反復的なビルド、変更、およびデプロイメントを支援する関連Antタスクで構成されます。他の開発フレームワークと比較して、WebLogic分割開発ディレクトリには、これらのメリットがあります。
迅速な開発とデプロイメント。不必要なファイルのコピーを最小限に抑えることにより、分割開発ディレクトリのAntタスクはデプロイ可能なアーカイブ・ファイルまたは展開アーカイブ・ディレクトリを最初に生成しないで迅速なアプリケーションの再コンパイルと再デプロイを支援します。
シンプルな構築スクリプト。Oracle提供のAntタスクは、作成するJava EEモジュールおよびクラスを自動的に判別し、一般的なクラスパスの依存関係をサポートする適切な順序でコンポーネントをビルドします。多くの場合、プロジェクトの構築スクリプトはただ単にソース・ディレクトリとビルド・ディレクトリを識別し、Antタスクがそのデフォルト動作を実行できるようにするだけです。
ソース制御システムとの簡単な統合。分割開発ディレクトリは、ソース・ファイルと生成ファイルを完全に分離します。このため、編集可能なファイルのみをソース制御システムに維持することができます。また、ビルド・ディレクトリ全体を削除することでビルドをクリーン・アップすることもできます(ビルド・ファイルはプロジェクトの再ビルドで簡単に置換されます)。
ソース・ディレクトリとビルド・ディレクトリは、分割開発ディレクトリ環境の基盤です。ソース・ディレクトリには、プロジェクトのすべての編集可能なファイル(Javaソース・ファイル、編集可能な記述子ファイル、JSP、静的コンテンツなど)が格納されます。アプリケーションのソース・ディレクトリは、「分割開発ディレクトリでのJava EEコンポーネントの配置」で説明されているディレクトリ構造のガイドラインに従って作成します。
ソース・ディレクトリの最上位レベルは、1つのJava EEモジュールのみを開発している場合であっても、常にエンタープライズ・アプリケーション(.ear
ファイル)を表します。最上位ソース・ディレクトリの下のサブディレクトリには、次が含まれます。
エンタープライズ・アプリケーションのモジュール(EJBやWebアプリケーション)
注意:
分割開発ディレクトリ構造は、新しいリソース・アダプタ・コンポーネントの開発をサポートしていません。
エンタープライズ・アプリケーションの記述子ファイル(application.xml
およびweblogic-application.xml
)
アプリケーションの複数のモジュールで共有されるユーティリティ・クラス(例外、定数など)
アプリケーションのモジュールで使用されるライブラリ(コンパイル済み.jar
ファイル - サード・パーティのライブラリを含みます)
ビルド・ディレクトリの内容は、有効なソース・ディレクトリに対してwlcompile
antタスクを実行すると自動的に生成されます。wlcompile
タスクはソース・ディレクトリ内のEJB、Webアプリケーション、および共有のライブラリ・ディレクトリとクラス・ディレクトリを認識し、一般的なクラス・パスの要件をサポートする順序でそれらのコンポーネントをビルドします。補足的なAntタスクを使用すると、Webサービスをビルドするか、アノテーション付きのEJBコードからデプロイメント記述子ファイルを生成できます。
ビルド・ディレクトリには、ビルド・プロセスで生成されたファイルのみが格納されます。ソース・ディレクトリとビルド・ディレクトリのファイルを組み合わせることにより、デプロイ可能なJava EEアプリケーションになります。
ビルド・ディレクトリとソース・ディレクトリの内容は、任意に選択したディレクトリに配置できます。ただし、使いやすいように、それらのディレクトリは1つのプロジェクト・ディレクトリの中のsource
およびbuild
というディレクトリに配置されます(たとえば、\myproject\build
および\myproject\source
)。
すべてのWebLogic Serverデプロイメント・ツール(weblogic.Deployer
、wldeploy
およびWebLogic Server管理コンソール)は、分割開発ディレクトリからの直接のデプロイメントをサポートしています。WebLogic Serverにアプリケーションをデプロイする場合は、ビルド・ディレクトリのみ指定します。
WebLogic Serverは、アプリケーションのデプロイメントでソース・ディレクトリ内のすべてのクラスとリソースを使用しようとします。必要なリソースがソース・ディレクトリにない場合、WebLogic Serverはアプリケーションのビルド・ディレクトリでそのリソースを探します。たとえば、編集可能なファイルとしてソース・コードと一緒に格納されているのではなく、ビルド・プロセスの過程でデプロイメント記述子が生成された場合、WebLogic Serverはその生成ファイルをビルド・ディレクトリから取得します。
WebLogic Serverは、アプリケーションのビルド・ディレクトリの最上位の位置にある.beabuild.txt
ファイルを調べてソース・ディレクトリの位置を確認します。ソース・ディレクトリを移動した場合は、.beabuild.txt
ファイルを編集して新しいソース・ディレクトリ名を指定してください。
「wldeployを使用したアプリケーションのデプロイメント」では、分割ディレクトリ環境からのデプロイメントを自動化するために使用できるwldeploy
Antタスクが説明されています。
図4-2では、一般的なデプロイメント・プロセスを示します。このプロセスは、WebLogic Serverのツールでビルド・ディレクトリを指定することから始まります。この図で、コンパイルされたクラスと生成されたデプロイメント記述子はすべてビルド・ディレクトリにありますが、他のアプリケーション・リソース(静的ファイルや編集可能なデプロイメント記述子など)はどこにあるかわかりません。WebLogic Serverは隠された.beabuild.txt
ファイルを使用して、必要なリソースのあるアプリケーションのソース・ディレクトリを見つけます。
Oracleでは、分割開発ディレクトリ環境を使用したアプリケーションの開発を支援するAntタスクのコレクションを用意しています。各Antタスクは、ソース・ディレクトリ、ビルド・ディレクトリ、またはその両方を使用して一般的な開発タスクを実行します。
wlcompile
- このAntタスクは、ソース・ディレクトリの内容をビルド・ディレクトリのサブディレクトリにコンパイルします。wlcompile
はJavaクラスをコンパイルするだけでなく、アノテーション付きの.ejb
ファイルを処理してデプロイメント記述子を作成します(「wlcompileを使用したアプリケーションのコンパイル」を参照)。
wlappc
- このAntタスクは、appcコンパイラを呼び出し、appcコンパイラはJSPおよびコンテナ固有のEJBクラスを生成してデプロイメントします。「wlappcを使用したモジュールおよびアプリケーションのビルド」を参照してください。
wldeploy
- このAntタスクは、任意形式のJava EEアプリケーション(展開されたものでもアーカイブされたものでも)をWebLogic Serverにデプロイします。分割開発ディレクトリ環境から直接デプロイするには、アプリケーションのビルド・ディレクトリを指定します。「wldeploy Antタスクのリファレンス」を参照してください。
wlpackage
- このAntタスクはソース・ディレクトリとビルド・ディレクトリ両方の内容を使用して、デプロイメント用に受け渡すことができるEARファイルまたは展開EARディレクトリを生成します。
分割開発ディレクトリ構造では、各プロジェクトをJava EEエンタープライズ・アプリケーションとしてステージングする必要があります。したがって、分割ディレクトリのAntタスクを有効活用するには、スタンドアロンのWebアプリケーションやEJBでもエンタープライズ・アプリケーションのモジュールとしてステージングすることをお薦めします。このプラクティスを行うことで、後日モジュールを簡単に追加または削除することもできます(アプリケーションがすでにEARとして構成されているため)。
注意:
プロジェクトで複数のEARが必要な場合は、「分割開発ディレクトリを使用した複数EARプロジェクトの開発」も参照してください。
次の項では、分割開発ディレクトリ構造で次のモジュール・タイプをステージングするための基本規約を説明します。
ディレクトリの例は、ORACLE_HOME
\wlserver\samples\src\examples\splitdir
にインストールされたsplitdir
サンプル・アプリケーションから利用します。ORACLE_HOME
はWebLogic Serverのコード・サンプルを構成するディレクトリです。WebLogic Serverサンプル・コードの詳細は、『Oracle WebLogic Serverの理解』のサンプル・アプリケーションおよびサンプル・コードに関する項を参照してください。
次の図は、Webアプリケーション、EJB、共有ユーティリティ・クラスおよびサード・パーティ・ライブラリを持つエンタープライズ・アプリケーションのソース・ディレクトリの内容をまとめたものです。以降の項では、エンタープライズ・ソース・ディレクトリの個々の要素がどのように配置されるのかを詳しく説明します。
分割開発ディレクトリ・プロジェクトの最上位ソース・ディレクトリは、エンタープライズ・アプリケーションを表します。次の図は、このディレクトリに必要な最小限のファイルとディレクトリを示しています。
次の項で説明するように、エンタープライズ・アプリケーション・ディレクトリには、Webアプリケーション、EJB、ユーティリティ・クラス、サード・パーティJARファイルなどを保持する1つまたは複数のサブディレクトリもあります。
Webアプリケーションは、次の図に示されている基本的なソース・ディレクトリ・レイアウトを使用します。
Webアプリケーションの主要なディレクトリとファイルは、次のとおりです。
helloWebApp\
- Webアプリケーション・モジュールの最上位には、JSPファイルや、アプリケーションで使用されるHTMLファイルやグラフィックなどの静的コンテンツを格納できます。静的ファイルは、Webアプリケーションの任意指定のサブディレクトリに格納することもできます(helloWebApp\graphics
やhelloWebApp\static
など。)
helloWebApp\WEB-INF\
- Webアプリケーションの編集可能なデプロイメント記述子のファイル(web.xml
およびweblogic.xml
)をWEB-INF
サブディレクトリに格納します。
helloWebApp\WEB-INF\src
- サーブレットのJavaソース・ファイルはWEB-INF\src
の下のパッケージ・サブディレクトリに格納します。
Webアプリケーションをビルドする際に、appc
Antタスクとjspc
コンパイラはJSPをビルド・ディレクトリのhelloWebApp\WEB-INF\classes\jsp_servlet
の下のパッケージ・サブディレクトリにコンパイルします。そのビルド・プロセスで、編集可能なデプロイメント記述子はコピーされません。
EJBは、次の図に示されているソース・ディレクトリ・レイアウトを使用します。
EJBの主要なディレクトリとファイルは、以下のとおりです。
helloEJB\
- EJBのソース・ファイルはすべて、EJBモジュール・ディレクトリのパッケージ・ディレクトリに格納します。ソース・ファイルは、.java
ソース・ファイルかアノテーション付きの.ejb
ファイルのいずれかです。
helloEJB\META-INF\
- 編集可能なEJBデプロイメント記述子(ejb-jar.xmlおよびweblogic-ejb-jar.xml)はEJBモジュール・ディレクトリのMETA-INF
サブディレクトリに格納します。helloWorldEar
サンプルにはhelloEJB\META-INF
サブディレクトリが含まれていません。その理由は、デプロイメント記述子ファイルが.ejb
ソース・ファイルのアノテーションから生成されているためです。「EJBの記述子に関する重要な注意事項」を参照してください。
ビルド・プロセスの過程で、EJBクラスはビルド・ディレクトリのhelloEJB
モジュールのパッケージ・サブディレクトリにコンパイルされます。また、アノテーション付きの.ejb
ソース・ファイルを使用する場合は、ビルド・プロセスでEJBデプロイメント記述子が生成されて、ビルド・ディレクトリのhelloEJB\META-INF
サブディレクトリに格納されます。
EJBデプロイメント記述子はソースMETA-INF
ディレクトリに含まれ、それらの記述子ファイルがゼロから作成されるか手動で編集される場合のみソース・コードとして取り扱われる必要があります。アノテーション付きの.ejb
ファイルから生成された記述子ファイルはビルド・ディレクトリにのみ配置され、それらのファイルはアプリケーションをビルドすることで削除および再生成できます。
ある特定のEJBコンポーネントについて、EJBのソース・ディレクトリは次のいずれかを含む必要があります:
META-INF
に、.java
ソース・ファイルのEJBソース・コードと編集可能なデプロイメント記述子
または:
META-INF.
に、記述子のアノテーションが.ejb
ソース・ファイルにあるEJBソース・コードと編集できない記述子。
つまり、アノテーション付きの.ejb
ソース・ファイルと編集可能な記述子ファイルを同じEJBコンポーネントで提供してはならないということです。
WebLogic分割開発ディレクトリは、エンタープライズ・アプリケーションのモジュールで必要とされる共有ユーティリティ・クラスとライブラリの格納にも役立ちます。次の項では、共有ユーティリティ・クラスとサード・パーティJARファイルのディレクトリ・レイアウトとクラスローディング動作について説明します。
エンタープライズ・アプリケーションは、アプリケーション・モジュール間で共有されるJavaユーティリティ・クラスを頻繁に使用します。Javaユーティリティ・クラスがサード・パーティのJARと異なる点は、ソース・ファイルがアプリケーションの一部であり、コンパイルを必要とすることです。Javaユーティリティ・クラスは一般的に、EJBまたはWebアプリケーションなどのアプリケーション・モジュールで使用されるライブラリです。
Javaユーティリティ・クラスのソースは、エンタープライズ・アプリケーションの最上位ディレクトリの指定したサブディレクトリに配置します。その指定のサブディレクトリの下では、標準のパッケージ・サブディレクトリ規約を使用します。
ビルド・プロセスの過程で、wlcompile
Antタスクはjavacコンパイラを呼び出し、Javaクラスをビルド・ディレクトリの下のAPP-INF/classes/
ディレクトリにコンパイルします。その結果、デプロイされているアプリケーションの他のモジュールからそれらのクラスが利用可能になります。
エンタープライズ・アプリケーションを拡張してサード・パーティの.jar
ファイルを使用するには、それらのファイルを次のようにAPP-INF\lib\
ディレクトリに配置します。
サード・パーティJARは通常はコンパイルされませんが、アプリケーション・コードのソース制御システムを使用してバージョニングできます。たとえば、XMLパーサー、ロギング実装、およびWebアプリケーション・フレームワークのJARファイルは一般的にアプリケーションで使用され、編集可能なソース・コードと一緒に保持されます。
ビルド・プロセスの過程で、サード・パーティJARファイルはビルド・ディレクトリにコピーされませんが、デプロイメントのソース・ディレクトリに残ります。
ソース・ディレクトリ構造をセット・アップした後は、weblogic.BuildXMLGen
ユーティリティを使用して基本のbuild.xml
ファイルを作成します。weblogic.BuildXMLGen
は、分割開発ディレクトリ構造に配置されたエンタープライズ・アプリケーションのためのAnt build.xmlファイルを生成する便利なユーティリティです。このユーティリティは、ソース・ディレクトリを解析して、エンタープライズ・アプリケーションならびに個々のモジュールのビルドおよびデプロイ・ターゲットを作成します。また、ビルドをクリーン・アップして新しいデプロイメント記述子を生成するためのターゲットを生成します。
また、オプション・パッケージは、weblogic.BuildXMLGen
でJava EE共有ライブラリとしてサポートされます。そのため、オプション・パッケージ参照の検索では、アプリケーションおよびそのモジュールのすべてのマニフェストがスキャンされます。オプション・パッケージ参照が見つかると、生成されたbuild.xml
ファイル内のcompileおよびappc
タスクに追加されます。
たとえば、lib\echolib.jar
に配置されているライブラリをオプション・パッケージとして参照する場合、weblogic.BuildXMLGen
によって生成されるタスクには次のようなappc
タスクが含まれます。
<target name="appc" description="Runs weblogic.appc on your application"> <wlappc source="${dest.dir}" verbose="${verbose}"> <library file="lib\echolib\echolib.jar" /> </wlappc> </target>
モジュールのcompileおよびappc
タスクでも、lib\echolib\echolib.jar
ライブラリが使用されます。
weblogic.BuildXMLGen
の構文は次のとおりです。
java weblogic.BuildXMLGen [options] <source directory>
オプション
には以下があります。
-help
: 標準の使用方法メッセージを出力します。
-version
: バージョン情報を出力します。
-projectName <project name>
: Antプロジェクトの名前。
-d <directory>
: build.xml
が作成されるディレクトリ。デフォルトはカレント・ディレクトリ。
-file <build.xml>
: 生成されたビルド・ファイル名。
-librarydir <directories>
: ディレクトリのカンマ区切りのリストで、共有Java EEライブラリのビルド・ターゲットを作成します。共有Java EEライブラリおよびオプション・パッケージの作成を参照してください。
-username <username>
: デプロイ・コマンドのためのユーザー名。
-password <password>
: ユーザー・パスワード。
weblogic.BuildXMLGen
を実行した後は、生成されたbuild.xml
ファイルを編集して開発環境のプロパティを指定します。編集する必要のあるプロパティについては、次の例を参照してください。
例4-1 build.xmlの編集可能なプロパティ
<!-- BUILD PROPERTIES ADJUST THESE FOR YOUR ENVIRONMENT --> <property name="tmp.dir" value="/tmp" /> <property name="dist.dir" value="${tmp.dir}/dist"/> <property name="app.name" value="helloWorldEar" /> <property name="ear" value="${dist.dir}/${app.name}.ear"/> <property name="ear.exploded" value="${dist.dir}/${app.name}_exploded"/> <property name="verbose" value="true" /> <property name="user" value="USERNAME" /> <property name="password" value="PASSWORD" /> <property name="servername" value="myserver" /> <property name="adminurl" value="iiop://localhost:7001" />
特に、必ずtmp.dir
プロパティを編集して使用するビルド・ディレクトリを示します。デフォルトでは、このbuild.xml
ファイルは、アプリケーションの名前にちなんで名付けられたサブディレクトリtmp.dir
(上の例では/tmp/helloWorldEar
)にプロジェクトをビルドします。
次の例は、build.xml
ファイルに作成されたデフォルトの主要なターゲットを示しています。これらのターゲットは、EARソース・ディレクトリでant -projecthelp
コマンドを入力することでコマンド・プロンプトで表示できます。
例4-2 デフォルトのbuild.xmlのターゲット
appc Runs weblogic.appc on your application build Compiles helloWorldEar application and runs appc clean Deletes the build and distribution directories compile Only compiles helloWorldEar application, no appc compile.appStartup Compiles just the appStartup module of the application compile.appUtils Compiles just the appUtils module of the application compile.build.orig Compiles just the build.orig module of the application compile.helloEJB Compiles just the helloEJB module of the application compile.helloWebApp Compiles just the helloWebApp module of the application compile.javadoc Compiles just the javadoc module of the application deploy Deploys (and redeploys) the entire helloWorldEar application descriptors Generates application and module descriptors ear Package a standard J2EE EAR for distribution ear.exploded Package a standard exploded J2EE EAR redeploy.appStartup Redeploys just the appStartup module of the application redeploy.appUtils Redeploys just the appUtils module of the application redeploy.build.orig Redeploys just the build.orig module of the application redeploy.helloEJB Redeploys just the helloEJB module of the application redeploy.helloWebApp Redeploys just the helloWebApp module of application redeploy.javadoc Redeploys just the javadoc module of the application undeploy Undeploys the entire helloWorldEar application
これまでに説明した分割開発ディレクトリの例と手順は、1つのエンタープライズ・アプリケーションで構成されたプロジェクトを対象としています。複数のエンタープライズ・アプリケーションを同時にビルドする必要があるプロジェクトでは、以降の項で説明するように規約と手順が少し異なります。
注意:
次の項では、MedRecサンプル・アプリケーションを参照します。このサンプル・アプリケーションは、共有ユーティリティ・クラス、サード・パーティJARファイル、および専用クライアント・アプリケーションの3つの異なるエンタープライズ・アプリケーションで構成されています。MedRecソースおよびビルド・ディレクトリは、ORACLE_HOME
/user_projects/domain/medrec
の下にインストールされています。ORACLE_HOME
は、Oracle WebLogic ServerをインストールしたときにOracleホームとして指定したディレクトリです。詳細は、『Oracle WebLogic Serverの理解』のサンプル・アプリケーションおよびサンプル・コードに関する項 を参照してください。
EARが1つのプロジェクトでは、分割開発ディレクトリの規約はサード・パーティJARファイルをEARソース・ディレクトリのAPP-INF/lib
ディレクトリに維持するよう促します。ただし、EARが複数のプロジェクトでは、同じサード・パーティJARファイルのコピーを各EARソース・ディレクトリのAPP-INF/lib
ディレクトリに保持する必要があります。この場合、ソースJARファイルの複数のコピーが導入され、一部のJARファイルが異なるバージョンである可能性が大きくなり、ソース制御システムに追加のスペースが必要となります。
これらの問題を解決するには、構築スクリプトを編集して、ライブラリを必要とする各EARのビルド・ディレクトリのAPP-INF/lib
ディレクトリにサード・パーティJARファイルをコピーするようにしてみてください。こうすれば、ソース制御システムでJARファイルの1つのコピーとバージョンを維持できるだけでなく、プロジェクトの各EARでJARファイルを使用することができます。
WebLogic Serverと一緒にインストールされるMedRecサンプル・アプリケーションでは、次の図に示されているようにこの戦略を使用します。
MedRecは、プロジェクトの複数のEARで共有されるユーティリティ・クラスでも同様のアプローチをとります。ユーティリティ・クラスのソースをそれらを必要とする各earのスコープの中に置くのではなく、MedRecはユーティリティ・クラスのソースをすべてのEARから独立して維持します。ユーティリティ・クラスをコンパイルした後、構築スクリプトはそれらをアーカイブし、ビルド・ディレクトリのそれらのクラスを使用する各EARのAPP-INF/LIB
サブディレクトリにJARをコピーします(図4-9を参照)。
分割開発ディレクトリを使用して複数のEARを開発する場合、各EARプロジェクトは通常それ専用のbuild.xml
ファイル(おそらくweblogic.BuildXMLGen
の複数回の実行で生成される)を使用します。MedRecのようなアプリケーションでは、アプリケーション・スイートの各EARの下級のbuild.xml
ファイルを呼び出すマスターbuild.xml
ファイルも使用します。
Antは、マスターbuild.xml
ファイル内の他のプロジェクト・ビルド・ファイルを実行できるようにするコア・タスク(ant
という名前)を提供します。MedRecのマスター・ビルド・ファイルから抜粋した次の行は、その使用方法を示しています。
<ant inheritAll="false" dir="${root}/startupEar" antfile="build.xml"/>
上のタスクは、/startupEar
サブディレクトリのbuild.xml
というファイルを実行するようにAntに指示しています。inheritAll
パラメータは、マスター・ビルド・ファイルのユーザー・プロパティのみを/startupEar
のbuild.xml
ファイルに渡すようにAntに指示しています。
MedRecでは、共通のユーティリティ・クラスやクライアント・アプリケーションをビルドするだけでなく、上のタスクに似た複数のタスクを使用してstartupEar
、medrecEar
、およびphysicianEar
アプリケーションをビルドします。
アプリケーション開発には、以下の「ベスト・プラクティス」をお薦めします。
エンタープライズ・アプリケーションの一部としてアプリケーションをパッケージ化します。「wlpackageを使用したアプリケーションのパッケージ化」を参照してください。
分割開発ディレクトリ構造を使用します。「分割開発ディレクトリでのJava EEコンポーネントの配置」を参照してください。
配布する場合は、アーカイブ形式でパッケージ化とデプロイを行います。「wlpackageを使用したアプリケーションのパッケージ化」を参照してください。
他のほとんどの場合は、展開形式でデプロイするほうが便利です。「アーカイブと展開されたアーカイブ・ディレクトリ」を参照してください。
テストされていないコードを、製品アプリケーションのサーバーとなるWebLogic Serverインスタンスにデプロイしないでください。未テスト・コードに対しては、編集およびコンパイルに使用しているのと同じコンピュータに開発用WebLogic Serverインスタンスを設定するか、ネットワーク上の別の場所にWebLogic Serverの開発場所を指定してください。
開発用コンピュータで開発用WebLogic Serverインスタンスを実行しない場合でも、プログラムをコンパイルするにはWebLogic Server配布キットへのアクセスが必要です。WebLogicまたはJava EE APIを使用してコードをコンパイルするには、Javaコンパイラが配布ディレクトリ内のweblogic.jar
ファイルとその他のJARファイルにアクセスする必要があります。WebLogic配布キットのファイルをローカルで使用するには、WebLogic Serverを開発用コンピュータにインストールします。