木曜日 7 20, 2006
木曜日 7 20, 2006
Java EE 5では、Webアプリケーションの構成情報をコンテナに伝えるためのデプロイメント記述子(Deployment Descriptor:DD)と呼ばれるXMLファイルを多くの場合省略することができるようになっています。Java EE 5仕様の標準デプロイメント記述子は、J2EE 1.4と同様、以下のものがあります。
上記のうち、(Java EE 5でバージョンが上がらなかったコネクタ・アーキテクチャ仕様1.5の)ra.xml以外のデプロイメント記述子が省略可能になっています。一般的なWebアプリケーション(EARファイル)は以下のような構成になると思いますが、この場合、J2EE 1.4では必須であったweb.xml、ejb-jar.xml、application.xmlが省略可能となります。
ただし、web.xmlについてはWebモジュール内にServlet、Filter、リスナのいずれかが含まれる場合は、web.xmlは省略できないようです([1])。WebモジュールにJSPやWebサービスクラスだけが含まれる場合はweb.xmlが省略できます。
ejb-jar.xmlは、アノーテーションとデフォルトの振舞いによりejb-jarモジュールに含まれる全てのEJB、Webサービス、インターセプターおよびパーシスタンス・クラスの設定情報が十分に表現されているのであれば省略することができます。
また、EARファイルに必須であったapplication.xmlも省略可能となっています。例えば、EJBモジュールとしてcalc.jarがあり、Webモジュールとしてcalc.warがあったとします。この2つからearファイルを作成するためには、従来、以下のようなapplication.xmlをEARファイル内のMETA-INFディレクトリに含める必要がありました。
<application xmlns="http://java.sun.com/xml/ns/javaee" version="5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/application_5.xsd">
<description>Application description</description>
<module>
<ejb>calc.jar</ejb>
</module>
<module>
<web>
<web-uri>calc.war</web-uri>
<context-root>calc</context-root>
</web>
</module>
</application>
実際には、上記のapplication.xmlは省略することができ、jarコマンドを用いて構成要素となるモジュールをEARファイルに含めればよいだけです。
$ jar cvf calc.ear calc.war calc.jar $ jar tf calc.ear META-INF/ META-INF/MANIFEST.MF calc.war calc.jar
application.xmlがEARファイルに存在しない場合のモジュールの判別ルールの詳細は、Java EE Specification V5.0, EE.8.4.2節 Deploying a Java EE Application, pp.166に記述がありますが、Configuration by Exceptionコンセプト(デフォルト・ルールを変更したい場合にのみ好みの設定をすればよいという考え方)に基づいた現実的なルールになっていることが分かります。以下にそのルールを抜粋します。
このように、ほとんどの現実的なアプリケーションではapplication.xmlを省略することができそうです。しかしながら、アプリケーションの規模が大きくなってくると、AppServerのデプロイヤがアーカイブ内のファイルやクラスを走査するオーバヘッドが大きくなり、アプリケーションの起動時間が気になってくるかもしれません。そのような場合には、きちんとapplication.xmlやejb-jar.xmlをアプリケーションに含めてあげた方がいいでしょう。その場合でも、手作業でデプロイメント記述子を書く必要はありません。SJS AppServer 9(glassfish)では、AppServerのデプロイヤがデプロイ時に自動生成した各種デプロイメント記述子が以下のディレクトリに保存されています。
$ASROOT/domains/domain1/generated/xml/j2ee-apps/calc/calc_jar/META-INF/ejb-jar.xml $ASROOT/domains/domain1/generated/xml/j2ee-apps/calc/calc_jar/META-INF/sun-ejb-jar.xml $ASROOT/domains/domain1/generated/xml/j2ee-apps/calc/calc_war/WEB-INF/sun-web.xml $ASROOT/domains/domain1/generated/xml/j2ee-apps/calc/calc_war/WEB-INF/web.xml $ASROOT/domains/domain1/generated/xml/j2ee-apps/calc/META-INF/application.xml $ASROOT/domains/domain1/generated/xml/j2ee-apps/calc/META-INF/sun-application.xml
上記のファイルを開発中のソース・コード・ツリーにコピーして利用すればOKです。
[1] Servlet APIはJava EE 5で2.5にマイナー・バージョン・アップされましたが、新しいJSRは割り当てられず、JSR-154のメンテナンス・リリースという位置付けになります。JSRドキュメントしてはServlet Specification V2.5, Maintenance Draft Review 5として公開されているものが最新のようで、Java EE 5の仕様としては、このドラフトMR5を参照していると思われます。web.xmlが省略できる場合についての記述は、ドラフトMR5の「SRV.9.13 Inclusion of a web.xml Deployment Descriptor」節, pp.73に記述があります。以下、この記述の抜粋です。
A web application is NOT required to contain a web.xml if it does NOT contain any Servlet, Filter, or Listener components. In other words an application containing only static files or JSP pages does not require a web.xml to be present.
Webサービス専用のWARファイルを作成するのでない限り、現実的なアプリケーション開発ではweb.xmlを省略できるケースはまずないと考えていいでしょう。Java EE 5全体のEoD化の目標に対して、Web層の仕様だけは出遅れた感が否めません。将来のServlet 3.0、JSF 2.0ではアノーテーションを導入したデプロイメント記述子の省略ができるようになることが期待されます。
cool
Posted by wow gold on 11月月 03日, 2008年 at 10:39 午前 JST #