AccessContext
AccessContextとは?
DBアクセス情報を保持し、共通カラムの自動設定の橋渡しをするクラスです。
DBアクセス情報とは、例えば登録ユーザや更新日時などの、そのレコードに対してどのようなアクセスがされたかの情報で、 DBFluteでは特に、全ての(多くの)テーブルに共通カラムとして定義されるものを示します。
AccessContext は、DBアクセス情報をスレッドローカルによって管理し、DBFlute内部の共通カラムの自動設定処理にDBアクセス情報を届けます。 アプリケーションは、AccessContext にDBアクセス情報を格納しておくことで、共通カラムの設定処理を自動化することができます。
プロパティ
DBアクセス情報は、アプリケーションによって構成が変わります。 以下のプロパティはデフォルトで用意されている項目で、アプリに合致するものだけを利用します。 また、項目が足りない場合は、key-value 形式で汎用的に利用できる accessValueMap を利用すると良いでしょう。
- accessDate
- アクセス日付(java.util.Date)。トランザクション開始時点、もしくは、現在日時など。 値そのものではなく、その値を導出する処理をコールバック(accessDateProvider)も指定できる。
- AccessContext.getAccessDateOnThread() で直接スレッドから値を取得できる。 accessDate が設定されていればその値を戻し、なければ accessDateProvider のコールバックからの値を戻す。
- accessTimestamp
- アクセス日時(java.sql.Timestamp)。トランザクション開始時点、もしくは、現在日時など。 値そのものではなく、その値を導出する処理をコールバック(accessTimestampProvider)も指定できる。
- AccessContext.getAccessTimestampOnThread() で直接スレッドから値を取得できる。 accessTimestamp が設定されていればその値を戻し、なければ accessTimestampProvider のコールバックからの値を戻す。
- accessUser
- アクセスユーザ。アプリケーションのログインユーザなど。
- AccessContext.getAccessUserOnThread() で直接スレッドから値を取得できる。
- accessProcess
- アクセスプロセス。アクセスのきっかけとなった業務名や画面名など。
- AccessContext.getAccessProcessOnThread() で直接スレッドから値を取得できる。
- accessModule
- アクセスモジュール。アクセスを実行したクラス名やメソッド名など。
- AccessContext.getAccessModuleOnThread() で直接スレッドから値を取得できる。
- accessValueMap
- key-value 形式の汎用的な値。
- registerAccessValue(key, value) で設定でき、AccessContext.getAccessValueOnThread(key) で直接スレッドから値を取得できる。但し、戻り値の型は Object 型なので Entity のプロパティに設定する場合はダウンキャストが必要。
直接スレッドから値を取得するメソッドは、スレッドローカルがない、もしくは、値がない場合に呼び出したら例外となります。 但し、日付系のプロパティに関しては例外にならず、デフォルト値ということでアプリの現在日時が戻ります。