[Seasar-user:20749] Re: TomcatからのUndeploy時にエラーが発生
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2011年 5月 13日 (金) 12:01:02 JST
小林 (koichik) です.
Date: Fri, 13 May 2011 10:47:06 +0900
From: "Watanabe, Satoshi (SDNA)" <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:20748] Re: TomcatからのUndeploy時にエラーが発生
> ただ、配置されているアプリケーションによっては、JDBC Realmを利用したい
> 状況があり、mysql-connectorはTomcat/lib以下に配置せざるを得ない状況です。
> この状況ですと、Tomcatがmysql-connectorをロードするタイミングによっては、
> Seasar2が抱えるmysql-connectorのクラスローダがStandardClassLoaderになって
> しまう可能性が出てくるという認識です。
それは問題ありません。
問題なのは、Seasar2 が StandardClassLoader にロードされる場合です。
> また、上記状況の認識が正しいかわからない中ではありますが、上記実験の中で、
> 複数のSeasar2を利用したアプリケーション(mysql-connectorを各アプリケーションの
> WEB-INF/libに移動済でWebappClassLoaderによってロードされている)が乗った
> Tomcat上で、任意のSeasar2アプリケーションをアンロードすると、すべてのSeasar2を
> 利用しているアプリケーションが参照しているmysql-connectorがderegister
> されているようでした。
それは不可解ですね。
DriverManager#getDrivers() は、呼び出し元と同じクラスローダから
ロードされた Driver を返します。
たとえば WebappClassLoader#1 からロードされた Seasar2 は、同じく
WebappClasLoader#1 からロードされた Driver しか取得できません。
WebappClassLoader#2 や StandardClassLoader にロードされた Driver は
取得することができず、よって deregister() することもできません。
確認方法に問題はないでしょうか?
取得した資料などあれば見せてください。
Tomcat に -verbose:class を付けた場合のログなど。
--
{
name: "Koichi Kobayashi",
mail: "[E-MAIL ADDRESS DELETED]",
blog: "http://d.hatena.ne.jp/koichik/",
twitter: "@koichik"
}
Seasar-user メーリングリストの案内