minimize

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

jbossの設定ファイル、jbosscmp-jdbc.xmlを解析します。
jboss3.2を対象とします。

jbosscmp-jdbc

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

defaults

全てのエンタープライズBeanに適用するデフォルト値を定義します。

datasource

データソースをlookupする為に用いるJNDI名を記述します。
このJNDI名でデータソースが登録されている必要があります。

<datasource>java:/DefaultDS</datasource>

datasource-mapping

データソースのマッピング名を記述します。

<datasource-mapping>Hypersonic SQL</datasource-mapping>

create-table

コンテナ起動時にエンティティBeanで使用するテーブルが存在しない場合、
自動的にテーブルを生成するかどうかを指定します。

<create-table>true</create-table>
<create-table>false</create-table>

remove-table

コンテナ削除(再起動などによる一時的なシャットダウンも含む)時に
エンティティBeanで使用するテーブルを削除するかどうかを指定します。

<remove-table>true</remove-table>
<remove-table>false</remove-table>

post-table-create

テーブルが自動生成された際に実行するアクションを定義します。
この要素は jbosscmp-jdbc_3_2.dtd で定義されています。
その為、standardjbosscmp-jdbc.xml 内でのみ定義可能です。
jbosscmp-jdbc.xmlについて」を参考にして下さい。

<post-table-create>
  <sql-statement>
    ALTER TABLE %%t TYPE=INNODB
  </sql-statement>
</post-table-create>

sql-statement

アクションをSQL文で記述します。一つ以上の定義が必要です。

read-only

全てのCMPフィールドを読み込み専用にするかどうかを指定します。
読み込み専用にすると、データベースへの書き込み/更新は一切行われません。

<read-only>true</read-only>
<read-only>false</read-only>

read-time-out

読み込み専用フィールドのタイムアウト値をミリ秒単位で指定します。
データベースから読み込んだレコードはBeanとしてメモリ内に保管されますが、
タイムアウト値が過ぎると
コンテナはデータベースからBeanにレコードの再読み込みを行う可能性があります。

row-locking

select文を発行する際、FOR UPDATE 構文を使用するかどうかを指定します。
これを使用すると、select文により取得した行(レコード)はcommitされるまで
他から利用できないように行ロックが掛かります。
実装方法はデータベースによります。

<row-locking>true</row-locking>
<row-locking>false</row-locking>

pk-constraint

テーブル自動生成時、プライマリキーフィールドにPrimary Key制約を付けるかどうかを指定します。
実装方法はデータベースによります。

<pk-constraint>true</pk-constraint>
<pk-constraint>false</pk-constraint>

fk-constraint

テーブル自動生成時、リレーションフィールドにForeign Key制約を付けるかどうかを指定します。
実装方法はデータベースによります。

<fk-constraint>true</fk-constraint>
<fk-constraint>false</fk-constraint>

preferred-relation-mapping

詳細は不明です。

<preferred-relation-mapping>foreign-key</preferred-relation-mapping>
<preferred-relation-mapping>relation-table</preferred-relation-mapping>

read-ahead

先読みの設定を記述します。

<read-ahead>
  <strategy>on-load</strategy>
  <deep-read-ahead/>
  <page-size>255</page-size>
  <eager-load-group>*</eager-load-group>
</read-ahead>

strategy

先読み方法を指定します。

<strategy>none</strategy>
<strategy>on-load</strategy>
<strategy>on-find</strategy>

deep-read-ahead

詳細は不明です。

page-size

一回の先読みで読み込むエントリー数を指定します。

eager-load-group

詳細は不明です。

list-cache-max

詳細は不明です。

<list-cache-max>1000</list-cache-max>

fetch-size

詳細は不明です。

unknown-pk

プライマリキーの自動生成に関する設定を記述します。
prim-key-class 要素の説明を参考にして下さい。

この要素は jbosscmp-jdbc_3_2.dtd で定義されています。
その為、standardjbosscmp-jdbc.xml 内でのみ定義可能です。
jbosscmp-jdbc.xmlについて」を参考にして下さい。

entity-command

詳細は不明です。

<entity-command name="default"/>

enterprise-beans

個々のエンタープライズBeanに適用する設定を定義します。

entity

一つ以上記述する必要があります。

datasource
datasource-mapping
create-table
remove-table
read-only
read-time-out
row-locking
pk-constraint
read-ahead
list-cache-max
fetch-size
eager-load-group
entity-command

以上は defaults を参照して下さい。

ejb-name

EJB名を記述します。必須要素です。

table-name

テーブル名を定義します。
省略すると ejb-name と同じになります。

cmp-field

CMPフィールドに関する設定を定義します。複数定義可能です。

field-name

フィールド名を記述します。必須要素です。

read-only

このフィールドを読み込み専用にするかどうかを指定します。

read-time-out

このフィールドの読み込みタイムアウト値をミリ秒単位で指定します。

column-name

実際のカラム名を定義します。

not-null

このフィールドを NOT NULL にするときに定義します。

<not-null />

jdbc-type

このフィールドのJava型を定義します。
指定する値は java.sql.Types で定義されている必要があります。
sql-type と対で使用します。

<jdbc-type>DOUBLE</jdbc-type>

sql-type

このフィールドのSQL型を定義します。
指定できる型名はデータベースに依存します。
jdbc-type と対で使用します。

<sql-type>DECIMAL(5,2)</sql-type>

property

プロパティを定義します。
sql-type, jdbc-type と同時には使用できません。
複数定義可能です。

property-name

プロパティ名を定義します。必須要素です。

column-name

実際のカラム名を定義します。

not-null

このプロパティを NOT NULL にするときに定義します。

jdbc-type

このプロパティのJava型を定義します。
指定する値は java.sql.Types で定義されている必要があります。
sql-type と対で使用します。

sql-type

このプロパティのSQL型を定義します。
指定できる型名はデータベースに依存します。
jdbc-type と対で使用します。

load-groups

詳細は不明です。

lazy-load-groups

詳細は不明です。

query

SQLクエリー文を定義します。複数定義可能です。

description?

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

query-method

query-method を参照して下さい。ただし method-intf は使用できません。
必須要素です。

jboss-ql

詳細は不明です。
dynamic-ql , declared-sql とは同時に使用できません。

dynamic-ql

詳細は不明です。
jboss-ql , declared-sql とは同時に使用できません。

declared-sql

SQL文を記述します。jboss-ql , dynamic-ql とは同時に使用できません。
基本となるSQL文は SELECT [プライマリキー] FROM TABLE_NAME です。
これに追加する文字列を定義していくことになります。

<declared-sql>
  <where>name like {0}</where>
</declared-sql>

select

SELECT句に追加する文字列を定義します。

distinct

DISTINCTキーワードを使用するときに指定します。

<distinct />

ejb-name

詳細は不明です。

field-name

詳細は不明です。

alias

テーブル名に別名を定義するときに指定します。

<alias>my_table</alias>

from

FROM句に追加する文字列を定義します。

<from>, FullAddressEJB as a</from>

where

WHERE句に追加する文字列を定義します。
メソッドパラメータを {0} , {1} のように埋め込むことが出来ます。

<where>TITLE={0} OR ARTIST={0} OR TYPE={0} OR NOTES={0}</where>

order

ORDER句に追加する文字列を定義します。

<order>TITLE</order>

other

SQL文の最後に追加する文字列を定義します。

<other>LIMIT 100 OFFSET 200</other>

read-ahead

read-ahead を参照して下さい。

optimistic-locking

詳細は不明です。

relationships

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

ejb-relation

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

ejb-relation-name

リレーション名を定義します。必須要素です。

read-only

read-time-out

foreign-key-mapping

このリレーションが外部キーにマップされることを明示します。実際の効能は不明です。
ただし、n対m(many-to-many)形式のリレーションシップには使用できません。
relation-table-mapping と同時には定義できません。

<foreign-key-mapping />

relation-table-mapping

リレーション用テーブルに関する情報を定義します。
n対m(many-to-many)形式のリレーションにのみ使用できます。
foreign-key-mapping と同時には定義できません。

many-to-many形式のリレーションを定義すると、リレーション用にテーブルが一つ作成されます。
このテーブルは二つのカラムを持ちます。
左辺レコードのプライマリキーに対応するカラムと、
右辺レコードのプライマリキーに対応するカラムです。

table-name

リレーション用テーブル名を定義します。必須要素です。

datasource
datasource-mapping
create-table
remove-table
row-locking
pk-constraint

リレーション用テーブルの各情報を定義します。
内容は defaults と同様ですのでそちらを参照して下さい。

ejb-relationship-role

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

ejb-relationship-role-name

リレーションシップロール名を記述します。必須要素です。
ejb-jar.xml 内の ejb-relationship-role 要素で定義されたリレーションシップロール名である必要があります。

fk-constraint
read-ahead

defaults を参照して下さい。

key-fields

リレーションシップで使用されるフィールドに関する情報を定義します。

key-field

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

field-name

フィールド名を定義します。必須要素です。
ejb-jar.xml 内の primkey-field 要素で定義されているフィールド名で無ければなりません。

column-name

カラム名を定義します。
後述の property 要素を使用しない場合、必須要素となります。

jdbc-type

このフィールドのJava型を定義します。
指定する値は java.sql.Types で定義されている必要があります。
sql-type と対で使用します。

sql-type

このフィールドのSQL型を定義します。
指定できる型名はデータベースに依存します。
jdbc-type と対で使用します。

property

プロパティを定義します。
この要素を記述する場合には、column_name, jdbc-type, sql-type は記述できません。
複数定義可能です。

ejb-relationship-role

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

dependent-value-classes

Beanクラスに関する情報を記述します。

dependent-value-class

Beanクラス毎の情報を記述します。複数定義可能です。

description

説明文を記述します。

class

対象となるBeanクラス名を完全限定名で記述します。
必須要素です。

property

Beanクラスに実装されたプロパティを記述します。
一つ以上の要素を記述する必要があります。
内容は property と同様です。

type-mappings

Java型とSQL型のマッピング方法を定義します。

type-mapping

データベース毎にマッピング方法を定義します。一つ以上の定義が必要です。

name

タイプマッピング名を定義します。
通常はデータベース名にします。

<name>mySQL</name>

row-locking-template

行ロックを行うためのSQL文を定義します。

<row-locking-template>SELECT ?1 FROM ?2 WHERE ?3 FOR UPDATE</row-locking-template>

pk-constraint-template

プライマリキー制約を付けるためのSQL文を定義します。

<pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>

fk-constraint-template

外部キー制約を付けるためのSQL文を定義します。

<fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>

alias-header-prefix

EJB-QLコンパイラが生成するSQL文における、テーブル別名のプレフィックスを定義します。

<alias-header-prefix>t</alias-header-prefix>

alias-header-suffix

EJB-QLコンパイラが生成するSQL文における、テーブル別名のサフィックスを定義します。

<alias-header-suffix>_</alias-header-suffix>

alias-max-length

EJB-QLコンパイラが生成するSQL文における、テーブル別名の最大文字数を定義します。

<alias-max-length>32</alias-max-length>

subquery-supported

このデータベースが副問い合わせをサポートするかどうかを記述します。
trueにすると、一部のEJB-QLはサブクエリーを使用します。

<subquery-supported>false</subquery-supported>

true-mapping

EJB-QLコンパイラが生成するSQL文における、「true」値のマッピング記法を定義します。

<true-mapping>1</true-mapping>

false-mapping

EJB-QLコンパイラが生成するSQL文における、「false」値のマッピング記法を定義します。

<false-mapping>0</false-mapping>

function-mapping

EJB-QLで使用する関数を定義します。
複数定義可能です。

<function-mapping>
  <function-name>concat</function-name>
  <function-sql>concat(?1, ?2)</function-sql>
</function-mapping>
function-name

関数名を定義します。

function-sql

関数を使用するときのSQL文を定義します。

mapping

JavaクラスからJDBC/SQL型へのマッピングを定義します。
一つ以上の定義が必要です。

<mapping>
  <java-type>java.lang.Float</java-type>
  <jdbc-type>FLOAT</jdbc-type>
  <sql-type>FLOAT</sql-type>
</mapping>
java-type

マッピング対象となるJavaのクラス名を完全限定名で記述します。

jdbc-type

このフィールドのjdbc型を定義します。
指定する値は java.sql.Types で定義されている必要があります。

sql-type

このフィールドのSQL型を定義します。
指定できる型名はデータベースに依存します。

entity-commands

詳細は不明です。

user-type-mappings

詳細は不明です。

reserved-words

詳細は不明です。