2013-07-10 7 views
0



여기에는 컨텍스트가 있습니다 : 나는 2 개의 osgi 제품이 실행 중이고, 하나는 주 소프트웨어 (소프트웨어라고 부름)이며 다른 하나는 p2를 사용하여 첫 번째 업데이트/설치/제거를 관리합니다.

업데이트 프로그램이 기능을 소프트웨어에 설치하도록 관리했습니다. 즉, 기능이 features 디렉토리 및 해당 플러그인 번들 디렉토리에 성공적으로 설치되었습니다. p2에 관해서는 모든 것이 좋고, 프로파일은 새로운 변경으로 업데이트됩니다.

그러나 새로운 기능을 신경 쓰지 않는 소프트웨어에는 아무런 영향을 미치지 않았습니다.
그래서 installBundle 명령어를 사용하여 플러그인에 p2.inf 파일을 추가했습니다. 이로 인해로드 할 번들 목록이 들어있는 config.ini 파일에 새 번들이 추가되었습니다.
소프트웨어를 다시 시작하면 새 플러그인이 프레임 워크에 의해로드되기 때문에 이렇게되면 승리하게됩니다. 하지만 .. 다시 시작하고 싶지 않아 osgi가 라이브로 물건을 설치할 수 있기 때문에 그렇게하지 않아도됩니다.

내 싸움은 여전히 ​​파일에서 번들 목록을로드하고 필요한 모든 작업을 수행 할 수있는 프레임 워크를 제공하는 simpleconfigurator를 발견하게했습니다. 그러나 그것은 시작시에만 수행되며 런타임에 목록을 새로 고칠 수있는 방법이나 의사를 찾지 않습니다.
지금까지 해본 유일한 해결책은 번들 org.eclipse.equinox.simpleconfigurator에서 update() 메소드를 호출하고 내 번들이 인식되어 완벽하게 작동하도록하는 것입니다.

지금 당장은 뭔가 효과가 있지만 좀 더 나은 해결책을 찾고 싶습니다. 전체 기사를 말하고있는 이유는 p2와의 전투 후에 나도 놀랐 기 때문입니다. osgi와 새로운 번들을로드하기 위해 싸울 필요가 있습니다.

어떤 도움을 주셔서 감사합니다 :런타임시 OSGi 프레임 워크 번들 목록을 자동으로 업데이트하는 방법은 무엇입니까?

+0

여기에 p2를 사용하는 이유가 무엇입니까? –

+0

왜 안 되니? 우리가 업데이트 시스템을 설계 할 때 기술적 인 선택이었고 사용자가 새로운 것을 설치할 수있는 저장소, p2 프로파일로 쉽게 할 수있는 롤백 시스템 등을 가지고 싶었습니다. – Kevin

+1

글쎄, 나는 p2 OSGi R5 Repositories and Resolver 표준은 잘 설계되고 강력합니다. 어쨌든, Eclipse RCP 응용 프로그램이나 Eclipse SDK 플러그인과 같은 것을 개발 중이라면 p2가 거의 피할 수 없기 때문에 질문을했습니다. –

답변

0

저는 p2에 익숙하지 않습니다. OSGi 컨테이너에 번들을 런타임에 으로 프로그래밍 방식으로 배포하려면 메인 애플리케이션에 해당 번들의 기능을 인식하고 사용해야하는 몇 가지 방법이 필요합니다. 미리 정의 된 인터페이스를 구현하는 서비스를 수신하기 위해 기본 응용 프로그램에서 - http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/ServiceListener.html - 첫 번째 문제를 들어

당신이 ServiceListener를 사용할 수있는 두 번째 부분에 대한 Programmatically Start OSGi (Equinox)?

에 선택한 답변에서보세요. 런타임에 서비스가 등록되거나 등록 해제 될 때마다 주 응용 프로그램에 알림을 받아야하므로 그에 따라 대응할 수 있습니다.