문제

실행 중인 서비스를 얻기 위해 Java 애플리케이션에서 OSGI 번들의 컨텍스트에 액세스하려고 합니다.

ctx.getServiceReference(ReceiverService.class.getName());

나는 이것을 시도했다 :

BundleContext ctx = FrameworkUtil.getBundle(ReceiverService.class).getBundleContext();

하지만 null을 반환합니다.

사전 설치된 번들을 사용하여 그래픽 모드에서 Knopflerfish를 초기화하고 SenderSevice 번들과 ReceiverService 번들을 시작합니다.Java 애플리케이션에서 수신된 객체를 사용하기 위해 receiveService에 접근하고 싶습니다.따라서 ReceiverService 번들 컨텍스트에 액세스해야 합니다.

도움이 되었습니까?

해결책

ReceiverService 인터페이스는 어디에서 로드됩니까?번들에서 내보내지나요?불행하게도 시스템 번들은 일반 번들에서 패키지를 가져올 수 없습니다.

OSGi를 내장하고 외부 애플리케이션과 내부 프레임워크 간의 서비스 측면에서 통신하므로 인터페이스 패키지는 외부 애플리케이션에 의해 로드되고 다음을 사용하여 내보내야 합니다. org.osgi.framework.system.packages.extra 재산.이 속성은 귀하가 제공한 지도를 통해 전달됩니다. FrameworkFactory.newFramework().그런 다음 일반 번들은 서비스 인터페이스를 가져오고 서비스를 게시할 수 있습니다.

액세스하려면 BundleContext 외부 응용 프로그램에서 다음을 사용해야 합니다. getBundleContext() 에 대한 방법 Framework 물체.이는 다음을 반환합니다. BundleContext 시스템 번들의

다른 팁

Java 애플리케이션에 내장된 OSGi 프레임워크를 사용하고 있는 것 같습니다. 해당 프레임워크를 어떻게 시작했습니까?

표준 방법은

Framework framework = FrameworkFactory.newFramework(props);

그런 다음 다음에서 시스템 번들 컨텍스트를 얻을 수 있습니다. framework 사례:

BundleContext ctx = framework.getBundleContext();

귀하의 예에서는 ReceiverService 번들 클래스 로더가 아닌 애플리케이션 클래스 로더에 의해 로드되었을 가능성이 높습니다. FrameworkUtil 이 클래스를 로드한 번들을 확인할 수 없습니다.

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