JRun は XDoclet と統合できます。XDoclet は、EJB、Web アプリケーション、および JSP タグライブラリのコードおよびデプロイメントディスクリプタを生成するオープンソースツールです。
特に EJB の場合、XDoclet を使用して次のものを生成できます。
bean 実装内で jrun.xml 属性と JavaDoc スタイルのコメントを組み合わせて使用することによって、XDoclet が実行する処理を制御できます。
ejbPassivate) を含む下位クラスを生成する場合は、クラスをアブストラクトタイプとして宣言します。
XDocletService セクション内のejbSourceFiles 属性がサポートしているネーミング規則を使用して、EJB に名前を付けるか、または、EJB のファイル名をカバーする ejbSourceFiles 属性を追加します。デフォルトのネーミング規則は *Bean.java です。
XDocletService セクションのwatchedEJBDirectory 属性でディレクトリを指定することで、EJB に対する XDoclet サポートを有効にします。デフォルトのディレクトリは server_root/default-ear/default-ejb です。
このディレクトリは、デフォルトではコメントとして処理されます。XDoclet が jrun.xml ファイルの watchedEJBDirectory 属性を監視できるようにするには、この属性のコメントを無効にする必要があります。JRun が監視するディレクトリを無制限に追加することもできます。
ソースファイルを保存する場合、JRun は、下位の bean 実装クラス、関連付けられたインターフェイス、およびデプロイメントディスクリプタを生成します。ディレクトリが auto-deploy ディレクトリの場合、JRun は EJB もデプロイします。
JRun は、ejb-jar.xml ファイルに要素を生成する基本的な XDoclet タグ、および
jrun-ejb-jar.xml ファイルに要素を生成する JRun 特有の XDoclet タグをサポートします。
基本的な XDoclet タグは、@ejb: という接頭辞で始まります。これらのタグは、基本的な XDoclet のアーキテクチャの一部です。タグとそのパラメータのリストなどの詳細については、XDoclet の Web サイト (http://xdoclet.sourceforge.net/) をご覧ください。
次のテーブルでは、基本的な XDoclet タグを説明します。
JRun 特有の XDoclet タグは、@jrun: という接頭辞で始まります。次の表で、JRun 特有の XDoclet タグのリストを説明します。
JRun 特有の XDoclet タグの多くは、jrun-ejb-jar.xml ファイルの要素にマッピングされます。このファイルの詳細については、JRun ドキュメンテーションのホームページで利用できるディスクリプタのオンラインドキュメントを参照してください。XDoclet を使用するオンラインの EJB の例については、samples JRun サーバを参照してください。
次の例は、XDoclet のサポートを有効にする CMP 1.1 エンティティ bean を示しています。
package samples.cmp11.xdoclet;
import javax.ejb.EntityContext;
import javax.ejb.RemoveException;
import javax.ejb.FinderException;
import java.util.Collection;
import java.rmi.RemoteException;
/**
* @ejb:bean type="CMP"
* name="Employee"
* primkey-field="employeeId"
* cmp-version="1.x"
* @ejb:home remote-class="samples.cmp11.xdoclet.EmployeeHome"
* @ejb:interface remote-class="samples.cmp11.xdoclet.Employee"
* @ejb:finder signature="java.util.Collection findAll()"
* @ejb:finder signature="java.util.Collection findByLastName(String
lastName)"
* @ejb:pk class="java.lang.String"
* @ejb:transaction type="Required"
*
* @jrun:jndi-name Employee
* @jrun:jdbc-mappings
*/
public class EmployeeBean implements javax.ejb.EntityBean {
private EntityContext context;
public String employeeId;
public String firstName;
public String lastName;
public String phone;
/**
* @ejb:create-method
* @jrun:jdbc-mapping name="create"
* source="samples"
* action="INSERT INTO employees (employee_id ,
first_name , last_name, phone) VALUES
( ? , ? , ? , ?)"
* @jrun:jdbc-mapping-param name="employeeId" type="VARCHAR"
* @jrun:jdbc-mapping-param name="firstName" type="VARCHAR"
* @jrun:jdbc-mapping-param name="lastName" type="VARCHAR"
* @jrun:jdbc-mapping-param name="phone" type="VARCHAR"
*/
public String ejbCreate(String employeeId, String firstName,
String lastName, String phone) {
this.employeeId = employeeId;
this.firstName = firstName;
this.lastName = lastName;
this.phone = phone;
return null;
}
public void ejbPostCreate(String employeeId, String firstName,
String lastName, String phone) {
}
/**
* @ejb:interface-method
* @ejb:persistent-field
* @ejb:pk-field
*/
public String getEmployeeId() {
return employeeId;
}
/**
* @ejb:interface-method
*/
public void setEmployeeId(String employeeId) {
this.employeeId = employeeId;
}
/**
* @ejb:interface-method
* @ejb:persistent-field
*/
public String getFirstName() {
return firstName;
}
/**
* @ejb:interface-method
*/
public void setFirstName(String firstName) {
this.firstName = firstName;
}
/**
* @ejb:interface-method
* @ejb:persistent-field
*/
public String getLastName() {
return lastName;
}
/**
* @ejb:interface-method
*/
public void setLastName(String lastName) {
this.lastName = lastName;
}
/**
* @ejb:interface-method
* @ejb:persistent-field
*/
public String getPhone() {
return phone;
}
/**
* @ejb:interface-method
*/
public void setPhone(String phone) {
this.phone = phone;
}
public void setEntityContext(EntityContext context) {
this.context = context;
}
public void unsetEntityContext() {
this.context = null;
}
public void ejbActivate() { }
public void ejbPassivate() { }
/**
* @jrun:jdbc-mapping name="load" source="samples"
* action="SELECT employee_id, first_name,
last_name, phone FROM employees WHERE
employee_id=?"
* @jrun:jdbc-mapping-param name="employeeId" type="VARCHAR"
* @jrun:jdbc-mapping-field employeeId
* @jrun:jdbc-mapping-field firstName
* @jrun:jdbc-mapping-field lastName
* @jrun:jdbc-mapping-field phone
*/
public void ejbLoad() { }
/**
* @jrun:jdbc-mapping name="store" source="samples"
* action="UPDATE employees SET first_name=?,
last_name=?, phone=?WHERE employee_id=?"
* @jrun:jdbc-mapping-param name="firstName" type="VARCHAR"
* @jrun:jdbc-mapping-param name="lastName" type="VARCHAR"
* @jrun:jdbc-mapping-param name="phone" type="VARCHAR"
* @jrun:jdbc-mapping-param name="employeeId" type="VARCHAR"
*/
public void ejbStore() { }
/**
* @jrun:jdbc-mapping name="remove"
* source="samples"
* action="DELETE FROM employees WHERE
employee_id=?"
* @jrun:jdbc-mapping-param name="employeeId" type="VARCHAR"
*/
public void ejbRemove() throws RemoveException {
}
/**
* @jrun:jdbc-mapping name="findByPrimaryKey" source="samples"
* action="SELECT employee_id FROM employees WHERE
employee_id=?"
* @jrun:jdbc-mapping-param name="employeeId" type="VARCHAR"
* @jrun:jdbc-mapping-field employeeId
*/
public void findByPrimaryKey(String pk) {
}
/**
* @jrun:jdbc-mapping name="findAll" source="samples"
* action="SELECT employee_id FROM employees"
* @jrun:jdbc-mapping-field employeeId
*/
public Collection findAll() {
return null;
}
/**
* @jrun:jdbc-mapping name="findByLastName" source="samples"
* action="SELECT employee_id FROM employees WHERE
last_name=?1"
* @jrun:jdbc-mapping-param name="lastName" type="VARCHAR"
* @jrun:jdbc-mapping-field employeeId
*/
public Collection findByLastName(String lastName) {
this.lastName = lastName;
return null;
}
}