背景を最初に:
- WindowsXP および OpenSUSE SLED 11.0 上の Tomcat 6.0 (両方のプラットフォームで同じ結果)
- オラクルJDK v6
- 春 3.0
- ジャボリューション 5.5.1
アプリで使用している jar (javolution-5.5.1.jar) で奇妙な問題が発生しました。私はこのjarをWEB-INF/libにしばらく置いていましたが、問題はありませんでした。この jar は複数のアプリで共有されているため、アプリの lib ディレクトリではなく、Tomcat の lib ディレクトリに配置する必要があると判断し、移動しました。
ただし、これを行うと、javolution.jar から Struct を拡張するクラス (Scinv) にアクセスしようとして、新しい RuntimeException が発生しました。この方法でアプリが Tomcat の lib ディレクトリから JAR 内のクラスにアクセスできない理由はありますか?
私のクラスは次のとおりです(無関係な詳細は削除されています):
import javolution.io.Struct;
public class Scinv extends Struct {
public static methodA() {...}
public static methodB() {...}
public static class ProdRecs extends Struct {...}
public static class ProdRec extends Struct {...}
}
ネストされた静的クラスを利用する Scinv の静的メソッドにアクセスしようとすると、次のようになります。
Apr 5, 2011 3:40:50 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet inventory threw exception
java.lang.RuntimeException: Struct class: general.dao.externalfiles.Scinv$ProdRec not found
at javolution.io.Struct.array(Struct.java:557)
at general.dao.externalfiles.Scinv$ProdRecs.<init>(Scinv.java:447)
Apr 5, 2011 3:40:50 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
java.lang.RuntimeException: Struct class: general.dao.externalfiles.Scinv$ProdRec not found
at javolution.io.Struct.array(Struct.java:557)
at general.dao.externalfiles.Scinv$ProdRecs.<init>(Scinv.java:447)
javolution-5.5.1.jar を Tomcat/lib から WEB-INF/lib ディレクトリに移動するだけで、アプリは再び正常に動作し、RuntimeExceptions は発生しません。
なぜこれが失敗するのかについてのアイデアはありますか? また、Tomcat/lib ディレクトリに postgres-9.0.jar ファイルがあり、正常に動作しているようです。
詳細が必要な場合は、喜んで提供させていただきます。また、これについてはちょっと困惑しているので、何か提案をいただければ幸いです。