このセクションでは、標準 EJB デプロイメントディスクリプタである ejb-jar.xml と、JRun 固有のデプロイメントディスクリプタである jrun-ejb-jar.xml について説明します。詳細については、<JRun のルートディレクトリ>/docs/descriptordocs/index.html ファイルのデプロイメントディスクリプタのドキュメントを参照してください。
EJB のプログラミング方法の詳細については、『JRun プログラマーガイド』および「このマニュアルの概要」に記載されている参考文献を参照してください。
JRun には、デプロイメントディスクリプタファイルを直接操作せずに EJB の開発、パッケージ、およびデプロイを実行できる次のツールが用意されています。
標準 EJB デプロイメントディスクリプタである ejb-jar.xml を使用して、次の表のような EJB モジュールの要素を設定します。有効な ejb-jar.xml ファイルには、有効なenterprise-
beans セクションのみが必要です。bean 開発者はこのセクションで 1 つ以上の bean を宣言します。アセンブル担当者は enterprise-beans セクションおよび assembly-descriptor セクションを処理します。 このファイルのルート要素は ejb-jar です。
ejb-jar.xml ファイルの enterprise-beans セクションは唯一の必須セクションです。このセクションは、bean 開発者がアプリケーションの一部である bean を宣言する場所です。
次の表では、セッション、エンティティ、およびメッセージによる bean に共通する、ejb-jar/enterprise-beans 要素の下の要素のみを説明します。
あらゆるタイプの bean に必須の要素の他に、セッション bean の ejb-jar/enterprise-beans/session 要素の下には次の要素が必要です。
あらゆるタイプの bean に必須の要素の他に、エンティティ bean の ejb-jar/enterprise-beans/entity 要素の下には次の要素が必要です。
あらゆるタイプの bean に必須の要素の他に、メッセージによる bean の ejb-jar/enterprise-beans/message-driven 要素の下には次の要素が必要です。
| XML 要素 |
説明 |
|---|---|
| transaction-type |
EJB が bean 管理トランザクションを使用するか、あるいはコンテナ管理トランザクションを使用するかを指定します。値は Bean および Container です。 |
アセンブル担当者は ejb-jar.xml ファイルの assembly-descriptor セクションで、セキュリティロール、メソッドへのアクセス許可、コンテナ管理トランザクションを使用する EJB のトランザクション属性、およびデプロイから除外するメソッドを定義します。最上位レベルのアセンブルディスクリプタの要素はすべてオプションです。これらの要素を次の表に示します。
次のデプロイメントディスクリプタでは、ステートレスセッション bean、BMP エンティティbean、CMP 1.1 エンティティ bean、および CMP 2.0 エンティティ bean の設定情報を指定します。また、<JRun のルートディレクトリ>/servers/samples ディレクトリ内の JRun サンプルサーバ上のアプリケーションの ejb-jar.xml ファイルを表示することもできます。
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//
DTD EnterpriseJavaBeans 2.0//EN" "http://java.sun.com/dtd/
ejb-jar_2_0.dtd">
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>CreditCard</ejb-name>
<home>compass.CreditCardHomeRemote</home>
<remote>compass.CreditCardRemote</remote>
<ejb-class>compass.CreditCardBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<security-identity><use-caller-identity/></security-identity>
</session>
</enterprise-beans>
<assembly-descriptor>
<security-role>
<role-name>everyone</role-name>
</security-role>
<method-permission>
<role-name>everyone</role-name>
<method>
<ejb-name>CreditCard</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>
<container-transaction>
<method>
<ejb-name>CreditCard</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD EnterpriseJavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"><ejb-jar>
<enterprise-beans>
<entity>
<ejb-name>Order</ejb-name>
<home>compass.OrderHomeRemote</home>
<remote>compass.OrderRemote</remote>
<ejb-class>compass.OrderBean</ejb-class>
<persistence-type>Bean</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
<reentrant>False</reentrant>
<security-identity><use-caller-identity/></security-identity>
</entity>
</enterprise-beans>
<assembly-descriptor>
<security-role>
<role-name>everyone</role-name>
</security-role>
<method-permission>
<role-name>everyone</role-name>
<method>
<ejb-name>Order</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>
<container-transaction>
<method>
<ejb-name>Order</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans
2.0//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_2_0.dtd">
<ejb-jar>
<enterprise-beans>
<entity>
<ejb-name>Employee</ejb-name>
<ejb-class>samples.cmp11.EmployeeBean</ejb-class>
<home>samples.cmp11.EmployeeHome</home>
<remote>samples.cmp11.Employee</remote>
<persistence-type>Container</persistence-type>
<primkey-field>employeeId</primkey-field>
<prim-key-class>java.lang.String</prim-key-class>
<reentrant>True</reentrant>
<cmp-version>1.x</cmp-version>
<cmp-field>
<field-name>employeeId</field-name>
</cmp-field>
<cmp-field>
<field-name>firstName</field-name>
</cmp-field>
<cmp-field>
<field-name>lastName</field-name>
</cmp-field>
<cmp-field>
<field-name>phone</field-name>
</cmp-field>
</entity>
</enterprise-beans>
</ejb-jar>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans
2.0//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_2_0.dtd">
<ejb-jar>
<enterprise-beans>
<entity>
<ejb-name>samples/cmp20/Employee</ejb-name>
<ejb-class>samples.cmp20.EmployeeBean</ejb-class>
<home>samples.cmp20.EmployeeHome</home>
<remote>samples.cmp20.Employee</remote>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.String</prim-key-class>
<reentrant>True</reentrant>
<primkey-field>employeeId</primkey-field>
<abstract-schema-name>employeeschema</abstract-schema-name>
<cmp-version>2.x</cmp-version>
<cmp-field>
<field-name>employeeId</field-name>
</cmp-field>
<cmp-field>
<field-name>firstName</field-name>
</cmp-field>
<cmp-field>
<field-name>lastName</field-name>
</cmp-field>
<cmp-field>
<field-name>phone</field-name>
</cmp-field>
<query>
<query-method>
<method-name />
<method-params />
</query-method>
<return-type-mapping>Local</return-type-mapping>
<ejb-ql>SELECT OBJECT(o) FROM employeeschema AS o</ejb-ql>
</query>
<query>
<query-method>
<method-name />
<method-params />
</query-method>
<return-type-mapping>Local</return-type-mapping>
<ejb-ql>SELECT OBJECT(o) FROM employeeschema AS o WHERE o.lastName =
?1</ejb-ql>
</query>
</entity>
</enterprise-beans>
</ejb-jar>
JRun 固有の EJB デプロイメントディスクリプタである jrun-ejb-jar.xml は必ずしも必要ではありません。このディスクリプタを使用して、JNDI 名、リソースマッピング、JDBC マッピングなど、JRun 固有の要素で ejb-jar.xml ファイルに含まれていない要素を設定します。JDBC マッピングは、CMP 1.1 エンティティ bean の作成、ロード、保管、検索、および削除に使用する SQL を指定します。
メモ: jrun-ejb-jar.xml ファイルは自動的に生成できます。詳細については、 弟3章の"JRun 固有のデプロイメントディスクリプタの操作,"を参照してください。
jrun-ejb-jar.xml ファイルには、jrun-ejb-jar の下に次の最上位レベルの要素が含まれています。
このセクションでは、エンタープライズ bean のサブ要素について説明します。
次の表では、セッション、エンティティ、およびメッセージによる bean に共通する、jrun-ejb-jar/enterprise-beans 要素の下の要素を説明します。ejb-name および jndi-name 要素のみが必須です。
あらゆるタイプの bean に必須の要素の他に、セッション bean 設定の jrun-ejb-jar/enterprise-beans/session 要素の下には次のオプションの要素を指定できます。
| XML 要素 |
説明 |
|---|---|
| timeout |
ステートフルセッション bean のタイムアウト値 (秒単位)。EJB インスタンスは、この時間だけアイドル状態が続くとパッシベート (メモリを節約するためにその EJB オブジェクトから分離) されます。 |
| instance-pool |
ステートレスセッション bean のインスタンスプールの最大サイズおよび最小サイズパラメータ |
あらゆるタイプの bean に必須の要素の他に、エンティティ bean 設定の jrun-ejb-jar/enterprise-beans/entity 要素の下には次のオプションの要素を指定できます。
あらゆるタイプの bean に必須の要素の他に、メッセージによる bean 設定のjrun-ejb-jar/enterprise-beans/entity 要素の下には次のオプションの要素を指定できます。
| XML 要素 |
説明 |
|---|---|
| message-driven-subscription |
永続サブスクリプションのためにメッセージによるコンテナが使用するクライアント ID |
| message-driven-destination |
メッセージによるコンテナが使用する送信先 |
次のデプロイメントディスクリプタでは、ステートフルセッション bean、ステートレスセッション bean、および CMP 1.1 エンティティ bean の設定情報を指定します。また、<JRun のルートディレクトリ>/servers/samples ディレクトリ内の JRun サンプルサーバ上のアプリケーションの jrun-ejb-jar.xml ファイルを表示することもできます。
ステートフルセッション bean の JNDI 名を設定し、そのホームおよびオブジェクトクラスタリングを無効にして、そのタイムアウト値を設定します。
<?xml version="1.0"?>
<!DOCTYPE jrun-ejb-jar PUBLIC '-//Macromedia, Inc.//DTD jrun-ejb-jar 4.0//EN'
'http://jrun.macromedia.com/dtds/jrun-ejb-jar.dtd'>
<jrun-ejb-jar>
<enterprise-beans>
<session>
<ejb-name>StatefulEJB</ejb-name>
<jndi-name>StatefulEJB</jndi-name>
<cluster-home>false</cluster-home>
<cluster-object>false</cluster-object>
<timeout>900</timeout>
</session> </enterprise-beans></jrun-ejb-jar>
この例では、ステートレスセッション bean の JNDI 名およびインスタンスプールサイズの最大値と最小値を設定します。「ejb-jar.xml:ステートレスセッション bean の宣言とアセンブルディスクリプタ」も参照してください。
<?xml version="1.0"?>
<!DOCTYPE jrun-ejb-jar PUBLIC '-//Macromedia, Inc.//DTD jrun-ejb-jar 4.0//EN'
'http://jrun.macromedia.com/dtds/jrun-ejb-jar.dtd'>
<jrun-ejb-jar>
<enterprise-beans>
<session>
<ejb-name>CreditCard</ejb-name>
<jndi-name>ejb/CreditCard</jndi-name>
<cluster-home>False</cluster-home>
<cluster-object>False</cluster-object>
<instance-pool>
<minimum-size>1</minimum-size>
<maximum-size>5</maximum-size>
</instance-pool>
</session>
</enterprise-beans>
</jrun-ejb-jar>
CMP 1.1 エンティティ bean の JNDI 名および JDBC マッピングを設定します。「ejb-jar.xml:CMP 1.1 エンティティ bean の宣言」も参照してください。
<?xml version="1.0"?>
<!DOCTYPE jrun-ejb-jar PUBLIC '-//Macromedia, Inc.//DTD jrun-ejb-jar 4.0//EN'
'http://jrun.macromedia.com/dtds/jrun-ejb-jar.dtd'>
<jrun-ejb-jar>
<enterprise-beans>
<entity>
<ejb-name>Employee</ejb-name>
<jndi-name>Employee</jndi-name>
<jdbc-mappings>
<jdbc-mapping>
<name>create</name>
<statement>
<action>INSERT INTO employees (employee_id , first_name , last_name,
phone) VALUES ( ?, ? , ? , ?)</action>
<source>samples</source>
<params>
<param>
<name>employeeId</name>
<type>VARCHAR</type>
</param>
<param>
<name>firstName</name>
<type>VARCHAR</type>
</param>
<param>
<name>lastName</name>
<type>VARCHAR</type>
</param>
<param>
<name>phone</name>
<type>VARCHAR</type>
</param>
</params>
</statement>
</jdbc-mapping>
<jdbc-mapping>
<name>load</name>
<statement>
<action>SELECT employee_id, first_name, last_name, phone FROM
employees
WHERE employee_id=?</action>
<source>samples</source>
<params>
<param>
<name>employeeId</name>
<type>VARCHAR</type>
</param>
</params>
<fields>
<field>employeeId</field>
<field>firstName</field>
<field>lastName</field>
<field>phone</field>
</fields>
</statement>
</jdbc-mapping>
<jdbc-mapping>
<name>remove</name>
<statement>
<action>DELETE FROM employees WHERE employee_id=?</action>
<source>samples</source>
<params>
<param>
<name>employeeId</name>
<type>VARCHAR</type>
</param>
</params>
</statement>
</jdbc-mapping>
<jdbc-mapping>
<name>store</name>
<statement>
<action>UPDATE employees SET first_name=?, last_name=?, phone=?WHERE
employee_id=?</action>
<source>samples</source>
<params>
<param>
<name>firstName</name>
<type>VARCHAR</type>
</param>
<param>
<name>lastName</name>
<type>VARCHAR</type>
</param>
<param>
<name>phone</name>
<type>VARCHAR</type>
</param>
<param>
<name>employeeId</name>
<type>VARCHAR</type>
</param>
</params>
</statement>
</jdbc-mapping>
<jdbc-mapping>
<name>findAll</name>
<statement>
<action>SELECT employee_id FROM employees</action>
<source>samples</source>
<fields>
<field>employeeId</field>
</fields>
</statement>
</jdbc-mapping>
<jdbc-mapping>
<name>findByLastName</name>
<statement>
<action>SELECT employee_id FROM employees WHERE last_name=?1</action>
<source>samples</source>
<params>
<param>
<name>lastName</name>
<type>VARCHAR</type>
</param>
</params>
<fields>
<field>employeeId</field>
</fields>
</statement>
</jdbc-mapping>
<jdbc-mapping>
<name>findByPrimaryKey</name>
<statement>
<action>SELECT employee_id FROM employees WHERE employee_id=?</
action>
<source>samples</source>
<params>
<param>
<name>employeeId</name>
<type>VARCHAR</type>
</param>
</params>
<fields>
<field>employeeId</field>
</fields>
</statement>
</jdbc-mapping>
</jdbc-mappings>
</entity>
</enterprise-beans>