이전 버전의 Java에서는 부트 클래스 로더에 클래스를 제공하기 위해 시스템 번들 호스트가있는 조각을 사용할 수있었습니다.Java 7u55 Eclipse 시스템 조각 클래스 로더
내 경우에는 Eclipse에서 Jacorb를 사용하는 것을 지원하는 것이 었습니다. 이 모든 것은 Java 7u55 이전에는 문제가 없었습니다.
Jacorb의 모든 항아리가 들어있는 osgi 조각을 만들었습니다. 매니페스트는 다음과 같습니다 : 나는 또한 VM 인수로 다음과 같은 지정
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: org.jacorb.systemFragment
Bundle-SymbolicName: org.jacorb.systemFragment
Bundle-Version: 3.3.0.20140422-1108
Bundle-ClassPath: jars/slf4j-jdk14-1.6.4.jar,
jars/slf4j-api-1.6.4.jar,
jars/jacorb-3.3.jar
Fragment-Host: system.bundle; extension:=framework
Export-Package: org.jacorb.config;version="3.3.0", ....
: 나는 자바 7u51 내 이클립스 응용 프로그램을 실행
-Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB
-Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton
-Dorg.omg.PortableInterceptor.ORBInitializerClass.standard_init=org.jacorb.orb.standardInterceptors.IORInterceptorInitializer
나는()를 성공적으로 ORB.init가 전화를 할 수 있어요.
Caused by: java.lang.ClassNotFoundException: org.jacorb.orb.ORBSingleton
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at org.omg.CORBA.ORB.create_impl_with_systemclassloader(ORB.java:306)
나는 그것이 작동 VMARGS로 다음과 같은 추가하는 경우 : 나는 자바 7u55에서 동일한 응용 프로그램을 실행할 때
나는 다음과 같은 얻을.
-Djava.endorsed.dirs=${jacorb/lib}
나는이 효과를 자바 7u55 자바 6u30과 자바 8u5
는 내가 전에이 작업을 수행 할 필요가 없습니다 않았다는 것을 확인했다. 어떤 아이디어?
--- 편집 4월 30일은 --- 파고 좀 더나요와 나는이 문제를 일으키는 ORB.java 저지 발견했다.
changeset: 817:a8d27c3fc4e4
tag: jdk7u55-b05
user: msheppar
date: Tue Jan 21 12:46:58 2014 +0000
summary: 8025005: Enhance CORBA initializations
이 커밋은 ORB 클래스 작성 방법을 변경했습니다. Thread 컨텍스트 클래스 로더를 사용하는 대신 SystemClassLoader를 사용하도록 하드 코딩되었습니다.
- singleton = create_impl(className);
+ singleton = create_impl_with_systemclassloader(className);
}
}
return singleton;
}
+ private static ORB create_impl_with_systemclassloader(String className) {
+
+ try {
+ ReflectUtil.checkPackageAccess(className);
+ ClassLoader cl = ClassLoader.getSystemClassLoader();
+ Class<org.omg.CORBA.ORB> orbBaseClass = org.omg.CORBA.ORB.class;
+ Class<?> singletonOrbClass = Class.forName(className, true, cl).asSubclass(orbBaseClass);
+ return (ORB)singletonOrbClass.newInstance();
+ } catch (Throwable ex) {
+ SystemException systemException = new INITIALIZE(
+ "can't instantiate default ORB implementation " + className);
+ systemException.initCause(ex);
+ throw systemException;
+ }
+ }
나는이 문제에 대해 Orcale에게 티켓을 기록하려고 시도했습니다. 그 동안 JVM과 함께 제공되는 ORB.java를 무시할 수있는 방법이 있습니까?
질문의 목적에 대해보다 구체적으로 설명하십시오. –
더 명확하게 업데이트되었습니다. –
이 stackoverflow 질문도 참조하십시오 https://stackoverflow.com/questions/23217131/java-7-update-55-jacorb-error-when-running-via-webstart/23238815 –