[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 メーリングリストの案内