나는 서버 측 응용 프로그램을 가지고 있으며 동적 번들로드를 위해 osgi 프레임 워크를 임베드하려고합니다.
다른 번들에서 사용할 IQuote (서버 컨테이너 부트 스트랩/Spring의 일부로 인스턴스화)를 구현하는 QuoteImpl을 노출하고자한다고 가정합니다.OSGI Embedded Equinox - osgi 프레임 워크에서 인스턴스화되지 않은 pojos에 액세스하기위한 번들
Q1. 서버 응용 프로그램 인스턴스를 번들에 노출시키는 명확한 방법이 있습니까? (때문에 btw 번들로 서버 코드를 만들 수 없습니다 :) :) donot 전체 응용 프로그램 osgi'ed 만들고 싶어.
서비스 및 번들을 통해 IQuote로 전송하려고 시도했습니다. 잘 수행하고 있는지 확신 할 수 없지만 IQuote가 번들 프로젝트와 반대되는 핵심 앱 프로젝트에 있기 때문에 해결되지 않은 컴파일 문제가 발생합니다. 어떤 아이디어?
Neil 돌아와 주셔서 감사합니다. 저는 실제로 귀하의 블로그를 지침으로 사용했습니다. – Slash
멋진 블로그 btw. 나는 컴파일 문제를 해결했다. 3 개의 프로젝트 견적 번들 (인터페이스 IQuote 포함), 소비자 번들 (IQuote 사용) 및 실행 프로그램 프로젝트 (내 응용 프로그램 서버 (번들이 아님)를 모방하고 프로그래밍 방식으로 서비스 IQuote의 구현을 등록 함)가 있습니다. context.getServiceReference (IQuoteService.class.getName());을 수행하려고 할 때 consumer 번들의 serviceReference에 NULL이 발생합니다. 내 질문은 : 분명히 나는 뭔가를 놓친다. 구현에 번들이 있어야합니까? 실행기가 프레임 워크를 시작할 때 Activator에없는 서비스를 등록합니다. – Slash
public static void main (String [] args) { \t .. \t FrameworkFactory frameworkFactory = ServiceLoader.load (FrameworkFactory.class) .iterator(). next(); config.put (Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "osgi.main"); 프레임 워크 프레임 워크 = frameworkFactory.newFramework (config); framework.start(); \t \t \t \t \t BundleContext context = framework.getBundleContext(); \t context.registerService (IQuoteService.class.getName(), 새로운 SimpleQuote(), null); \t .. } – Slash