0

したがって、データベースプーリングには、JDBCよりも優れたオプションがあると思いますが、それでも何かが私を夢中にさせています。すべてのサンプルコードで、このようなプーリングを提案しています。

GenericObjectPool connectionPool = new GenericObjectPool(null);

ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(url, un, pw);

PoolableConnectionFactory poolableConnectionFactory = 
           new PoolableConnectionFactory(connectionFactory, connectionPool, null, "SELECT 1", false, true);
PoolingDataSource dataSource = new PoolingDataSource(connectionPool);

return dataSource;

PoolableConnectionFactoryが作成されるのはなぜですか?使用されることはなく、ソースを見ると、コンストラクターで実際に何かを結び付けたり、独自のプライベート変数を設定する以外に魔法のようなことをしたりすることはわかりません。JDBCサイトはそれらの情報でかなり不可解であり、ソースコードを掘り下げるすべてのことで私は混乱しました。これを行う理由はありますか?どうやら、代わりに、実際に変数に割り当てずに、オブジェクトをnewでインスタンス化することもできますが、それで十分です...さらに混乱します。

4

1 に答える 1

1

これらのクラスがcommons-DBCPクラスであると仮定すると、のコンストラクターはPoolableConnectionFactory、引数として渡されたプールのファクトリとして作成されているインスタンスを登録します。

_pool = pool;
_pool.setFactory(this);

したがって、ファクトリを作成するとファクトリが作成され、必要に応じてプールがそれを使用して新しい接続を作成します。

于 2012-07-18T08:32:15.843 に答える