jbossの設定ファイル、jbosscmp-jdbc.xmlを解析します。
jboss3.2を対象とします。
ルート要素です。以下の子要素を含むことができます。
全てのエンタープライズBeanに適用するデフォルト値を定義します。
データソースをlookupする為に用いるJNDI名を記述します。
このJNDI名でデータソースが登録されている必要があります。
<datasource>java:/DefaultDS</datasource>
データソースのマッピング名を記述します。
<datasource-mapping>Hypersonic SQL</datasource-mapping>
コンテナ起動時にエンティティBeanで使用するテーブルが存在しない場合、
自動的にテーブルを生成するかどうかを指定します。
<create-table>true</create-table> <create-table>false</create-table>
コンテナ削除(再起動などによる一時的なシャットダウンも含む)時に
エンティティBeanで使用するテーブルを削除するかどうかを指定します。
<remove-table>true</remove-table> <remove-table>false</remove-table>
テーブルが自動生成された際に実行するアクションを定義します。
この要素は 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文で記述します。一つ以上の定義が必要です。
全てのCMPフィールドを読み込み専用にするかどうかを指定します。
読み込み専用にすると、データベースへの書き込み/更新は一切行われません。
<read-only>true</read-only> <read-only>false</read-only>
読み込み専用フィールドのタイムアウト値をミリ秒単位で指定します。
データベースから読み込んだレコードはBeanとしてメモリ内に保管されますが、
タイムアウト値が過ぎると
コンテナはデータベースからBeanにレコードの再読み込みを行う可能性があります。
select文を発行する際、FOR UPDATE 構文を使用するかどうかを指定します。
これを使用すると、select文により取得した行(レコード)はcommitされるまで
他から利用できないように行ロックが掛かります。
実装方法はデータベースによります。
<row-locking>true</row-locking> <row-locking>false</row-locking>
テーブル自動生成時、プライマリキーフィールドにPrimary Key制約を付けるかどうかを指定します。
実装方法はデータベースによります。
<pk-constraint>true</pk-constraint> <pk-constraint>false</pk-constraint>
テーブル自動生成時、リレーションフィールドにForeign Key制約を付けるかどうかを指定します。
実装方法はデータベースによります。
<fk-constraint>true</fk-constraint> <fk-constraint>false</fk-constraint>
詳細は不明です。
<preferred-relation-mapping>foreign-key</preferred-relation-mapping> <preferred-relation-mapping>relation-table</preferred-relation-mapping>
先読みの設定を記述します。
<read-ahead> <strategy>on-load</strategy> <deep-read-ahead/> <page-size>255</page-size> <eager-load-group>*</eager-load-group> </read-ahead>
先読み方法を指定します。
<strategy>none</strategy> <strategy>on-load</strategy> <strategy>on-find</strategy>
詳細は不明です。
一回の先読みで読み込むエントリー数を指定します。
詳細は不明です。
詳細は不明です。
<list-cache-max>1000</list-cache-max>
詳細は不明です。
プライマリキーの自動生成に関する設定を記述します。
prim-key-class 要素の説明を参考にして下さい。
この要素は jbosscmp-jdbc_3_2.dtd で定義されています。
その為、standardjbosscmp-jdbc.xml 内でのみ定義可能です。
「jbosscmp-jdbc.xmlについて」を参考にして下さい。
詳細は不明です。
<entity-command name="default"/>
個々のエンタープライズBeanに適用する設定を定義します。
一つ以上記述する必要があります。
以上は defaults を参照して下さい。
EJB名を記述します。必須要素です。
テーブル名を定義します。
省略すると ejb-name と同じになります。
CMPフィールドに関する設定を定義します。複数定義可能です。
フィールド名を記述します。必須要素です。
このフィールドを読み込み専用にするかどうかを指定します。
このフィールドの読み込みタイムアウト値をミリ秒単位で指定します。
実際のカラム名を定義します。
このフィールドを NOT NULL にするときに定義します。
<not-null />
このフィールドのJava型を定義します。
指定する値は java.sql.Types で定義されている必要があります。
sql-type と対で使用します。
<jdbc-type>DOUBLE</jdbc-type>
このフィールドのSQL型を定義します。
指定できる型名はデータベースに依存します。
jdbc-type と対で使用します。
<sql-type>DECIMAL(5,2)</sql-type>
プロパティ名を定義します。必須要素です。
実際のカラム名を定義します。
このプロパティを NOT NULL にするときに定義します。
詳細は不明です。
詳細は不明です。
SQLクエリー文を定義します。複数定義可能です。
SQLクエリーの説明文を記述します。
query-method を参照して下さい。ただし method-intf は使用できません。
必須要素です。
詳細は不明です。
dynamic-ql , declared-sql とは同時に使用できません。
詳細は不明です。
jboss-ql , declared-sql とは同時に使用できません。
SQL文を記述します。jboss-ql , dynamic-ql とは同時に使用できません。
基本となるSQL文は SELECT [プライマリキー] FROM TABLE_NAME です。
これに追加する文字列を定義していくことになります。
<declared-sql>
<where>name like {0}</where>
</declared-sql>
SELECT句に追加する文字列を定義します。
DISTINCTキーワードを使用するときに指定します。
<distinct />
詳細は不明です。
詳細は不明です。
テーブル名に別名を定義するときに指定します。
<alias>my_table</alias>
FROM句に追加する文字列を定義します。
<from>, FullAddressEJB as a</from>
WHERE句に追加する文字列を定義します。
メソッドパラメータを {0} , {1} のように埋め込むことが出来ます。
<where>TITLE={0} OR ARTIST={0} OR TYPE={0} OR NOTES={0}</where>
ORDER句に追加する文字列を定義します。
<order>TITLE</order>
SQL文の最後に追加する文字列を定義します。
<other>LIMIT 100 OFFSET 200</other>
read-ahead を参照して下さい。
詳細は不明です。
リレーションシップを定義します。
リレーションシップとは、異なるテーブル同士で結び付くレコードの相互関係を表します。
以下、左辺レコード ⇔ 右辺レコード という関係が成立するとします。
リレーションを定義します。一つ以上の記述が必要です。
リレーション名を定義します。必須要素です。
このリレーションが外部キーにマップされることを明示します。実際の効能は不明です。
ただし、n対m(many-to-many)形式のリレーションシップには使用できません。
relation-table-mapping と同時には定義できません。
<foreign-key-mapping />
リレーション用テーブルに関する情報を定義します。
n対m(many-to-many)形式のリレーションにのみ使用できます。
foreign-key-mapping と同時には定義できません。
many-to-many形式のリレーションを定義すると、リレーション用にテーブルが一つ作成されます。
このテーブルは二つのカラムを持ちます。
左辺レコードのプライマリキーに対応するカラムと、
右辺レコードのプライマリキーに対応するカラムです。
リレーション用テーブル名を定義します。必須要素です。
リレーション用テーブルの各情報を定義します。
内容は defaults と同様ですのでそちらを参照して下さい。
リレーションシップロール(左辺レコード)を定義します。
必ず、後述するリレーションシップロール(右辺レコード)と対で定義します。
リレーションシップロール名を記述します。必須要素です。
ejb-jar.xml 内の ejb-relationship-role 要素で定義されたリレーションシップロール名である必要があります。
defaults を参照して下さい。
リレーションシップで使用されるフィールドに関する情報を定義します。
フィールド毎の設定を定義します。複数定義可能です。
フィールド名を定義します。必須要素です。
ejb-jar.xml 内の primkey-field 要素で定義されているフィールド名で無ければなりません。
カラム名を定義します。
後述の property 要素を使用しない場合、必須要素となります。
プロパティを定義します。
この要素を記述する場合には、column_name, jdbc-type, sql-type は記述できません。
複数定義可能です。
リレーションシップロール(右辺レコード)を定義します。
必ず、リレーションシップロール(左辺レコード)と対で定義します。
Beanクラスに関する情報を記述します。
Beanクラス毎の情報を記述します。複数定義可能です。
説明文を記述します。
対象となるBeanクラス名を完全限定名で記述します。
必須要素です。
Java型とSQL型のマッピング方法を定義します。
データベース毎にマッピング方法を定義します。一つ以上の定義が必要です。
タイプマッピング名を定義します。
通常はデータベース名にします。
<name>mySQL</name>
行ロックを行うためのSQL文を定義します。
<row-locking-template>SELECT ?1 FROM ?2 WHERE ?3 FOR UPDATE</row-locking-template>
プライマリキー制約を付けるためのSQL文を定義します。
<pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
外部キー制約を付けるためのSQL文を定義します。
<fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
EJB-QLコンパイラが生成するSQL文における、テーブル別名のプレフィックスを定義します。
<alias-header-prefix>t</alias-header-prefix>
EJB-QLコンパイラが生成するSQL文における、テーブル別名のサフィックスを定義します。
<alias-header-suffix>_</alias-header-suffix>
EJB-QLコンパイラが生成するSQL文における、テーブル別名の最大文字数を定義します。
<alias-max-length>32</alias-max-length>
このデータベースが副問い合わせをサポートするかどうかを記述します。
trueにすると、一部のEJB-QLはサブクエリーを使用します。
<subquery-supported>false</subquery-supported>
EJB-QLコンパイラが生成するSQL文における、「true」値のマッピング記法を定義します。
<true-mapping>1</true-mapping>
EJB-QLコンパイラが生成するSQL文における、「false」値のマッピング記法を定義します。
<false-mapping>0</false-mapping>
EJB-QLで使用する関数を定義します。
複数定義可能です。
<function-mapping> <function-name>concat</function-name> <function-sql>concat(?1, ?2)</function-sql> </function-mapping>
関数名を定義します。
関数を使用するときのSQL文を定義します。
JavaクラスからJDBC/SQL型へのマッピングを定義します。
一つ以上の定義が必要です。
<mapping> <java-type>java.lang.Float</java-type> <jdbc-type>FLOAT</jdbc-type> <sql-type>FLOAT</sql-type> </mapping>
マッピング対象となるJavaのクラス名を完全限定名で記述します。
このフィールドのjdbc型を定義します。
指定する値は java.sql.Types で定義されている必要があります。
このフィールドのSQL型を定義します。
指定できる型名はデータベースに依存します。
詳細は不明です。
詳細は不明です。
詳細は不明です。