2008年3月19日水曜日

Hibernateのアーキテクチャ

Hibernateを一通り使ったけど詳しいことを知らないので、どんな塩梅かちょこっと調べてみました(誤訳あり)。

 参考: Architecture (Hibernate v.3 Documentation - Chapter 2)


用語の定義

SessionFactory
 単一データベース用のコンパイル済みマッピングのスレッドセーフなキャッシュで、SessionのファクトリかつConnectionProviderのクライアント。トランザクション間で再利用可能な2次キャッシュを、場合によって提供する。

Session
 アプリケーションと永続化ストア間のやり取りを表す、シングルスレッドで短命なオブジェクト。JDBCコネクションをラップしたTransanctionのファクトリ。また、データの1次キャッシュ(idでオブジェクトを検索した場合や、オブジェクトの関連を辿る場合に利用される)を提供する。

Persistent objects and collections
 永続化状態とビジネスファンクション(?)を保持する短命な単一スレッドのオブジェクトで、ほぼJava Beans/POJO。異なる点は、唯一のSessionに関連付けられているということ。Sessionがクローズされるとデタッチされ、アプリケーション層で自由に利用できる。

Transient and detached objects and collections

 Sessionと関連づいていない永続化クラスのインスタンス。アプリケーションによってインスタンス化されまだ永続化されていないか、クローズされたSessionによってインスタンス化されたもの。

Transaction

 アプリケーションで処理のアトミック性を定めるために利用する、シングルスレッドで短命なオブジェクト。Sessionは複数Transactionに跨る場合もあるが、Transactionはそれ以上分割できない。

ConnectionProvider

 JDBCコネクションのファクトリで、DataSourceまたはDriverManager由来のアプリケーション。アプリケーションで利用できないが、カスタマイズできる。

TransactionFactory
 Transactionのファクトリで、アプリケーションで利用できないがカスタマイズできる。

インスタンスの状態について

 Sessionの状態を考慮し、永続化クラスのインスタンスは3つの状態の何れかになる。
  • transient
     インスタンスがSessionと関連付けられておらず、主キーの値がセットされていない状態。

  • persistent
     Sessionと関連付けられたインスタンスで、主キーの値がセットされておりデータベースの行と一致する。特殊な永続化コンテキストでは、永続化IDとJava ID(オブジェクトのメモリー内の場所)とが一致する。

  • detached
     既にクローズされた永続化コンテキストと関連付けられていたか、他のプロセスにシリアライズされたインスタンス。永続化IDがセットされており、データベースの行と一致する場合が多い。
 

0 件のコメント: