2009-05-24 3 views
7

누구나 osgi 프레임 워크 클래스를 사용하는 방법을 보여줄 수 있습니까? 내가 어떻게 그 클래스를 사용하는 단서 ...일반적인 Java 코드 내에서 OSGi 프레임 워크를 실행하는 방법은 무엇입니까?

BR,

마르쿠스

+0

의 중복 : 이 http://stackoverflow.com/questions/4673406/programatically-start-osgi-equinox 내가이의 허용 대답에 의문을 연결 것을 말할 것도 더 이 질문에 대한 답변으로이 페이지에 나열된 답변을 선택하십시오. – hoijui

답변

7

사용중인 OSGi 구현에 따라 달라집니다. 나는 Eclipse Equinox를 사용하고 정규 자바 클래스 내에서 프레임 워크를 시작한다. Eclipse jar (org.eclipse.osgi_longversion.jar)에는 org.eclipse.core.runtime.adaptor.EclipseStarter라는 클래스가 있습니다. 그러면 OSGi 프레임 워크가 부팅됩니다.

Properties props = new Properties(); 
// add some properties to config the framework 
EclipseStarter.setInitialProperties(props); 
BundleContext context = EclipseStarter.startup(new String[]{},null); 

프레임 워크를 구성하려면 몇 가지 속성이 필요합니다. 문서화 된 모든 속성 here을 볼 수 있습니다. 일단 startup을 호출하면 BundleContext가 System Bundle 컨텍스트가되므로 여기에서 번들을 설치/시작/중지 할 수 있습니다.

모든 속성을 설정하면 startup()에 인수를 전달하지 않아도됩니다.

Equinox website에서 모든 Equinox 및 기타 번들을 다운로드 할 수 있습니다.

+1

고마워요! 이제는 내 Java 코드에서 일부 번들로 춘분 프레임 워크를 실행할 수있었습니다. :)하지만 여전히 약간 혼동 스럽습니다. Equinox 콘솔을 실행하고 나중에 시스템 번들을 중지하기 위해 -console 매개 변수를 사용하면 스레드 콘솔에 명령을 보낼 때까지 멈추지 않습니다. 거기에 새로운 명령을 기다리는 시스템 번들 내부에 어떤 종류의 루프가 있습니까? – Markus

+0

번들을 중지해도 시스템 번들을 종료해도 응용 프로그램에 시스템 종료를 알리는 것은 아닙니다. 콘솔에서 "닫기"를 실행하면 모든 번들을 중지하고 서비스 및 핸들러 등록을 취소 한 다음 System.exit (0)을 호출합니다. – omerkudat

+0

EclipseStarter 클래스를 명령 행에서 사용할 수 있도록 설정해야하는 특별한 특성이 있습니까? 현재 IDE에서 직접 프로그램을 실행하는 경우에만이 클래스를 사용할 수 있습니다. jar 파일로 내보낼 경우 스타터 클래스는 osgi 서비스 번들 대신 시스템 번들을로드하므로 번들을 설치할 수 없습니다. – Markus

2

사양을 참조하지 않은 . 따라서 일반적인 Java 코드에서 OSGi 프레임 워크를 실행하는 것은 주어진 프레임 워크 구현 (Equinox, Felix, Knopplerfish, ...)에 대해 항상 고유합니다.

Apache Felix (오픈 소스 OSGi 프레임 워크)을 애플리케이션에 임베드하는 것은 비교적 쉽습니다.

자세한 내용은 http://felix.apache.org/site/launching-and-embedding-apache-felix.html을 참조하십시오.

+0

나는 Equinox 옆에있는 다른 OSGi 프레임 워크를 정말로 사용하고 싶은지 잘 모르겠습니다. org.eclipse.osgi.framework.internal.core.OSGi 클래스를 사용하는 방법을 설명하는 예제를 찾고있다. 지금까지는 독일어 포럼에서만 불완전한 예를 발견했습니다. http://www.java-forum.org/plattformprogrammierung/81133-custom-open-services-gateway-initiative-launcher-mit-config-ini.html – Markus

+1

You 언급 한 패키지의 클래스를 사용하지 않아야합니다. 이 패키지는 "내부"이며 번들에서 내 보내지 않습니다. 춘분의 OSGi에 대한 액세스는 일반적으로 org.osgi.framework의 인터페이스를 통해 수행됩니다. – jens

0

최근 Equinox OSGi 런타임을 Java에 삽입하는 방법에 대한 간단한 개념 증명을 만들었습니다. 자세한 내용은 Github에서 내 프로젝트를 수행하시기 바랍니다 https://github.com/sarxos/equinox-launcher

관련 문제