J2EEの設定ファイル、ejb-jar.xmlを解析します。
EJB2.0以上を対象とします。
ルート要素です。以下の子要素を含むことができます。
EJBコンポーネント全体の説明文です。
<description>variable comment</description>
EJBコンポーネント全体の表示名です。
<display-name>ejb component</display-name>
16x16のイメージが格納されたパスを記述します。
イメージはjpegかgif形式にします。このイメージはツール等から利用されます。
<small-icon>employee-service-icon16x16.jpg</small-icon>
32x32のイメージが格納されたパスを記述します。
イメージはjpegかgif形式にします。このイメージはツール等から利用されます。
<large-icon>employee-service-icon32x32.jpg</large-icon>
エンタープライズBean群を定義します。
この要素は必ず記述する必要があります。
逆に、この要素が必要無いのならばejb-jar.xmlを使う必要が無いという事です。
この要素の中には、以下の3要素を一つ以上記述します。
セッションBeanを定義します。
以上4つは既に紹介しているので説明は省きます。
EJB名を定義します。必須要素です。
<ejb-name>ListThreadSessionBean</ejb-name>
ホームインターフェイスのクラス名を完全限定名(=パッケージ名まで含める)で記述します。
このインターフェイスは EJBHome を継承している必要があります。
remote と対で使用されます。
<home>neverbird.examples.board.interfaces.ListThreadSessionHome</home>
リモートインターフェイスのクラス名を完全限定名(=パッケージ名まで含める)で記述します。
このインターフェイスは EJBObject を継承している必要があります。
home と対で使用されます。
<remote>neverbird.examples.board.interfaces.ListThreadSession</remote>
ローカルホームインターフェイスのクラス名を完全限定名(=パッケージ名まで含める)で記述します。
このインターフェイスは EJBLocalHome を継承している必要があります。
local と対で使用されます。
<local-home>neverbird.examples.board.interfaces.ResponseLocalHome</local-home>
ローカルインターフェイスのクラス名を完全限定名(=パッケージ名まで含める)で記述します。
このインターフェイスは EJBLocalObject を継承している必要があります。
local-home と対で使用されます。
<local>neverbird.examples.board.interfaces.ResponseLocal</local>
エンタープライズBeanのクラス名を完全限定名(パッケージ名まで含める)で記述します。
このクラスは SessionBean を継承している必要があります。
リモート、ローカルの有無に関わらず一つだけ記述します。必須要素です。
<ejb-class>neverbird.examples.board.beans.ResponseBean</ejb-class>
このセッションBeanの種別を定義します。必須要素です。
<session-type>Stateless</session-type>
ステートフル・セッションBeanを使用します。
ステートレス・セッションBeanを使用します。
エンタープライズBeanのトランザクション種別を定義します。必須要素です。
<transaction-type>Container</transaction-type>
Bean制御のトランザクションを使用します。
ユーザプログラム側でトランザクション制御を行います。
コンテナ制御のトランザクションを使用します。
ユーザプログラム側でトランザクション制御は行いません。
エンタープライズBean内で有効な環境変数を定義します。複数定義可能です。
<env-entry> <env-entry-name>mail.enabled</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>false</env-entry-value> </env-entry>
この環境変数の説明文です。
環境変数名を定義します。
エンタープライズBean内では
context.lookup("java:comp/env/mail.enabled")
のような形で参照することが出来ます。prefixの java:comp/env/ を忘れずに。
環境変数のJava型を完全限定名で記述します。
有効な型名を以下に示します。
java.lang.Boolean java.lang.Byte java.lang.Character java.lang.String java.lang.Short java.lang.Integer java.lang.Long java.lang.Float java.lang.Double
環境変数の値を記述します。
エンタープライズBean内で有効なEJB参照を定義します。複数定義可能です。
context.lookup("java:comp/env/ejb-ref-name")
という形で参照することが出来ます。
参照するEJBの説明文です。
EJB参照名を定義します。ejb/ というprefixを付けることが推奨されています。
<ejb-ref-name>ejb/Payroll</ejb-ref-name>
参照するEJBの種別を記述します。
エンティティBeanを参照します。
セッションBeanを参照します。
ホームインターフェイスのクラス名を完全限定名で記述します。
リモートインターフェイスのクラス名を完全限定名で記述します。
参照するEJB名(ejb-name)を記述します。
<ejb-link>EmployeeRecord</ejb-link>
EJBが外部ファイルにある場合は、外部ファイル名#EJB名 のように記述します。
ejb-link>product.jar#ProductEJB</ejb-link>
エンタープライズBean内で有効なEJBローカル参照を定義します。複数定義可能です。
<ejb-local-ref> <ejb-ref-name>ejb/bookmarkLocal</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <local-home>neverbird.examples.bookmark.interfaces.BookmarkLocalHome</local-home> <local>neverbird.examples.bookmark.interfaces.BookmarkLocal</local> <ejb-link>BookmarkBean</ejb-link> </ejb-local-ref>
ローカルホームインターフェイスのクラス名を完全限定名で記述します。
ローカルインターフェイスのクラス名を完全限定名で記述します。
エンタープライズBean内で有効なセキュリティロール参照を定義します。複数定義可能です。
参照するセキュリティロールの説明文です。
セキュリティロール名を定義します。
参照するセキュリティロール名を記述します。
不明です。
外部リソース参照を定義します。複数定義可能です。
<resource-ref> <res-ref-name>boardPool</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
参照する外部リソースの説明文です。
エンタープライズBean内で有効なリソース参照名を定義します。
context.lookup("java:comp/env/boardPool")
のような形で参照することが出来ます。
リソースのJava型を記述します。
通常、javax.sql.DataSource を使用します。
リソースマネージャの認証種別を記述します。
通常、Container を使用します。
不明です。
不明です。複数定義可能です。
エンティティBeanを定義します。
以上の項目は session を参照して下さい。
エンティティBeanの永続性を定義します。必須要素です。
<persistence-type>Container</persistence-type>
Bean管理による永続性(BMP)を使用します。
コンテナ管理による永続性(CMP)を使用します。
エンティティBeanのプライマリキーに使用する型を定義します。必須要素です。
Javaのクラス名を完全限定名で記述します。プリミティブ型は指定できません。
<prim-key-class>java.lang.String</prim-key-class>
java.lang.Object を使うと、自動的にプライマリキーが生成されます。
ただし、standardjbosscmp-jdbc.xml ファイルに unknown-pk 要素が正しく記述されている必要があります。
この場合、primkey-field 要素は必要ありません。
CMPのプライマリキー名を記述します。
field-name で定義されている必要があります。
prim-key-class が java.lang.Object 以外の場合、必須要素となります。
<primkey-field>threadId</primkey-field>
エンティティBeanをリエントラントにするかどうかを制御します。必須要素です。
<reentrant>False</reentrant>
エンティティBeanをリエントラント可能にします。
このとき、同時にエンティティBean内のロジックが動く可能性があります。
エンティティBeanをリエントラント不可能にします。
エンティティBean内のロジックが同時に動く可能性はありません。
利用されるCMPのバージョンを定義します。
<cmp-version>2.x</cmp-version>
CMP1.xバージョンを利用します。
以前のEJBアプリケーションサーバでも動く可能性があります。
CMP2.xバージョンを利用します。
以前のEJBアプリケーションサーバでは動きません。
デフォルトはこちらになります。
CMP2.xで利用されるスキーマ名を定義します。
スキーマ名は ejb-ql 内でテーブル名として使われます。
cmp-version が 2.x(デフォルト) のとき必須要素です。
<abstract-schema-name>ResponseBean</abstract-schema-name>
CMPのフィールドを定義します。複数定義可能です。
<cmp-field><field-name>resId</field-name></cmp-field>
フィールドの説明文を記述します。
フィールド名を記述します。
通常、これが実際のデータベースに登録されるカラム名になります。
カラム名を変更したい場合は jbosscmp-jdbc.xml ファイルの column-name 要素に記述します。
検索用のSQLクエリーを定義します。複数定義可能です。
<query>
<query-method>
<method-name>findGreaterThan</method-name>
<method-params>
<method-param>int</method-param>
</method-params>
</query-method>
<result-type-mapping>Local</result-type-mapping>
<ejb-ql>
<![CDATA[SELECT OBJECT(o) FROM CounterBean AS o WHERE o.value > ?1]]>
</ejb-ql>
</query>
SQLクエリーの説明文を記述します。
メソッド名を定義します。
詳細は不明です。以下のうちいずれかを指定できます。
<method-intf>Home</method-intf> <method-intf>Remote</method-intf> <method-intf>LocalHome</method-intf> <method-intf>Local</method-intf>
メソッドの引数を定義します。
引数のJava型を完全限定名で記述します。プリミティブ型も使用可能です。
例えば、String ではなく java.lang.String と記述する必要があります。
複数定義可能です。
不明です。デフォルトは Local です。
<result-type-mapping>Local</result-type-mapping> <result-type-mapping>Remote</result-type-mapping>
SQLクエリー文を定義します。
abstract-schema-name で定義した名前をテーブル名として利用します。例えば、
<abstract-schema-name>schemaName</abstract-schema-name>
と定義している場合は
<ejb-ql> <![CDATA[SELECT OBJECT(o) FROM schemaName AS o WHERE o.value > ?1]]> </ejb-ql>
のようになります。
ここに記述せず、jbosscmp-jdbc.xml ファイルの query 要素に記述することも可能です。
メッセージ駆動型Beanを定義します。
詳細は不明です。
以上の項目は session を参照して下さい。
メッセージ駆動型Beanのクラス名を完全限定名で記述します。
このクラスは MessageDrivenBean を継承している必要があります。
必須要素です。
トランザクション種別を定義します。必須要素です。
<transaction-type>Bean</transaction-type> <transaction-type>Container</transaction-type>
Container を使用した場合、JBossが自動的にトランザクションを生成してくれます。Bean を使用した場合、プログラムでトランザクション処理を記述する必要があります。
このメッセージ駆動型Beanが受け取るべきメッセージ種別を限定します。
詳細は不明です。
<message-selector>JMSType = `car' AND color = `blue' AND weight > 2500 </message-selector>
詳細は不明です。
<acknowledge-mode>Auto-acknowledge</acknowledge-mode> <acknowledge-mode>Dups-ok-acknowledge</acknowledge-mode>
メッセージ送信先の情報を記述します。
以下の要素を持ちます。
メッセージ送信先種別を指定します。必須要素です。
以下のいずれかを使用できます。
<destination-type>javax.jms.Queue</destination-type> <destination-type>javax.jms.Topic</destination-type>
送信されたメッセージの持続性(durability)を表します。
詳細は不明です。
<subscription-durability>Durable</subscription-durability> <subscription-durability>NonDurable</subscription-durability>
リレーションシップを定義します。
リレーションシップとは、異なるテーブル同士で結び付くレコードの相互関係を表します。
以下、左辺レコード ⇔ 右辺レコード という関係が成立するとします。
リレーションシップの説明文を記述します。
リレーションを定義します。一つ以上の記述が必要です。
<ejb-relation>
<ejb-relation-name>Product-LineItem</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>
product-has-lineitems
</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>ProductEJB</ejb-name>
</relationship-role-source>
</ejb-relationship-role>
<ejb-relationship-role>
...
</ejb-relationship-role>
</ejb-relation>
リレーションの説明文を記述します。
リレーション名を定義します。
リレーションシップロール(左辺レコード)を定義します。必須要素です。
必ず、後述するリレーションシップロール(右辺レコード)と対で定義します。
リレーションシップロールの説明文を記述します。
リレーションシップロール名を定義します。
レコードの多重度を定義します。必須要素です。
<multiplicity>One</multiplicity> <multiplicity>Many</multiplicity>
多重度は常に1とします。
多重度は任意の整数とします。
左辺レコード、右辺レコードにおける多重度の組み合わせパターンは以下の通りです。
左辺レコードと右辺レコードは常に1対1の関係を持ちます。
左辺レコードと右辺レコードは1対nの関係を持ちます。
左辺レコードと右辺レコードはn対1の関係を持ちます。One, Many の場合と逆です。
左辺レコードと右辺レコードはn対mの関係を持ちます。
この要素を定義すると、対になるレコードが削除されたときに
この左辺(右辺)レコードも一緒に削除されます。
対になるレコードの multiplicity が One のときのみ使用可能です。
<cascade-delete />
左辺(右辺)レコードの対象となるEJBを定義します。必須要素です。
説明文を記述します。
リレーションシップの対象となるカラムを定義します。
説明文を記述します。
関係を持つレコードにアクセスする際に使用する論理フィールド名を定義します。必須要素です。
論理フィールド名の先頭は必ず小文字で無ければいけません。
<cmr-field-name>memberGangsters</cmr-field-name>
対になるレコードの多重度 multiplicity によって挙動が異なります。
このレコードと関係を持つ右辺(左辺)レコードは複数存在する可能性があります。
この場合、ここで定義されたフィールドはデータベース上のカラムとしては実装されません。
以下のアクセスメソッドをEJBに定義する事が可能です。
このレコードと関係を持つ右辺(左辺)レコード(複数)を取得します。
このレコードと関係を持つ右辺(左辺)レコード(複数)を設定します。
このレコードと関係を持つ右辺(左辺)レコードは常に一つです。
この場合、データベース上のカラムに cmr-field-name が実装されます。
フィールドに格納される値は、対になるレコードのプライマリキー値と等しくなります。
以下のアクセスメソッドをEJBに定義する事が可能です。
このレコードと関係を持つ右辺(左辺)レコードを取得します。
このレコードと関係を持つ右辺(左辺)レコードを設定します。
Object の部分は、対になるレコードの
リモート(又はローカル)インターフェイスのクラスで置き換えることが可能です。
アクセスメソッドで使用するコレクションクラス名を完全限定名で記述します。
以下の2つのみ使用可能です。
<cmr-field-type>java.util.Collection</cmr-field-type> <cmr-field-type>java.util.Set</cmr-field-type>
リレーションシップロール(右辺レコード)を定義します。必須要素です。
内容はリレーションシップロール(左辺レコード)と同様ですのでそちらを参照して下さい。
EJBコンポーネントのトランザクション制御等を記述します。
セキュリティロールを定義します。複数定義可能です。
セキュリティロールの説明文を記述します。
セキュリティロール名を定義します。
メソッド権限を定義します。
これは、セキュリティロールによって使用できるメソッドを制限するものです。
複数定義可能です。
メソッド権限の説明文を記述します。
セキュリティロール名を定義します。
一つ以上の記述が必要です。
<method-permission> <role-name>employee</role-name> </method-permission>
もしくは、unchecked を指定します。
セキュリティロールによる制限をしないときに記述します。
この要素と role-name は同時に記述できません。
<method-permission> <unchecked /> </method-permission>
メソッド権限で制限するメソッド一覧を定義します。
一つ以上の記述が必要です。
メソッドの説明文です。
不明です。
メソッド名を記述します。* を使うと、EJBで定義されている全てのメソッドが対象になります。
<method-name>*</method-name>
method-params を参照して下さい。
コンテナによるトランザクション制御方法を記述します。
複数定義可能です。
<container-transaction>
<method>
<ejb-name>CounterSessionBean</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
トランザクションの説明文です。
トランザクション種別を定義します。
以下のうちいずれかを指定する必要があります。
<trans-attribute>NotSupported</trans-attribute> <trans-attribute>Supports</trans-attribute> <trans-attribute>Required</trans-attribute> <trans-attribute>RequiresNew</trans-attribute> <trans-attribute>Mandatory</trans-attribute> <trans-attribute>Never</trans-attribute>
トランザクションを制御するメソッド一覧を定義します。一つ以上の記述が必要です。
method を参照して下さい。
呼び出しを許可しないメソッド一覧を記述します。
使用目的は不明です。
説明文です。
呼び出しを許可しないメソッド一覧を定義します。一つ以上の記述が必要です。
method を参照して下さい。
このファイルで定義されたエンタープライズBeanにアクセスするために
クライアントプログラムが必要とするクラスファイル群を格納したjarファイルを記述します。
詳しくは不明です。
<ejb-client-jar>employee_service_client.jar</ejb-client-jar>