(基本)DataSource
(つまり、接続プールを行わない接続)を想定すると、 DriverManager
(一部のドライバーはデータソースのDriverManagerを内部的に使用するか、DriverManagerのデータソースを使用する)から取得したものと同じ物理接続を取得します。 )。したがって、これらの接続は同じように動作します。
ここで、が接続プールを提供すると仮定するとDataSource
、データソース自体がConnectionPoolDataSource
(または同様の内部メカニズム)を使用してを取得しPooledConnection
ます。このPooledConnectionは、データベースへの実際の物理接続を管理します。
ユーザーがデータソースからの接続を要求すると、データソースはPooledConnectionをチェックアウトし、それを要求しConnection
ます。次に、PooledConnectionは、物理接続を使用またはラップする論理接続を作成します(プロキシを使用するなど)。DataSourceは、その論理接続をユーザーに返します。
ユーザーにとって、論理接続はすべての面で物理接続と同じように動作する必要があります。したがって、ユーザーが接続を閉じると、その論理接続とすべての依存JDBCオブジェクトが閉じられ、物理接続を閉じるのと同じように動作します。
JDBC 4.1セクション11.1は、次のように述べています。
接続プーリングはクライアントに対して完全に透過的です。クライアントはプールされた接続を取得し、プールされていない接続を取得して使用するのとまったく同じ方法でそれを使用します。
そしてセクション11.4:
アプリケーションが論理ハンドルを再利用しようとすると、Connection実装はSQLExceptionをスローします。
と
特定のPooledConnectionオブジェクトについては、最後に生成された論理接続オブジェクトのみが有効になります。関連するPooledConnection.getConnectionメソッドが呼び出されると、既存のConnectionオブジェクトは自動的に閉じられます。
ただし、バックグラウンドでは、論理接続が閉じられると、PooledConnectionは再利用可能であることをデータソースに通知し、データソースはそれを接続プールに返すか、PooledConnection(物理接続を閉じる)を閉じます。接続はもう必要ありません。
DataSourceは、PooledConnectionに論理接続を閉じるように要求することにより、ユーザーからの接続を強制的に取り消すこともできます(たとえば、接続のチェックアウトが長すぎる場合など)。