[Seasar-user:5930] Re: [S2Container]S2FrameworkTestCase/UnitClassLoaderの実装について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 1月 28日 (日) 00:30:23 JST


小林 (koichik) です.

Date:    Sat, 27 Jan 2007 21:12:11 +0900
From:    kubo <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:5928] Re: [S2Container]S2FrameworkTestCase/UnitClassLoaderの実装について

> <結論>
> 結論から言いますと、
> 
> A where MySQLに対してJDBC(MySQL-Connector-3.1.x or 5.0.x)でAccess
> B   and Interceptor内で物理的なConnectionの生成を行う(ConnectionPoolへのAccess一回目)
> C   and Interceptor内でそのConnectionのclose()を呼び出す(ConnectionPoolへ返却)

なにか,いろいろな要因が絡んでそうですね...

B から考えられるのは,MySQL の JDBC ドライバが
UnitClassLoader への参照または,UnitClassLoader から
ロードされたクラスあるいはそのインスタンスへの参照を
持ってしまう可能性です.
もしその影響であれば,DisposableUtil#deregisterAllDrivers() を
呼び出すことで回避できるかもしれません.
現状,このメソッドは S2 内からは呼び出しを行っていません.
# Dolteng だったか,Eclipse プラグインの中で使ってるはず

お手数ですが,
org.seasar.framework.util.DisposableUtil#dispose() の
最後に deregisterAllDrivers() の呼び出しを追加すると
どうなるか試していただけないでしょうか?

> 「C」をしなければ発生しません。
>   →ConnectionPoolのDestroy時はactivePoolに入った状態で破棄される。

こちらはもしかすると,JIRA に登録されている CONTAINER-28 と
関係があるかもしれません.

https://www.seasar.org/issues/browse/CONTAINER-28

この対応は SVN にコミット済みなので,お手数ですが
SVN の最新版でどうなるか試していただけないでしょうか.

> そして、上記の条件は、MySQL+S2Daoで簡単に発生します。

申し訳ありませんが,MySQL の環境を持っていないもので...
# 作れよと言われればそれまでなんですが.(^^;


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>




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