0

war内にパッケージ化されたスキニーでのクラスのロードで、クラスのロードの問題に直面していますear。パッケージ化された他の ejb モジュールもあります。スプリングを介してロードできるものとそうでないものがあります。

次のシナリオを想像してください。

someApp.ear
|- someEJBs1.jar
|- someEJBs2.jar
...
|- someEJBsX.jar
|- someWar.war

someWar.war から春経由でアクセスしようとすると、次の場所にあるいくつかのクラスにアクセスできます。

  • someEJBs1.jar 動作します
  • しかし、 someEJBs2.jar にあるものについては、java.lang.ClassNotFoundException.

問題がどこにあるのかわかりません。私MANIFEST.MFのクラスパス情報はまったく含まれていません。

I was already thinking if there there any way to see during runtime (maybe during debugging) the classes loaded, or possibly the classpath provided for the particular war file?

I'm running in glassfish 3.1.1 (that is a requirement, no change on this one is possible).

4

2 に答える 2

1

コードで次のデバッグ関数を試してください。

    //Prints the Root directory
    public static void printPWD() {
        File dir1 = new File(".");
        try {
            System.out.println("Current dir : " + dir1.getCanonicalPath());
            dir1 = null;
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }


     // Prints all files on the ClassPath to the system.out

    public static void printClasspathFiles() {
        ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader();

        // Get the URLs
        URL[] urls = ((URLClassLoader) sysClassLoader).getURLs();

        for (int i = 0; i < urls.length; i++) {
            System.out.println(urls[i].getFile());
        }
    }

//prints the classpath to system.out
print printClasspath(){
       System.out.println(System.getProperty("java.class.path"));
}

ロードされたすべてのクラスを取得するには、getAllLoadedClasses メソッドが役立ちます。ここを見る

于 2013-01-15T16:30:10.147 に答える
0

OK、最終的に根本原因が見つかりました。Spring xml 構成で間違ったパッケージ定義の問題を見落としていました。:)

エラーメッセージをきちんと読むべきだと思います。そして、私が正しいと思うものは何でも再確認してください。(まあ、私の場合は新しいことではありません)

今ではうまくいきます。

于 2013-01-16T08:17:55.883 に答える