minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

J2EEの設定ファイル、ejb-jar.xmlを解析します。
EJB2.0以上を対象とします。

ejb-jar

ルート要素です。以下の子要素を含むことができます。

description

EJBコンポーネント全体の説明文です。

<description>variable comment</description>

display-name

EJBコンポーネント全体の表示名です。

<display-name>ejb component</display-name>

small-icon

16x16のイメージが格納されたパスを記述します。
イメージはjpegかgif形式にします。このイメージはツール等から利用されます。

<small-icon>employee-service-icon16x16.jpg</small-icon>

large-icon

32x32のイメージが格納されたパスを記述します。
イメージはjpegかgif形式にします。このイメージはツール等から利用されます。

<large-icon>employee-service-icon32x32.jpg</large-icon>

enterprise-beans

エンタープライズBean群を定義します。
この要素は必ず記述する必要があります。
逆に、この要素が必要無いのならばejb-jar.xmlを使う必要が無いという事です。
この要素の中には、以下の3要素を一つ以上記述します。

session

セッションBeanを定義します。

description

display-name

small-icon

large-icon

以上4つは既に紹介しているので説明は省きます。

ejb-name

EJB名を定義します。必須要素です。

<ejb-name>ListThreadSessionBean</ejb-name>

home

ホームインターフェイスのクラス名を完全限定名(=パッケージ名まで含める)で記述します。
このインターフェイスは EJBHome を継承している必要があります。
remote と対で使用されます。

<home>neverbird.examples.board.interfaces.ListThreadSessionHome</home>

remote

リモートインターフェイスのクラス名を完全限定名(=パッケージ名まで含める)で記述します。
このインターフェイスは EJBObject を継承している必要があります。
home と対で使用されます。

<remote>neverbird.examples.board.interfaces.ListThreadSession</remote>

local-home

ローカルホームインターフェイスのクラス名を完全限定名(=パッケージ名まで含める)で記述します。
このインターフェイスは EJBLocalHome を継承している必要があります。
local と対で使用されます。

<local-home>neverbird.examples.board.interfaces.ResponseLocalHome</local-home>

local

ローカルインターフェイスのクラス名を完全限定名(=パッケージ名まで含める)で記述します。
このインターフェイスは EJBLocalObject を継承している必要があります。
local-home と対で使用されます。

<local>neverbird.examples.board.interfaces.ResponseLocal</local>

ejb-class

エンタープライズBeanのクラス名を完全限定名(パッケージ名まで含める)で記述します。
このクラスは SessionBean を継承している必要があります。
リモート、ローカルの有無に関わらず一つだけ記述します。必須要素です。

<ejb-class>neverbird.examples.board.beans.ResponseBean</ejb-class>

session-type

このセッションBeanの種別を定義します。必須要素です。

<session-type>Stateless</session-type>
Stateful

ステートフル・セッションBeanを使用します。

Stateless

ステートレス・セッションBeanを使用します。

transaction-type

エンタープライズBeanのトランザクション種別を定義します。必須要素です。

<transaction-type>Container</transaction-type>
Bean

Bean制御のトランザクションを使用します。
ユーザプログラム側でトランザクション制御を行います。

Container

コンテナ制御のトランザクションを使用します。
ユーザプログラム側でトランザクション制御は行いません。

env-entry

エンタープライズ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>
description

この環境変数の説明文です。

env-entry-name

環境変数名を定義します。
エンタープライズBean内では

context.lookup("java:comp/env/mail.enabled")

のような形で参照することが出来ます。prefixの java:comp/env/ を忘れずに。

env-entry-type

環境変数の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

env-entry-value

環境変数の値を記述します。

ejb-ref

エンタープライズBean内で有効なEJB参照を定義します。複数定義可能です。

context.lookup("java:comp/env/ejb-ref-name")

という形で参照することが出来ます。

description

参照するEJBの説明文です。

ejb-ref-name

EJB参照名を定義します。
ejb/ というprefixを付けることが推奨されています。

<ejb-ref-name>ejb/Payroll</ejb-ref-name>

ejb-ref-type

参照するEJBの種別を記述します。

Entity

エンティティBeanを参照します。

Session

セッションBeanを参照します。

home

ホームインターフェイスのクラス名を完全限定名で記述します。

remote

リモートインターフェイスのクラス名を完全限定名で記述します。

ejb-link

参照するEJB名(ejb-name)を記述します。
<ejb-link>EmployeeRecord</ejb-link>
EJBが外部ファイルにある場合は、外部ファイル名#EJB名 のように記述します。
ejb-link>product.jar#ProductEJB</ejb-link>

ejb-local-ref

エンタープライズ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>
description
ejb-ref-name
ejb-ref-type
ejb-link

ejb-ref と同じです。

local-home

ローカルホームインターフェイスのクラス名を完全限定名で記述します。

local

ローカルインターフェイスのクラス名を完全限定名で記述します。

security-role-ref

エンタープライズBean内で有効なセキュリティロール参照を定義します。複数定義可能です。

description

参照するセキュリティロールの説明文です。

role-name

セキュリティロール名を定義します。

role-link

参照するセキュリティロール名を記述します。

security-identity

不明です。

resource-ref

外部リソース参照を定義します。複数定義可能です。

<resource-ref>
  <res-ref-name>boardPool</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>
description

参照する外部リソースの説明文です。

res-ref-name

エンタープライズBean内で有効なリソース参照名を定義します。

context.lookup("java:comp/env/boardPool")

のような形で参照することが出来ます。

res-type

リソースのJava型を記述します。
通常、javax.sql.DataSource を使用します。

res-auth

リソースマネージャの認証種別を記述します。
通常、Container を使用します。

res-sharing-scope

不明です。

resource-env-ref

不明です。複数定義可能です。

entity

エンティティBeanを定義します。

description
display-name
small-icon
large-icon
ejb-name
home
remote
local-home
local
ejb-class
env-entry
ejb-ref
ejb-local-ref
security-role-ref
security-identity
resource-ref
resource-env-ref

以上の項目は session を参照して下さい。

persistence-type

エンティティBeanの永続性を定義します。必須要素です。

<persistence-type>Container</persistence-type>
Bean

Bean管理による永続性(BMP)を使用します。

Container

コンテナ管理による永続性(CMP)を使用します。

prim-key-class

エンティティBeanのプライマリキーに使用する型を定義します。必須要素です。
Javaのクラス名を完全限定名で記述します。プリミティブ型は指定できません。

<prim-key-class>java.lang.String</prim-key-class>

java.lang.Object を使うと、自動的にプライマリキーが生成されます。
ただし、standardjbosscmp-jdbc.xml ファイルに unknown-pk 要素が正しく記述されている必要があります。
この場合、primkey-field 要素は必要ありません。

primkey-field

CMPのプライマリキー名を記述します。
field-name で定義されている必要があります。
prim-key-classjava.lang.Object 以外の場合、必須要素となります。

<primkey-field>threadId</primkey-field>

reentrant

エンティティBeanをリエントラントにするかどうかを制御します。必須要素です。

<reentrant>False</reentrant>
True

エンティティBeanをリエントラント可能にします。
このとき、同時にエンティティBean内のロジックが動く可能性があります。

False

エンティティBeanをリエントラント不可能にします。
エンティティBean内のロジックが同時に動く可能性はありません。

cmp-version

利用されるCMPのバージョンを定義します。

<cmp-version>2.x</cmp-version>
1.x

CMP1.xバージョンを利用します。
以前のEJBアプリケーションサーバでも動く可能性があります。

2.x

CMP2.xバージョンを利用します。
以前のEJBアプリケーションサーバでは動きません。
デフォルトはこちらになります。

abstract-schema-name

CMP2.xで利用されるスキーマ名を定義します。
スキーマ名は ejb-ql 内でテーブル名として使われます。
cmp-version2.x(デフォルト) のとき必須要素です。

<abstract-schema-name>ResponseBean</abstract-schema-name>

cmp-field

CMPのフィールドを定義します。複数定義可能です。

<cmp-field><field-name>resId</field-name></cmp-field>
description

フィールドの説明文を記述します。

field-name

フィールド名を記述します。
通常、これが実際のデータベースに登録されるカラム名になります。
カラム名を変更したい場合は jbosscmp-jdbc.xml ファイルの column-name 要素に記述します。

query

検索用の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>
description

SQLクエリーの説明文を記述します。

query-method

method-name

メソッド名を定義します。

method-intf

詳細は不明です。以下のうちいずれかを指定できます。

<method-intf>Home</method-intf>
<method-intf>Remote</method-intf>
<method-intf>LocalHome</method-intf>
<method-intf>Local</method-intf>

method-params

メソッドの引数を定義します。

method-param

引数のJava型を完全限定名で記述します。プリミティブ型も使用可能です。
例えば、String ではなく java.lang.String と記述する必要があります。
複数定義可能です。

result-type-mapping

不明です。デフォルトは Local です。

<result-type-mapping>Local</result-type-mapping>
<result-type-mapping>Remote</result-type-mapping>

ejb-ql

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 要素に記述することも可能です。

message-driven

メッセージ駆動型Beanを定義します。
詳細は不明です。

description
display-name
small-icon
large-icon
ejb-name
env-entry*
ejb-ref*
ejb-local-ref*
security-identity?
resource-ref*
resource-env-ref*

以上の項目は session を参照して下さい。

ejb-class

メッセージ駆動型Beanのクラス名を完全限定名で記述します。
このクラスは MessageDrivenBean を継承している必要があります。
必須要素です。

transaction-type

トランザクション種別を定義します。必須要素です。

<transaction-type>Bean</transaction-type>
<transaction-type>Container</transaction-type>

Container を使用した場合、JBossが自動的にトランザクションを生成してくれます。
Bean を使用した場合、プログラムでトランザクション処理を記述する必要があります。

message-selector

このメッセージ駆動型Beanが受け取るべきメッセージ種別を限定します。
詳細は不明です。

<message-selector>JMSType = `car' AND color = `blue' AND weight &gt; 2500
</message-selector>

acknowledge-mode

詳細は不明です。

<acknowledge-mode>Auto-acknowledge</acknowledge-mode>
<acknowledge-mode>Dups-ok-acknowledge</acknowledge-mode>

message-driven-destination

メッセージ送信先の情報を記述します。
以下の要素を持ちます。

destination-type

メッセージ送信先種別を指定します。必須要素です。
以下のいずれかを使用できます。

<destination-type>javax.jms.Queue</destination-type>
<destination-type>javax.jms.Topic</destination-type>

subscription-durability

送信されたメッセージの持続性(durability)を表します。
詳細は不明です。

<subscription-durability>Durable</subscription-durability>
<subscription-durability>NonDurable</subscription-durability>

relationships

リレーションシップを定義します。
リレーションシップとは、異なるテーブル同士で結び付くレコードの相互関係を表します。
以下、左辺レコード右辺レコード という関係が成立するとします。

description

リレーションシップの説明文を記述します。

ejb-relation

リレーションを定義します。一つ以上の記述が必要です。

<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>

description

リレーションの説明文を記述します。

ejb-relation-name

リレーション名を定義します。

ejb-relationship-role

リレーションシップロール(左辺レコード)を定義します。必須要素です。
必ず、後述するリレーションシップロール(右辺レコード)と対で定義します。

description

リレーションシップロールの説明文を記述します。

ejb-relationship-role-name

リレーションシップロール名を定義します。

multiplicity

レコードの多重度を定義します。必須要素です。

<multiplicity>One</multiplicity>
<multiplicity>Many</multiplicity>

  • One

    多重度は常に1とします。

  • Many

    多重度は任意の整数とします。

左辺レコード、右辺レコードにおける多重度の組み合わせパターンは以下の通りです。

One, One

左辺レコードと右辺レコードは常に1対1の関係を持ちます。

One, Many

左辺レコードと右辺レコードは1対nの関係を持ちます。

Many, One

左辺レコードと右辺レコードはn対1の関係を持ちます。
One, Many の場合と逆です。

Many, Many

左辺レコードと右辺レコードはn対mの関係を持ちます。

cascade-delete

この要素を定義すると、対になるレコードが削除されたときに
この左辺(右辺)レコードも一緒に削除されます。
対になるレコードの multiplicityOne のときのみ使用可能です。

<cascade-delete />

relationship-role-source

左辺(右辺)レコードの対象となるEJBを定義します。必須要素です。

description

説明文を記述します。

ejb-name

左辺(右辺)レコードの対象となるEJB名を記述します。必須要素です。
entity 要素内の ejb-name 要素として定義されている必要があります。

cmr-field

リレーションシップの対象となるカラムを定義します。

description

説明文を記述します。

cmr-field-name

関係を持つレコードにアクセスする際に使用する論理フィールド名を定義します。必須要素です。
論理フィールド名の先頭は必ず小文字で無ければいけません。

<cmr-field-name>memberGangsters</cmr-field-name>

対になるレコードの多重度 multiplicity によって挙動が異なります。

対になるレコードの多重度が Many

このレコードと関係を持つ右辺(左辺)レコードは複数存在する可能性があります。
この場合、ここで定義されたフィールドはデータベース上のカラムとしては実装されません。
以下のアクセスメソッドをEJBに定義する事が可能です。

  • Set getXXX()

    このレコードと関係を持つ右辺(左辺)レコード(複数)を取得します。

  • void setXXX(Set)

    このレコードと関係を持つ右辺(左辺)レコード(複数)を設定します。

対になるレコードの多重度が One

このレコードと関係を持つ右辺(左辺)レコードは常に一つです。
この場合、データベース上のカラムに cmr-field-name が実装されます。
フィールドに格納される値は、対になるレコードのプライマリキー値と等しくなります。
以下のアクセスメソッドをEJBに定義する事が可能です。

  • Object getXXX()

    このレコードと関係を持つ右辺(左辺)レコードを取得します。

  • void setXXX(Object)

    このレコードと関係を持つ右辺(左辺)レコードを設定します。

Object の部分は、対になるレコードの
リモート(又はローカル)インターフェイスのクラスで置き換えることが可能です。

cmr-field-type

アクセスメソッドで使用するコレクションクラス名を完全限定名で記述します。
以下の2つのみ使用可能です。

<cmr-field-type>java.util.Collection</cmr-field-type>
<cmr-field-type>java.util.Set</cmr-field-type>

ejb-relationship-role

リレーションシップロール(右辺レコード)を定義します。必須要素です。
内容はリレーションシップロール(左辺レコード)と同様ですのでそちらを参照して下さい。

assembly-descriptor

EJBコンポーネントのトランザクション制御等を記述します。

security-role

セキュリティロールを定義します。複数定義可能です。

description

セキュリティロールの説明文を記述します。

role-name

セキュリティロール名を定義します。

method-permission

メソッド権限を定義します。
これは、セキュリティロールによって使用できるメソッドを制限するものです。
複数定義可能です。

description

メソッド権限の説明文を記述します。

role-name

セキュリティロール名を定義します。
一つ以上の記述が必要です。

<method-permission>
  <role-name>employee</role-name>
</method-permission>

もしくは、unchecked を指定します。

unchecked

セキュリティロールによる制限をしないときに記述します。
この要素と role-name は同時に記述できません。

<method-permission>
  <unchecked />
</method-permission>

method

メソッド権限で制限するメソッド一覧を定義します。
一つ以上の記述が必要です。

description

メソッドの説明文です。

ejb-name

メソッドが定義されているEJB名(ejb-name)を記述します。

method-intf

不明です。

method-name

メソッド名を記述します。
* を使うと、EJBで定義されている全てのメソッドが対象になります。

<method-name>*</method-name>

: method-params

method-params を参照して下さい。

container-transaction

コンテナによるトランザクション制御方法を記述します。
複数定義可能です。

<container-transaction>
  <method>
    <ejb-name>CounterSessionBean</ejb-name>
    <method-name>*</method-name>
  </method>
  <trans-attribute>Required</trans-attribute>
</container-transaction>

description

トランザクションの説明文です。

trans-attribute

トランザクション種別を定義します。
以下のうちいずれかを指定する必要があります。

<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 を参照して下さい。

exclude-list

呼び出しを許可しないメソッド一覧を記述します。
使用目的は不明です。

description

説明文です。

method

呼び出しを許可しないメソッド一覧を定義します。一つ以上の記述が必要です。
method を参照して下さい。

ejb-client-jar

このファイルで定義されたエンタープライズBeanにアクセスするために
クライアントプログラムが必要とするクラスファイル群を格納したjarファイルを記述します。
詳しくは不明です。

<ejb-client-jar>employee_service_client.jar</ejb-client-jar>