0

背景を最初に:

  • 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 ファイルがあり、正常に動作しているようです。

詳細が必要な場合は、喜んで提供させていただきます。また、これについてはちょっと困惑しているので、何か提案をいただければ幸いです。

4

1 に答える 1

1

javolution-5.5.1.jar をフォルダーに入れることの問題ではないと思います。JVM は既にオブジェクトTOMCAT_HOME/libを心配していたでしょう( )。問題の本当の原因は次のとおりです。クラス ( )のコンストラクターで何が起こっているのか? 何かが原因でオブジェクトが初期化されないため、ランタイム例外が発生します。Structjavolution.io.Struct.array(Struct.java:557)general.dao.externalfiles.Scinv$ProdRecsScinv.java:447

于 2011-04-05T21:47:03.057 に答える