[Seasar-user:3658] ComponentAutoRegister と WebLogic

Ito Yoshiichi [E-MAIL ADDRESS DELETED]
2006年 5月 19日 (金) 17:18:19 JST


いつもお世話になってます。
伊藤です。

WebLogic Server 9.0J で ComponentAutoRegister を使用した場合、
JAR ファイルに含まれるクラスが取得できません。
WebLogic のクラスローダ
weblogic.utils.classloaders.ChangeAwareClassLoader
が返すリソースの URL が、
zip:<fileName>.jar!<className>.class
という形式になっているのが原因のようです。

環境は以下のとおりです。
WebLogic Server 9.0J
BEA JRockit JDK 5.0 (Update 3)
Seasar 2.3.8

ComponentAutoRegister を以下のように修正し、暫定対応したところ
正常に動作しました。ご確認の上、対応いただけるとありがたいです。

    public ComponentAutoRegister() {
        strategies.put("file", new FileSystemStrategy());
        strategies.put("jar", new JarFileStrategy());
        // 以下の記述を追加。
        strategies.put("zip", new ZipFileStrategy());
    }

    // 以下のクラスを追加。
    private class ZipFileStrategy implements Strategy {

        public void registerAll(final Class referenceClass, final URL url) {
        	System.out.println(referenceClass.getName());
        	System.out.println(referenceClass.getClassLoader());
            final JarFile jarFile = createJarFile(url);
            ClassTraversal.forEach(jarFile, ComponentAutoRegister.this);
        }

        private JarFile createJarFile(final URL url) {
            final String urlString = ResourceUtil.toExternalForm(url);
            System.out.println(urlString);
            final int pos = urlString.lastIndexOf('!');
            final String jarFileName = urlString.substring(4, pos);
            System.out.println(jarFileName);
            return JarFileUtil.create(new File(jarFileName));
        }
    }

以上です。




Seasar-user メーリングリストの案内