osgi 번들이 아닌 jar 파일이 있습니다. 선발이라고 부르 자. 병. 그리고 저는이 스타터를 다음과 같이 실행합니다 : java -jar starter.jar. 이 스타터는 felix 프레임 워크를 시작합니다 :OSGI : systemBundle을 통해 osgi 컨테이너 외부 서비스 사용
Felix felix = new Felix(configMap);
systemBundle=felix.getBundle();
그리고 나서 일부 서비스를 내보내는 osgi 번들을 설치하고 시작합니다.
그래서 스타터는 osgi 컨테이너 외부에 있지만 systemBundle을 참조합니다. starter.jar에서 일부 osgi 서비스를 사용할 수 있습니까?
EDIT 이제 내가 (starter.jar의 코드) 솔루션을 작업했기 때문에이 가능하다는 것을 알고
BundleContext bundleContext=systemBundle.getBundleContext();
ServiceReference reference = bundleContext.getServiceReference(Temp.class.getName());
Object server = (Object) bundleContext.getService(reference);
Method method = server.getClass().getMethod("getString");
Object result=method.invoke(server);
나는 때문에 다른 클래스 로더의 ClassCastExceptions과있어 나는이 반사를 사용했다 . 그리고 최종 해결책은 오히려 못생긴 것입니다. 어쩌면 누군가가 더 나은 방법을 제공 할 것입니다. 아니면 네트워크 소켓을 통하는 것 외에는 다른 방법이 없을까요?
서비스 인터페이스가 포함 된 패키지를 포함 된 OSGi 컨테이너의 시스템 패키지에 추가 할 수 있습니다. 이 경우 리플렉션없이 서비스를 사용할 수 있습니다. –
@ Balazs Zsoldos 나는 시도 할 것이다. 아주 좋은 생각 인 것 같아. –