문제

클래스 로더 문제가 있습니다. Im 꽤 Osgi Newby이기 때문에 대답이 그렇게 어렵지 않기를 바랍니다. :)

Compile vs. 런타임 라이브러리와 관련이 있다고 생각합니다.NetBeans 6.7.1 프로젝트 속성에서는 컴파일 타임 리브가 항상 다른 범주로 전파됩니다. 따라서 차별화 할 수 없습니다.

펠릭스 호스트를 컴파일 할 때 다음 항아리가 사용됩니다

  • Felix.jar
  • osgi-core.jar
  • osgi-compendium.jar
  • osgi.service.obr-1.0.2.jar

그러나 실행할 때 프레임 워크는 OBR의 구현을로드합니다. 이 OBR 번들에는 인터페이스 정의도 포함되어 있습니다. 이것이 이것이 클래스 캐스트 렉스 인신이있는 이유라고 생각합니다 ..

나는 실제로 Felixhost가 OBR과 함께 일하기 위해 초기 프로비저닝을하기를 원합니다 ..

모든 아이디어를 환영합니다.

도움이 되었습니까?

해결책

"Felixhost"로 Felix 프레임 워크를 캡슐화하고 시작하는 프로젝트를 언급하고 있다고 가정합니다.

문제는 "Osgi World"와 "Non-OSGI World"사이의 경계에 대해 약간주의해야한다는 것입니다. Felixhost의 클래스 경로에 넣은 모든 것 (즉, 모든 경우에도 모든 시간 의존성)은 본질적으로 OSGI 세계 밖에서 살고 있으므로 "osgi.service.obr-1.0.2.jar"와 같은 번들을 사용하는 것이 좋습니다. 이런 식으로.

OSGI 프레임 워크가 "osgi.service.obr-1.0.2.jar"번들을로드하는지 지적했듯이 본질적으로 동일한 클래스 (인터페이스)의 두 가지 버전이 있기 때문에 ClassCastException에 들어갑니다.

이 문제에 대한 가능한 해결책 중 하나는 초기 프로비저닝 로직을 별도의 번들로 분리하고 OBR 관련 작업을 수행하는 것입니다. Osgi 세계 내에서. 그런 다음 "osgi.service.obr-1.0.2.jar"에서 Felixhost의 컴파일 종속성을 제거하고 OBR 인터페이스 사본이 하나만로드 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top