Web アプリケーションでの XDoclet の使用

JRun は XDoclet と統合できます。XDoclet は、EJB、Web アプリケーション、および JSP タグライブラリのコードおよびデプロイメントディスクリプタを生成するオープンソースのツールです。

XDoclet は、設定ファイルで定義する WebDoclet タスクの設定を使用して、web.xml ファイルと jrun-web.xml を生成します。サーブレットのコメントを使用して、サーブレットの定義、フィルタ、マッピングなどの設定を作成します。さらに、セッションのパーシスタンス情報や仮想マッピングを定義するデプロイメントディスクリプタにファイルをマージできます。

JRun は、web.xml ファイルに要素を生成する基本的な XDoclet タグ、および jrun-web.xml ファイルに要素を生成する JRun 特有の XDoclet タグをサポートします。

XDoclet は Apache の Ant を使用しているため、その設定ファイルは build.xml ファイルに似ています。XDoclet の設定ファイルは、<JRun のルートディレクトリ>/lib/xdoclet.xml です。

詳細については、XDoclet の Web サイト (http://sourceforge.net/projects/xdoclet/) をご覧ください。

XDoclet サービスの有効化

XDoclet は、jrun.xml ファイルの XDocletService セクションを使用して有効にします。

XDoclet を有効にするには

  1. XDoclet コメントを含んでいるサーブレットクラスファイルを作成します。
  2. JRUN サーバの jrun.xml ファイルの XDocletService セクション内の
    warSourceFiles 属性がサポートしている命名規則を使用してそのサーブレットに名前を付けるか、または、サーブレットのファイル名に一致する warSourceFiles 属性を追加します。

    デフォルトの命名規則は次のとおりです。

  3. JRun サーバの jrun.xml ファイルの XDocletService セクションの
    watchedWARDirectory 属性を追加して、ディレクトリ内のすべてのファイルに対する XDoclet サポートを有効にします。

    デフォルトのディレクトリは次のとおりです。

    <JRun のルートディレクトリ>/default-ear/default-war ディレクトリ

    このディレクトリは、デフォルトではコメントとして処理されます。XDoclet が watchedWARDirectory 属性を監視できるようにするには、この属性のコメントを解除する必要があります。補足ディレクトリを追加して、JRun が監視できるようにすることもできます。

  4. XDoclet サポートが有効になっているディレクトリにサーブレットクラスを保存します。

    JRun は、Web アプリケーションのデプロイメントディスクリプタにサーブレットのエントリを生成します。

XDoclet リソースの設定

XDoclet リソースは <JRun のルートディレクトリ>/lib/xdoclet.xml で設定します。また、XDoclet を JRun サブタスクのビルドの一部として割り当てることができます。JRun サブタスクは、xdoclet.xml ファイルに <jrunwebxml/> として表されます。次の表は、<jrunwebxml/> サブタスクの属性をリストしたものです。
属性
説明
xmlencoding
jrun-web.xml ファイルのエンコード。デフォルトは UTF-8 です。
destdir
JRun 特有のデプロイメントディスクリプタファイル出力の保存先ディレクトリを指定します。デフォルトは webdoclet タスクの destdir パラメータです。
mergedir
マージファイルのディレクトリを指定します。マージファイルは、 session-config.xml および virtual-mapping.xml です。
contextRoot
Web アプリケーションのコンテキストルートを指定します。デフォルトでは、コンテキストルートは Web アプリケーションが含まれるディレクトリまたは JAR ファイルの名前です。
reload
サーブレット、サーブレットヘルパークラス、および JSP ヘルパークラスを自動的にリロードするかどうかを指定します。デフォルトは true です。
compile
サーブレット、サーブレットヘルパークラス、および JSP ヘルパークラスを自動的にコンパイルするかどうかを指定します。true に設定するとパフォーマンスが低下します。デフォルトは true です。
loadSystemClassesFirst
エンタープライズアプリケーションクラスおよび Web アプリケーションクラスの前にシステムクラスをロードするかどうかを指定します。通常、クラス
ローダー委任モデルでは、システムクラスを最初にロードすることになっていますが、サーブレット仕様では Web アプリケーションクラスを最初にロードするように推奨しています。デフォルトは true です。

<jrunwebxml/> タスクの例については、 「XDoclet を使用した EJB の例」 を参照してください。

web.xml へのファイルのマージ

デプロイメントディスクリプタの構築時に XDoclet で使用するマージファイルを定義できます。これらの外部マージファイルで、セッションのパーシスタンス情報や仮想マッピングなどの設定を定義できます。これらのマージファイル名は session-config.xml および virtual-mapping.xml で、格納場所は XDoclet の設定ファイルで定義できます。

XDoclet タグの使用

サーブレットクラスファイル内で jrun.xml 属性と JavaDoc スタイルのコメントを組み合わせて使用すると、XDoclet が実行する処理を制御できます。このセクションでは、XDoclet で使用するソースコードの標準的な XDoclet タグと JRun 特有のタグについて説明します。

XDoclet のコメントは、@ マークで始まります。

Web アプリケーションの標準的な XDoclet タグ

XDoclet タグは、基本的に @jsp: または @web: という接頭辞で始まります。これらのタグは、基本的な XDoclet のアーキテクチャの一部です。これらのタグをソースファイルで使用する場合、XDoclet がこれらを使用して Web アプリケーションの web.xml ファイルにエントリを作成します。

次の表で、Web アプリケーションコンポーネントで使用する標準的なXDoclet タグを説明します。
タグ
説明
@jsp:attribute
指定のフィールドを JSP タグの属性として宣言します。
このタグは getter メソッドに配置します。
@jsp:tag
指定のクラスを JSP タグの実装クラスとして宣言し、
そのタグの様々なプロパティを指定します。
@jsp:validator-init-param
特定の parameter-name、value および description の Validator に対する初期化パラメータを宣言します。
@jsp:variable
JSP タグの変数および定義したスクリプト変数の情報を
宣言します。
@web:ejb-local-ref
特定の name、type、home-interface-name、local-interface-name、link- name、および description のローカル EJB リファレンスを定義します。link-parameter の値は、同じ J2EE アプリケーションユニットにあるエンタープライズ bean の ejb-name である必要があります。
@web:ejb-ref
特定の name、type、home-interface-name、local-interface-name、link- name、および description の
リモート EJB リファレンスを定義します。link-parameter の値は、同じ J2EE アプリケーションユニットにあるエンタープライズ bean の ejb-name である必要があります。
@web:env-entry
特定の name、type、および value の環境エントリを定義
します。
@web:filter
特定の name、display-name、icon、および description のクラスを Filter クラスとして宣言します。Servlet 2.3 のみ適用可能です。
@web:filter-init-param
特定の parameter-name、value、および description の Filter に対する初期化パラメータを宣言します。Servlet 2.3 のみ適用可能です。
@web:filter-mapping
Filter のマッピングを定義します。url-pattern または servlet-name を指定する必要があります。Servlet 2.3 のみ適用可能です。
@web:listener
特定のクラスを Listener クラスとして宣言します。
@web:resource-env-ref
特定の name、type、および description のリソース環境
リファレンスを定義します。
@web:resource-ref
特定の name、type、description、authentication (auth)、 および scope のリソースリファレンスを定義します。
@web:security-role
特定の role-name および description のセキュリティ
ロールを定義します。
@web:security-role-ref
role-link という名前の security-role-link に対する特定の role-name のセキュリティロールリファレンスを定義し
ます。
@web:servlet
特定の name、display-name、icon、および description のクラスを Servlet クラスとして宣言します。
@web:servlet-init-param
特定の parameter-name、value、および description の Servlet に対する初期化パラメータを宣言します。
@web:servlet-mapping
特定の url-pattern に対する Servlet のマッピングを定義します。

タグおよびそのパラメータの全リストを含む詳細については、XDoclet の Web サイト
http://xdoclet.sourceforge.net/ を参照してください。

JRun 特有の XDoclet タグ

JRun 特有の XDoclet タグは、@jrun: という接頭辞で始まります。これらのタグをソースファイルで使用する場合、XDoclet がこれらを使用して jrun-web.xml ファイルにエントリを作成します。これらのタグは、すべてクラスレベルのタグです。次の表は、JRun 特有の XDoclet タグをリストします。
タグ
説明
@jrun:ejb-local-ref

注意:  bean 開発者が提供した ejb-ref-name とその JNDI 名の間のマッピングを指定します。デプロイ担当者が実際の JNDI 名を指定します。

@jrun:ejb-ref
bean 開発者が提供した ejb-ref-name とその JNDI 名の間のマッピングを指定します。デプロイ担当者が実際の JNDI 名を指定します。使用場所は entity、message-driven、または session です。
@jrun:resource-env-ref
bean 開発者が提供した resource-env-name とその JNDI 名の間のマッピングを指定します。デプロイ担当者が実際の JNDI 名を指定します。
@jrun:resource-ref
bean 開発者が提供した resource-name とその JNDI 名の間のマッピングを指定します。デプロイ担当者が実際の JNDI 名を指定します。

JRun 特有の XDoclet タグの詳細については、ドキュメンテーションのホームページで利用できるオンラインディスクリプタドキュメントを参照してください。XDoclet を使用するオンラインの EJB の例については、samples JRun サーバを参照してください。

XDoclet の例

このセクションでは、XDoclet タグを使用する Java ソースファイルと xdoclet.xml 設定ファイルの Java ソースファイルについて説明します。

サーブレットの例

次の例で示されている単純なサーブレットは、XDoclet を使用してサーブレットの url-pattern マッピングおよび初期化パラメータを定義します。

import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
/**
 * A hello world.
 *
 * @web:servlet name="SimpleServlet" display-name="Simple Servlet" 
load-on-startup="1"
 * @web:servlet-init-param name="param1" value="value1"
 * @web:servlet-init-param name="param2" value="value2"
 * @web:servlet-mapping url-pattern="/hellaworld/*"
 * 
 * @author     Macromedia
 * @created    Mar 14, 2002
 * @version    $1.0 $
 **/
public class SimpleServlet extends HttpServlet {
  public void doGet( HttpServletRequest request, HttpServletResponse 
response ) throws IOException, ServletException {
    PrintWriter out = response.getWriter()
    out.println("Hella World");
  }
}

フィルタサンプル

次の例で示されているフィルタサーブレットは、XDoclet を使用してフィルタの定義、すべての XML ファイルへのフィルタのマッピング、およびフィルタの初期化パラメータの定義を行います。

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
/**
 * xdoclet を使用して web.xml へのフィルタ追加をテストします。 
 *
 * @web:filter name="XDocletFilter" display-name="XDoclet Test Filter"
 * @web:filter-init-param name="param1" value="value1"
 * @web:filter-init-param name="param2" value="value2"
 * @web:filter-mapping url-pattern="/*.xml"
 *
 * @author     Macromedia
 * @created    Mar 14, 2002
 * @version    $1.0 $
 **/
public class XDocletFilter extends GenericFilter {
  public void doFilter(ServletRequest req, ServletResponse resp, 
FilterChain chain) throws java.io.IOException, 
javax.servlet.ServletException {
    chain.doFilter(req, resp);
  }
}

XDoclet を使用した EJB の例

次の例では、xdoclet.xml ファイルの WebDoclet タスクを定義します。

<webdoclet
  sourcepath="${xdoclet.working.dir}"
  destdir="${xdoclet.working.dir}"
  classpathref="project.class.path">
  <!-- Struts サポートのインクルード-->
  <fileset dir="${xdoclet.working.dir}">
    <include name="**/*Servlet.java" />
    <include name="**/*Filter.java" />
    <include name="**/*Tag.java" />
    <include name="**/*Action.java" />
  </fileset>
  <deploymentdescriptor servletspec="2.3" destdir="${war.meta.dir}" />
  <jsptaglib jspversion="1.2"
    destdir="${war.meta.dir}/tlds"
    shortname="j2ee"
  />
  <jrunwebxml
    destdir="${war.meta.dir}"
    contextRoot="webapp"
    reload="true"
    compile="true"
    loadSystemClassesFirst="false"
  />
</webdoclet>