1

OSGi에서 번들에서 제이 보스 7.1.1 동적 클래스 로딩 이다ClassNotFoundException가있는 동안 내가 보스 7.1.1에 간단한 OSGi 프레임 테스트 번들을 배포하고 동적으로</p> <pre><code>Class clazz = Class.forName("org.jacorb.orb.ORB"); </code></pre> <p>내가 가진 모든를 수행하여 Jacorb ORB의 인스턴스를하려고

java.lang.ClassNotFoundException: org.jacorb.orb.ORB from [Module "deployment.test:1.0.0" from Service Module Loader] 

이미 무슨 짓을 :

  • 을 나는 F를 추가 standalone.xml는 JBoss 구성 또는 osgi-subsystem에 <capability name="org.jacorb" startlevel="1"/> 기능이있어 org.jacorb 모듈이로드됩니다. 문제가 이미 해결되었으므로 테스트 번들 설치가 실패합니다.
  • 내가 (또한 export 옵션 및없이 시도) 내 MANIFEST.MForg.jacorbDependencies -Descriptor 선언 : 나는 다음과 같은 내용으로 내 META-INFjboss-deployment-structure.xml을 추가 Dependencies: org.jacorb export

  • < XML version = "1.0"encoding = "UTF-8"? > < 보스 배포 구조 > < 배치 > < 종속성 > < 모듈 명 = "org.jacorb"/ > </종속 > </배포 > </보스 배포 구조 >

또한 실험을 수행했습니다. ClassLoader와 함께 ContextClassLoader가 null이라는 것을 깨달았습니다. 그러나 결국 Class.forName()을 특정 클래스 로더를 사용하도록 변경할 수 없으므로이를 비 테스트 코드로 적용 할 수 없습니다.

그럼 왜이 ClassNotFoundException을 얻습니까? 사전에

감사는 일반 OSGi 번들을 가지고는 org.jacorb.orb.ORB 클래스를 참조해야하는 경우

알렉스

답변

0

, 는 다음이 있어야합니다 1. 모든 org.jacorb 패키지 및 서브 패키지는 osgi 프레임 워크에서 익스포트해야합니다. 2. 번들은 사용중인 모든 패키지를 가져와야합니다. "Import-Package : org.jacorb.orb" 버전이 호환 가능한지 확인하십시오. 모든 패키지 및 하위 패키지를 가져 왔는지 확인하십시오. org.jacorb의 가져 오기는 org.jacorb.orb를 의미하지 않습니다.

두 조건이 모두 만족되면 번들의 번들 클래스 로더가 org.jacorb.orb.ORB를 볼 수 있어야합니다.

1

내가 standalone.xml/domain.xml 보스 구성에서 퍼즐 ;-)

  1. 했다 파고의 시간 후에 나는 클래스 로더를 동적으로 확장 할 수 있도록 내가 DynamicImport-Package: org.jacorb.orb을 추가 META-INF/MANIFEST.MF에서 <capabilities>
  2. 아래 <subsystem xmlns="urn:jboss:domain:osgi:1.2" activation="lazy"> 섹션에 <capability name="org.jacorb" startlevel="1"/> 추가 런타임 중 classpath
  3. nullThread.currentThread().setContextClassLoader(getClass().getClassLoader()에 의해 컨텍스트 클래스 로더를 설정하십시오.
+0

당신은'Import-Package : org.jacorb.org' 또는'Import-Package : org.jacorb.org; resolution = optional'을 시도 했습니까? 추천 방법은 DynamicImport-Package가 아니라는 것입니다. 또한 Class.forName() *에는 클래스 로더에 대한 선택적 매개 변수가 있습니다. – eis