OSGiは、OSGi カスタム クラスローダーを使用してバンドルからロードされたクラスを rt.jar からロードされたクラスにキャストするという問題1をどのように解決しますか? rt.jar は、システム クラスローダの代わりにカスタム クラスローダもロードしますか?
UPD1
ClassLoader.java の次のコードのため、カスタム クラスローダーを使用して rt.jar のほとんどの部分をロードできないようです。
private ProtectionDomain preDefineClass(String name, ProtectionDomain protectionDomain) {
...
if ((name != null) && name.startsWith("java.")) {
throw new SecurityException("Prohibited package name: " +
name.substring(0, name.lastIndexOf('.')));
}
...
}
[1] 問題は次のとおりです。異なるクラスローダーでロードされたクラスは、バイトコードがまったく同じであってもrt.jar!/SomeClass
、jvm によってまったく異なるものとして扱われます。異なるクラスローダーによってロードされた場合、にbundle.jar!/SomeClassChild
キャストできません。SomeClassChild
SomeClass