- PR -

フィルタークラスをTomcatのsharedに配置するとアプリから参照できない

1
投稿者投稿内容
naosuke
会議室デビュー日: 2003/02/09
投稿数: 3
投稿日時: 2005-06-13 16:31
初めまして。

Tomcat5.0でフィルターでアクセス制御を行うクラスをjarにして、
CATALINA_HOME/shared/libに配置するとアプリケーションの配備時に

2005/06/14 10:49:09 org.apache.catalina.core.StandardContext start
致命的: Error filterStart

上のようなエラーになります。


WEB-INF/libに配置してwar化した場合には、正常に配備できますし、
Filter以外のservlet等はCATALINA_HOME/shared/lib配下でも問題ありません。

フィルタークラスをCATALINA_HOME/shared/libに配置して共有化されたような事例を
お持ちの方がいらっしゃればご教授頂けませんでしょうか。

よろしくお願いします。


[ メッセージ編集済み 編集者: naosuke 編集日時 2005-06-14 11:27 ]
naosuke
会議室デビュー日: 2003/02/09
投稿数: 3
投稿日時: 2005-06-16 15:50
問題の発生原因がわかりましたので、ご報告させていただきます。

結果から申しますとFilterとはなんら関係がありませんでした。
警告メッセージを定義しているプロパティファイルをクラスローダから読み込む処理で
クラスローダの取得を下記のようにしていました。

instance = new ExtendedProperties();
classLoader = instance.getClass().getClassLoader();
InputStream is =
classLoader.getResourceAsStream
 ("jp/co/hoge/common/hoge.properties");
instance.load(is,"Windows-31J");

この実装で取得できるクラスローダはWEB-INF/lib/ 配下にjarを配置していた場合には
WebappClassLoaderが返されますが、CATALINA_HOME/shared/lib/ 配下にjarを配置した場合にはStandardClassLoaderが返されます。
理由は勉強不足で分かっていないのですが、下記のようにすることでWebappClassLoaderが返されてプロパティファイルの読み込みに成功し、Filterの起動に成功しました。

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null) {
classLoader = instance.getClass().getClassLoader();

}

どうも、お騒がせしました。
1

スキルアップ/キャリアアップ(JOB@IT)