3

PooledConnection を実装するたびに、書き込みます

class MyConnection implements PooledConnection, Connection {
  // implement methods of PooledConnection and Connection 
}

そして、なぜPooledConnection設計されていないのだろうかextends Connection?結局のところ、aPooledConnectionは常に aであるためです。Connection

4

3 に答える 3

2

...結局のところ、PooledConnectionは常に接続であるためです。

実際、それが要点です。インターフェイスのPooledConnection設計によりPooledConnectionインスタンスをインスタンスとは別のオブジェクトにすることができConnectionます。

どうしてそうするか?XA実装ではConnection、さまざまなデータベースベンダーからのさまざまな実装が存在する可能性があり、PooledConnectionクラスはその上にある「もの」を処理するように設計されています。たとえば、複数のデータベース間でのトランザクションの調整。2つのインターフェースを区別することは、XA実装がラッパーオブジェクトとしてXAレベルの接続を実装する必要がないことを意味します。

そしてもちろん、PooledConnectionConnection インターフェースなので、状況に応じて同じ接続クラスで実装できます。

(または、少なくとも、それは私の理論です。決定的な答えを得るには、それらのインターフェースを生み出した仕様を書いた人々に尋ねる必要があります。)

于 2012-07-18T10:26:22.637 に答える
2

I'm by no means sure, but I imagine the reason PooledConnection doesn't extend Connection is so that you can make a significantly simpler PooledConnection implementation that uses any other existing Connection implementation, allowing code-reuse and keeping functionality separate.

于 2012-07-18T10:10:07.470 に答える
1

APooledConnectionは、物理接続へのハンドルです。この物理接続オブジェクトは JDBCConnectionである可能性がありますが、一方で、低レベルのデータベース固有の構造である可能性もあります。

ハンドルはConnection、接続プールが (メソッドを使用して) 接続プールのクライアントに渡す論理オブジェクトを作成するために使用するgetConnection()ものです。クライアントがその接続を閉じると、接続プールはPooledConnection再び使用可能になったことを通知されます。

PooledConnectionは として直接使用することを意図してConnectionいないため、 Connection インターフェースを拡張しません。

于 2012-07-19T18:26:13.427 に答える