[Seasar-user:2237] Re: ConnectionPoolの不使用について

加藤太朗 kato
2005年 6月 23日 (木) 11:15:09 JST


小林さん、どもです。加藤です。

> j2ee.dicon をベースにしていれば普通は設定し忘れるところでは
> ないし,Kijimuna も警告を出すはずなので,さほど問題では
> ないような.
御意。ConnectionPoolありきですから仕方ないですよね。
でも実は今Kijimunaアンインストールしてます。(^^;;;;


> ResultSet#getBinaryStream() 等から取得した InputStream をちゃんと
> close() してもそうなっちゃうのでしょうか?
S2Dao使っているので試してないですが、S2Daoで得たエンティティの
byte[] なプロパティを使っているに過ぎないので、S2Daoがcloseしてるか
どうかかなと。このプロパティのゲッターの処理中に、Httpのクライアントが
切断された時に、どう動くかというのが問題なのかもしれません。


> > > 今覚えば、LogicalConnectionのほうがより良いとは思いますが。
> 
> ちなみに JCA 用語では LogicalConnectionHandle となります.
> XAConnection が返す Connection が論理コネクションになるので,
> それへのハンドルということらしいです.
> Handle と Wrapper...大して変わりませんね.その他では
> ConnectionProxy という名前が使われることもあるようです.
> つまり,その程度の名前がデファクトみたいな.
ある資源を指し示すポインタ(またはその代替)であるHandleと、
オブジェクトをくるむ(委譲、Proxy)Wrapperとじゃ、全然違うと思うけどなぁ。
ODBCのstatementハンドルを、statementラッパなんて言い方されたら何のこっちゃ分からん。
LogicalConnectionHandleは分かりやすいですが、getXAConnection().getConnection()
のことであれば、現状のプールとTransactionとXADataSourceの3つ巴のConnectionWrapperImpl
をLogicalConnectionと呼ぶのには抵抗がありますね。


> ConnectionWrapper 自体は XA をサポートしませんよ?
あれ?でも、XA... を返すメソッドが追加されてますよね?

> そもそも ConnectionWrapper というインタフェースは通常の利用者が
> 目にするものではなく,コネクションプーリングを実装するひとかたまりの
> コンポーネントの中で使用されるインタフェースです.
それは「ConnectionWrapperImpl」の説明でしかありません。

> そしてそこでの役割は物理コネクションまたは論理コネクションに対する
> 間接的なアクセスを提供することなので,おかしな名前ではないと思います.
で、通常の利用者の目に触れさせる必要がない閉じた世界で、今後実装が多様化
しないものなのであれば、DICONのためだけに無理にインターフェースにする
必要性は無いですよね?インターフェースありきで実装があるのであって、
実装がありきでインターフェースがあるのは、どうかな?というのが論旨なんです。

> 似たようなプロパティを増やしても分かりにくいだけなので賛成しかねます.
> 仮にやるなら int ではなく boolean で enablePooling とかでしょうが,
> そうする必要性もないと思います.
うーん、ぜんぜん似てません。

poolに未使用のコネクションが現れるまで無限ループするというのは、
「ちょっと並んで待ってなさいよー」と、要求が直列化されるわけで、
考え方としては最大接続数ですよね。

それに対して「再利用のためのキャッシュ」というのは、実行効率のためで
あって、接続数を制限する目的のものではないですよね?

全く違います。

プールするというのは永続化されるから、サーバー上のメモリとの
兼ね合いも含めて調整が必要なのに対し、データベースのコネクション最大数は
一度にどれだけの接続を許すかであって、プール数とは異なるものです。

そういう意図がなく、あのwhile文を設けているのであれば、浅はかだと思います。
maxPoolSizeのままだけにするのであれば、プールが空くまでwhileで待つ事自体を
やめて欲しいです。だってプールでしょ?maxPoolSizeを超えるようであれば、
プールに入れるのをやめれば良いだけだと思います。

> クローズされないと思います.ConnectionWrapper#closeReally() を
> 呼び出しましょう.
ありゃりゃ。ありがとうございます。助かりました。


--------------------------------------------------------->>
Gluegent,Inc. T.Kato
http://package.gluegent.com/~kato/signature.xml
---->> generate products and services with high added value






Seasar-user メーリングリストの案内