30.12. デフォルト

JBoss グローバルデフォルトは、standardjbosscmp-jdbc.xml file of the server/<server-name>/conf/ ファイルに定義されています。それぞれのアプリケーションで、jbosscmp-jdbc.xml ファイル内のグローバルデフォルトをオーバーライドすることができます。デフォルトオプションは、設定ファイルの defaults 要素に入っています。コンテンツモデルを次に示します。
jbosscmp-jdbc.xml defaults コンテンツモデル

図30.16 jbosscmp-jdbc.xml defaults コンテンツモデル

defaults セクションの例は次のとおりです。
<jbosscmp-jdbc>
    <defaults>
        <datasource>java:/DefaultDS</datasource>
        <datasource-mapping>Hypersonic SQL</datasource-mapping>
        <create-table>true</create-table>
        <remove-table>false</remove-table>
        <read-only>false</read-only>
        <read-time-out>300000</read-time-out>
        <pk-constraint>true</pk-constraint>
        <fk-constraint>false</fk-constraint>
        <row-locking>false</row-locking>
        <preferred-relation-mapping>foreign-key</preferred-relation-mapping>
        <read-ahead>
            <strategy>on-load</strategy>
            <page-size>1000</page-size>
            <eager-load-group>*</eager-load-group>
        </read-ahead>
        <list-cache-max>1000</list-cache-max>
    </defaults>
</jbosscmp-jdbc>

30.12.1. jbosscmp-jdbc.xml defaults 宣言例

各オプションは、エンティティ、リレーションシップ、またはその両方に適用することができ、特定のエンティティまたはリレーションシップでオーバーライドすることができます。各オプションの詳細は次のとおりです。
  • datasource: このオプションの要素は、データソースのルックアップに使用される jndi-name になります。エンティティまたは relation-table で使用されるデータベース接続はすべてデータソースから得られます。エンティティにさまざまなデータソースを持たせると、finder および ejbSelect でクエリーできるドメインを大きく制約することになるため推奨しません。
  • datasource-mapping: このオプションの要素は、Java タイプを SQL タイプにマッピングする方法、および EJB-QL 関数をデータベース固有の関数にマッピングする方法を決める type-mapping の名前を指定します。タイプマッピングについては、「マッピング」で説明しています。
  • create-table: この任意要素が true の場合、JBoss はエンティティのテーブルの作成を試行しなければなりません。アプリケーションがデプロイされると、JBoss は、テーブル作成の前にすでにテーブルが存在しているかどうか確認します。テーブルが見つかった場合は、ログに記録が取られ、テーブルは作成されません。このオプションは、開発の初期段階でテーブル構造が頻繁に変わる場合に非常に役立ちます。デフォルトは false です。
  • alter-table: スキーマの自動作成に create-table が使用される場合、alter-table を使ってエンティティ bean に対する変更を反映しスキーマを最新状態に保つことができます。Alter table は次のような特定のタスクを実行します。
    • 新しいフィールドが作成されます。
    • 使用されなくなったフィールドが削除されます。
    • 宣言されている長さより短い文字列フィールドは宣言されている長さまで延長されます(すべてのデータベースでサポートされているわけではありません)。
  • remove-table:この任意の要素が true の場合、JBoss は、各エンティティおよびリレーションシップにマッピングした各関連テーブルに対して、テーブルのドロップを試行します。アプリケーションのデプロイが解除されたときに、JBoss はテーブルのドロップを試行します。このオプションは、開発の初期段階でテーブル構造が頻繁に変わる場合に非常に役立ちます。デフォルトは false です。
  • read-only: この任意の要素は、true の場合、bean プロバイダーがフィールドの値を変更ができなくなります。読み取り専用のフィールドは、データベースに格納もしくは挿入されません。プライマリキーフィールドが読み取り専用である場合、create メソッドは CreateExceptionを送出します。read-only フィールドで set アクセッサーが呼び出されると、EJBExceptionをスローします。読み取り専用フィールドは、最終更新など、データベーストリガーによって入力されるフィールドで役立ちます。read-only オプションは、フィールドごとにオーバーライドすることが可能です。デフォルトは false です。
  • read-time-out:この任意の要素では、読み取り専用フィールドで読み取りが有効である時間をミリ秒単位で表します。値が 0 の場合にはトランザクション開始時に必ずその値が再読み込みされ、値が -1 の場合には値はタイムアウトしません。このオプションも、CMP フィールドごとにオーバーライドすることが可能です。read-only が false の場合、この値は無視されます。デフォルトは -1 です。
  • row-locking: この任意の要素が true の場合、トランザクションでロードされたすべての行を JBoss がロックすることを指定します。ほとんどのデータベースがエンティティのロード時に SELECT FOR UPDATE 構文を使用してこれを実装しますが、実際の構文は、このエンティティで使用される datasource-mapping 内の row-locking-template で決まります。デフォルトは false です。
  • pk-constraint: この任意の要素では、true の場合テーブル作成時に JBoss がプライマリキー制約を追加することを指定します。デフォルトは false です。
  • preferred-relation-mapping: この任意の要素は、リレーションシップに対する希望のマッピングスタイルを指定します。preferred-relation-mapping 要素は、foreign-key または relation-tableのいずれかでなければなりません。
  • read-ahead: この任意の要素はエンティティの CMR フィールドおよびクエリ結果のキャッシュ化を制御します。このオプションについては 「Read-ahead」で説明します。
  • list-cache-max:この任意の要素は、このエンティティで追跡できる read-lists の数を指定します。このオプションについては、「on-load」で説明しています。デフォルトは 1000 です。
  • clean-read-ahead-on-load: 先行読み込み (read ahead) キャッシュからエンティティがロードされる場合、 JBoss は先行読み込みキャッシュから使用されるデータを削除することができます。デフォルトは false になります。
  • fetch-size:この任意の要素は、基盤データストアへの 1 往復で読み込むエンティティの数を指定します。デフォルトは 0 です。
  • unknown-pk: この任意の要素によって、java.lang.Object の未知のプライマリキータイプを永続ストアにマッピングする方法を定義することができます。
  • entity-command: この任意の要素によって、エンティティ作成用のデフォルトコマンドを定義することができます。これについては、「エンティティコマンドおよびプライマリキー生成」 で詳しく説明しています。
  • ql-compiler: この任意の要素によって、代わりのクエリーコンパイラーを指定することができます。代わりのクエリーコンパイラについては、「EJBQL 2.1 と SQL92 のクエリ」で説明しています。
  • throw-runtime-exceptions: この属性では、true に設定された場合、データベースへの接続エラーは、チェック例外としてではなく、ランタイム EJBException として表示されるべきであることを示します。