2

接続を取得するための推奨される方法は、私が読んだものから DataSource を使用することです。DataSourceやなどのさまざまなインターフェイスがありますConnectionPoolDataSource。PostgreSQL ドライバーを使用していて、Glassfish サーバーで接続プールを使用したいとします。

getConnection()アプリケーション コードでは、 type のプロパティで呼び出しますDataSource。これはどのように可能ですか?Glassfish はタイプConnectionPoolDataSource(より正確には実装クラス) のデータソースを作成し、それを JNDI 名にバインドしておらず、JNDI 名を使用してデータソースを取得すると、ConnectionPoolDataSourcenotのオブジェクトを取得しますDataSourceか?? ConnectionPoolDataSourceメソッドはありませんgetConnection()。このサーバーマジックがわかりません。

誰かがこれらすべてがどのように組み合わされるか説明できますか?

4

1 に答える 1

4

Glassfish構成で選択できるDataSourceDriverまたはは、アプリケーションに直接公開されません。代わりに、Application Server は接続プールを維持する独自のものを持っています。このデータソースは、構成された、またはを保持する接続のファクトリとして使用しますプール。ConnectionPoolDataSourceDataSourceDataSourceDriverConnectionPoolDataSource

そのため、 Glassfish を で構成すると、ConnectionPoolDataSourceを使用して接続プールConnectionPoolDataSourceの物理接続 (PooledConnectionオブジェクト) が作成されます。この接続プールは、アプリケーション サーバーのDataSource実装によって保持されます。アプリケーションは、 this を使用してその接続プールにアクセスしますDataSource。DataSourceConnectionは、接続プールから論理オブジェクトを渡します。

論理接続と物理接続の正確な内部動作は実装に依存しますが、これらの論理接続は通常、物理接続のプロキシまたはラッパーのようなものです。論理接続を取得すると、接続プールから物理接続がチェックアウトされます。論理接続を閉じると、接続プールは、物理接続が再び使用可能になったという信号を受け取り、それを接続プールに返します。

于 2013-03-05T13:51:07.810 に答える