[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 メーリングリストの案内