- - PR -
フィルタークラスをTomcatのsharedに配置するとアプリから参照できない
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 ] |
|
投稿日時: 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