6.4. Configuration (設定)

6.4.1. Envers パラメーターの設定

JBoss EAP は About Hibernate Envers を介してエンティティー監査を使用して、永続クラスのこれまでの変更を追跡します。

利用可能な Envers パラメーターの設定

  1. アプリケーションの persistence.xml ファイルを開きます。
  2. 必要に応じて Envers プロパティーを追加、削除、または設定します。利用可能なプロパティーの一覧は、Envers Configuration Properties を参照してください。

    例: Envers パラメーター

    <persistence-unit name="mypc">
      <description>Persistence Unit.</description>
      <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
      <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
      <properties>
        <property name="hibernate.hbm2ddl.auto" value="create-drop" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.cache.use_second_level_cache" value="true" />
        <property name="hibernate.cache.use_query_cache" value="true" />
        <property name="hibernate.generate_statistics" value="true" />
        <property name="org.hibernate.envers.versionsTableSuffix" value="_V" />
        <property name="org.hibernate.envers.revisionFieldName" value="ver_rev" />
      </properties>
    </persistence-unit>

6.4.2. ランタイム時の監査の有効化または無効化

ランタイム時のエンティティーバージョンの監査の有効化または無効化

  1. AuditEventListener クラスをサブクラス化します。
  2. Hibernate イベントで呼び出される以下のメソッドを上書きします。

    • onPostInsert
    • onPostUpdate
    • onPostDelete
    • onPreUpdateCollection
    • onPreRemoveCollection
    • onPostRecreateCollection
  3. イベントのリスナーとしてサブクラスを指定します。
  4. 変更を監査する必要があるかどうかを判断します。
  5. 変更を監査する必要がある場合には、スーパークラスに呼び出しを渡します。

6.4.3. 条件監査の設定

Hibernate Envers は、一連のイベントリスナーを使用して、さまざまな Hibernate イベントに対する応答で監査データを永続化します。Envers JAR がクラスパスにある場合、これらのリスナーは自動的に登録されます。

条件監査の実装

  1. persistence.xml ファイルで hibernate.listeners.envers.autoRegister を false に設定します。
  2. 上書きされる各イベントリスナーをサブクラス化します。条件付き監査ロジックをサブクラスに配置し、監査を実行する必要がある場合は super メソッドを呼び出します。
  3. org.hibernate.envers.event.EnversIntegrator に類似した、org.hibernate.integrator.spi.Integrator のカスタム実装を作成します。デフォルトのクラスではなく、ステップ 2 で作成したイベントリスナーサブクラスを使用します。
  4. META-INF/services/org.hibernate.integrator.spi.Integrator ファイルを JAR に追加します。このファイルには、インターフェイスを実装するクラスの完全修飾名が含まれている必要があります。

6.4.4. Envers 設定プロパティー

表6.1 エンティティーデータのバージョン管理設定パラメーター

プロパティー名デフォルト値説明

org.hibernate.envers.audit_table_prefix

 

監査されたエンティティーの名前の前に付加される文字列。監査情報を保持するエンティティーの名前を作成します。

org.hibernate.envers.audit_table_suffix

_AUD

監査されたエンティティーの名前に付加される文字列。監査情報を保持するエンティティーの名前を作成します。たとえば、テーブル名が Person のエンティティーが監査されると、Envers は、履歴データを格納する Person_AUD と呼ばれるテーブルを生成します。

org.hibernate.envers.revision_field_name

REV

改訂番号を保持する監査エンティティーのフィールド名。

org.hibernate.envers.revision_type_field_name

REVTYPE

改訂の種類を保持する監査エンティティーのフィールド名。現在の改訂の種類には、挿入を行う add、変更を行う mod、削除を行う del があります。

org.hibernate.envers.revision_on_collection_change

true

このプロパティーは、所有の変更のない関係フィールドがある場合にリビジョンを生成するかどうかを決定します。これは、一対多数の関係のコレクションであるか、一対一の関係で mappedBy 属性を使用するフィールドになります。

org.hibernate.envers.do_not_audit_optimistic_locking_field

true

true の場合、(@Version でアノテーション付けされた) 楽観的ロックに使用されるプロパティーは自動的に監査から除外されます。

org.hibernate.envers.store_data_at_delete

false

このプロパティーは、ID のみではなく、エンティティーデータを削除するときに、エンティティーデータをリビジョンに保存するかどうかを定義します。その他のすべてのプロパティーは null とマークされます。通常、データは最後から 2 番目のバージョンにあるため、これは必須ではありません。ただし時折、最後のリビジョンでアクセスすることが簡単で、より効率的になる場合があります。ただし、これは、削除前に含まれるエンティティーのデータが 2 回保存されることを意味します。

org.hibernate.envers.default_schema

null (通常のテーブルと同じ)

監査テーブルに使用されるデフォルトのスキーマ名。@AuditTable(schema="…​") アノテーションを使用して上書き可能。これがない場合、スキーマは通常のテーブルのスキーマと同じになります。

org.hibernate.envers.default_catalog

null (通常のテーブルと同じ)

監査テーブルに使用するデフォルトのカタログ名。@AuditTable(catalog="…​") アノテーションを使用して上書き可能。存在しない場合、カタログは通常のテーブルのカタログと同じになります。

org.hibernate.envers.audit_strategy

org.hibernate.envers.strategy.DefaultAuditStrategy

このプロパティーは、監査データの永続化時に使用する必要のある監査ストラテジーを定義します。デフォルトでは、エンティティーが変更されたリビジョンのみが保存されます。または、org.hibernate.envers.strategy.ValidityAuditStrategy では、開始リビジョンと終了リビジョンの両方を保存します。これらを組み合わせて、監査行が有効であったタイミングを定義します。

org.hibernate.envers.audit_strategy_validity_end_rev_field_name

REVEND

監査エンティティーで終了リビジョン番号を保持するコラムの名前。このプロパティーは、妥当な監査ストラテジーが使用される場合にのみ有効です。

org.hibernate.envers.audit_strategy_validity_store_revend_timestamp

false

このプロパティーは、終了リビジョン自体に加えて、データが最後に有効であった終了リビジョンのタイムスタンプも保存すべきかどうかを定義します。これは、テーブルパーティションを使用して、リレーショナルデータベースから古い監査レコードをパージする場合に便利です。パーティショニングには、テーブルに存在するコラムが必要です。このプロパティーは ValidityAuditStrategy が使用される場合にのみ評価されます。

org.hibernate.envers.audit_strategy_validity_revend_timestamp_field_name

REVEND_TSTMP

データがまだ有効であった時点での終了リビジョンのタイムスタンプのコラム名。ValidityAuditStrategy が使用され org.hibernate.envers.audit_strategy_validity_store_revend_timestamp が true に評価します。