3.3. JDBC 接続
org.hibernate.SessionFactory
が JDBC 接続を作成しプーリングすることが推奨されます。 この場合、 次のように簡単に org.hibernate.Session
を開くことができます。
Session session = sessions.openSession(); // open a new Session
データベースへのアクセスが必要となるタスクを開始すると、 プールより JDBC 接続が取得されます。
その前に、 JDBC 接続のプロパティを Hibernate に渡す必要があります。 Hibernate のプロパティ名とセマンティックはすべて
org.hibernate.cfg.Environment
クラス上で定義されます。 JDBC 接続で最も重要となる設定は次の通りです。
次のプロパティを設定すると、 Hibernate は
java.sql.DriverManager
を使用して接続を取得し、 プーリングします。
表3.1 Hibernate JDBC プロパティ
プロパティ名 | 目的 |
---|---|
hibernate.connection.driver_class | JDBC ドライバクラス |
hibernate.connection.url | JDBC の URL |
hibernate.connection.username | データベースユーザー |
hibernate.connection.password | データベースユーザーのパスワード |
hibernate.connection.pool_size | プーリングされた接続の最大数 |
Hibernate 独自の接続プールアルゴリズムは非常に初歩的なものです。 これは、 ユーザーがすぐ Hibernate を使用できるようにするためのアルゴリズムで、 実稼働システムやパフォーマンステスト向けのものではありません。 最良のパフォーマンスや安定性を実現するには、 サードパーティーのプールを使用してください。 Hibernate の内部プールを無効にするには、 hibernate.connection.pool_size プロパティを接続プール固有の設定に置き換えます。 c3p0 を使用する場合の例は次のようになります。
C3P0 はオープンソースの JDBC 接続プールで、 Hibernate の
lib
ディレクトリにあります。 hibernate.c3p0.* プロパティを設定すると、 Hibernate は org.hibernate.connection.C3P0ConnectionProvider
を接続プーリングに使用します。 Proxool を使用したい場合は、 パッケージ化された hibernate.properties
と Hibernate の Web サイトを参照してください。
以下は c3p0 の
hibernate.properties
ファイルの例になります。
hibernate.connection.driver_class = org.postgresql.Driver hibernate.connection.url = jdbc:postgresql://localhost/mydatabase hibernate.connection.username = myuser hibernate.connection.password = secret hibernate.c3p0.min_size=5 hibernate.c3p0.max_size=20 hibernate.c3p0.timeout=1800 hibernate.c3p0.max_statements=50 hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
アプリケーションサーバー内で使用する場合、 Hibernate を設定し、 JNDI に登録されているアプリケーションサーバーの
javax.sql.Datasource
より接続を取得するようにします。 最低でも次のプロパティを 1 つ設定する必要があります。
表3.2 Hibernate データソースプロパティ
プロパティ名 | 目的 |
---|---|
hibernate.connection.datasource | データソースの JNDI 名 |
hibernate.jndi.url | JNDI プロバイダの URL (オプション) |
hibernate.jndi.class | JNDI InitialContextFactory のクラス (オプション) |
hibernate.connection.username | データベースユーザ (オプション) |
hibernate.connection.password | データベースユーザのパスワード (オプション) |
次は、 アプリケーションサーバーが提供する JNDI データソースの
hibernate.properties
ファイルの例になります。
hibernate.connection.datasource = java:/comp/env/jdbc/test hibernate.transaction.factory_class = \ org.hibernate.transaction.JTATransactionFactory hibernate.transaction.manager_lookup_class = \ org.hibernate.transaction.JBossTransactionManagerLookup hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
JNDI データソースから取得した JDBC コネクションは、アプリケーションサーバーのコンテナ管理トランザクションに自動的に参加します。
任意の接続プロパティを提供するには、
hibernate.connnection
を接続プロパティ名の前に追加します。 例えば、 hibernate.connection.charSet を使用した場合、 charSet 接続プロパティを指定できます。
JDBC 接続を取得するため独自のプラグイン戦略を定義するには、
org.hibernate.connection.ConnectionProvider
インターフェースを実装し、 hibernate.connection.provider_class プロパティよりカスタム実装を指定します。