Hibernateアーキテクチャの(非常に)高いレベルからのビュー:
この図は、Hibernateがデータベースと設定データを使い、 アプリケーションのための永続化サービス (と永続オブジェクト)を提供することを示しています。
さらに実行時アーキテクチャの詳細なビューをお見せします。 あいにく、Hibernateは柔軟でいろいろな方法を用意しています。 そのため、対極的な2つの例をお見せします。 「軽い」アーキテクチャは、独自にJDBCコネクションを提供し、 トランザクションを管理するアプリケーションを持っています。 この方法は、Hibernate APIの最小限のサブセットを使います:
「重い」アーキテクチャは、ベースとなるJDBC/JTA APIからアプリケーションを抽象化し、 Hibernateが詳細の面倒を見ます。
この図のオブジェクトの定義です:
1つのデータベースに対応する、コンパイルされたマッピングの スレッドセーブな(更新不能の)キャッシュ。 Session のファクトリで、 ConnectionProvider のクライアント。 プロセス・レベルまたはクラスタ・レベルで、 トランザクション間で再利用可能な、データのオプションの (第2レベル)キャッシュを持つことができます。
アプリケーションと永続ストアとの対話を表す、 シングル・スレッドで短命のオブジェクト。 JDBCコネクションをラップしています。 Transaction のファクトリです。 永続オブジェクトの支配的な(第1レベル)キャッシュを保持します。 このキャッシュはオブジェクトのグラフのナビゲーション時や、 識別子でオブジェクトを検索するときに使われます。
永続状態とビジネスの機能を持つ、短命でシングル・スレッドのオブジェクト。 普通のJavaBeansかもしれませんが、特別なことは、 現在の(確実にただ1つの)Session と関連していることです。 Session がクローズされればすぐに、 それらは切り離されて他のアプリケーション層から自由に使うことができます。 (例えば、データ・トランスファ・オブジェクトとして、 プレゼンテーション層と直接やりとりできます。)
現時点では Session と関連していない、 永続クラスのインスタンス。 アプリケーションでインスタンス化されて永続化される前か、 クローズされた Session でインスタンス化されたかのどちらかです。
(オプション)作業の最小単位を指定するアプリケーションが使う、 シングル・スレッドで短命のオブジェクト。 ベースとなるJDBC、JTA、CORBAトランザクションから、アプリケーションを抽象化します。 Session は、 いくつかの Transaction を横断するかもしれません。
(オプション)JDBCコネクション(とそのプール)のファクトリ。 アプリケーションを Datasource や DriverManager から抽象化します。 アプリケーションには公開されませんが、開発者が拡張 / 実装することは可能です。
(オプション)Transaction インスタンスのファクトリ。 アプリケーションには公開されませんが、開発者が拡張 / 実装することは可能です。
「軽い」アーキテクチャでは、アプリケーションは Transaction や TransactionFactory や ConnectionProvider を介さずに、 直接JTAやJDBCと対話することができます。
JMXはJavaコンポーネント管理のJ2EE標準です。 JMX標準のMBeanを通して、Hibernateを管理することは可能ですが、 ほとんどのアプリケーション・サーバはまだJMXをサポートしていないため、 標準でない設定機構もいくつか認められています。
JBossの中でJMXコンポーネントとしてHibernateを実行する方法については、 Hibernateのウェブサイトを見てください。