第2章 アーキテクチャ

2.1. 概観

Hibernateアーキテクチャの(非常に)高いレベルからのビュー:

この図は、Hibernateがデータベースと設定データを使い、 アプリケーションのための永続化サービス (と永続オブジェクト)を提供することを示しています。

さらに実行時アーキテクチャの詳細なビューをお見せします。 あいにく、Hibernateは柔軟でいろいろな方法を用意しています。 そのため、対極的な2つの例をお見せします。 「軽い」アーキテクチャは、独自にJDBCコネクションを提供し、 トランザクションを管理するアプリケーションを持っています。 この方法は、Hibernate APIの最小限のサブセットを使います:

「重い」アーキテクチャは、ベースとなるJDBC/JTA APIからアプリケーションを抽象化し、 Hibernateが詳細の面倒を見ます。

この図のオブジェクトの定義です:

SessionFactory (net.sf.hibernate.SessionFactory)

1つのデータベースに対応する、コンパイルされたマッピングの スレッドセーブな(更新不能の)キャッシュ。 Session のファクトリで、 ConnectionProvider のクライアント。 プロセス・レベルまたはクラスタ・レベルで、 トランザクション間で再利用可能な、データのオプションの (第2レベル)キャッシュを持つことができます。

Session (net.sf.hibernate.Session)

アプリケーションと永続ストアとの対話を表す、 シングル・スレッドで短命のオブジェクト。 JDBCコネクションをラップしています。 Transaction のファクトリです。 永続オブジェクトの支配的な(第1レベル)キャッシュを保持します。 このキャッシュはオブジェクトのグラフのナビゲーション時や、 識別子でオブジェクトを検索するときに使われます。

Persistent Objects と Collections

永続状態とビジネスの機能を持つ、短命でシングル・スレッドのオブジェクト。 普通のJavaBeansかもしれませんが、特別なことは、 現在の(確実にただ1つの)Session と関連していることです。 Session がクローズされればすぐに、 それらは切り離されて他のアプリケーション層から自由に使うことができます。 (例えば、データ・トランスファ・オブジェクトとして、 プレゼンテーション層と直接やりとりできます。)

Transient Objects と Collections

現時点では Session と関連していない、 永続クラスのインスタンス。 アプリケーションでインスタンス化されて永続化される前か、 クローズされた Session でインスタンス化されたかのどちらかです。

Transaction (net.sf.hibernate.Transaction)

(オプション)作業の最小単位を指定するアプリケーションが使う、 シングル・スレッドで短命のオブジェクト。 ベースとなるJDBC、JTA、CORBAトランザクションから、アプリケーションを抽象化します。 Session は、 いくつかの Transaction を横断するかもしれません。

ConnectionProvider (net.sf.hibernate.connection.ConnectionProvider)

(オプション)JDBCコネクション(とそのプール)のファクトリ。 アプリケーションを DatasourceDriverManager から抽象化します。 アプリケーションには公開されませんが、開発者が拡張 / 実装することは可能です。

TransactionFactory (net.sf.hibernate.TransactionFactory)

(オプション)Transaction インスタンスのファクトリ。 アプリケーションには公開されませんが、開発者が拡張 / 実装することは可能です。

「軽い」アーキテクチャでは、アプリケーションは TransactionTransactionFactoryConnectionProvider を介さずに、 直接JTAやJDBCと対話することができます。

2.2. JMXとの統合

JMXはJavaコンポーネント管理のJ2EE標準です。 JMX標準のMBeanを通して、Hibernateを管理することは可能ですが、 ほとんどのアプリケーション・サーバはまだJMXをサポートしていないため、 標準でない設定機構もいくつか認められています。

JBossの中でJMXコンポーネントとしてHibernateを実行する方法については、 Hibernateのウェブサイトを見てください。

2.3. JCAのサポート

HibernateはJCAコネクタとしても設定できます。詳細についてはウェブサイトを見てください。