第6章 JDBC データソースの使用
以下のトピックでは、Fuse OSGi ランタイムでの JDBC データソースの使用について説明します。
6.1. 接続インターフェイスについて
データ操作の実行に使用する最も重要な オブジェクト は、java.sql.Connection
インターフェイスの実装です。Fuse 設定の観点からは、Connection
オブジェクトの 取得 方法を理解することが重要です。
関連するオブジェクトを含むライブラリーは以下のとおりです。
-
PostgreSQL:
mvn:org.postgresql/postgresql/42.2.5
-
MySQL:
mvn:mysql/mysql-connector-java/5.1.34
既存の実装 (ドライバー JARに含まれる) は以下を提供します。
-
PostgreSQL:
org.postgresql.jdbc.PgConnection
-
MySQL:
com.mysql.jdbc.JDBC4Connection
(com.mysql.jdbc.Driver
のさまざまなconnect*()
メソッドも参照)
これらの実装には、DML、DDL、および簡単なトランザクション管理を実行するためのデータベース固有のロジックが含まれます。
理論的には、これらの接続オブジェクトを手動で作成することは可能ですが、詳細を非表示にしてよりクリーンな API を提供する 2 つの JDBC メソッドがあります。
-
java.sql.Driver.connect()
- このメソッドは、ずっと前にスタンドアロンアプリケーションで使用されていました。 -
javax.sql.DataSource.getConnection()
- ファクトリーパターンを使用する場合に推奨される方法です。同様の方法を使用して、JMS 接続ファクトリーから JMS 接続を取得します。
ドライバーマネージャー のアプローチについては、ここでは説明しません。このメソッドは、特定の接続オブジェクトのプレーンコンストラクターの上の小さな レイヤー であると記述するだけで十分です。
データベース固有の通信プロトコルを効果的に実装する java.sql.Connection
に加えて、次の 2 つの特殊な接続インターフェイスがあります。
-
javax.sql.PooledConnection
は物理接続を表します。コードは、このプールされた接続と直接対話しません。代わりに、getConnection()
メソッドから取得した接続が使用されます。この間接参照により、アプリケーションサーバーのレベルで接続プールを管理できます。通常、getConnection()
を使用して取得した接続はプロキシーです。このようなプロキシー接続が閉じられると、物理接続は切断されず、管理接続プールで再度利用できるようになります。 -
javax.sql.XAConnection
では、XA 対応の接続に関連するjavax.transaction.xa.XAResource
オブジェクトを取得して、javax.transaction.TransactionManager
と使用できます。javax.sql.XAConnection
はjavax.sql.PooledConnection
を継承するので、 `getConnection() メソッドも提供し、通常の DML/DQL メソッドで JDBC 接続オブジェクトにアクセスできます。