2009-12-16 2 views
18

OSGi 컨테이너를 종료하는 것이 가장 좋습니다.OSGi 컨테이너를 종료하는 가장 좋은 방법 (구체적으로 분점)

현재 우리는 EclipseStarter.startup()을 호출하고 일부 핵심 번들을 설치하는 작은 실행기 응용 프로그램을 사용하고 있습니다. 그 후 실행기가 종료됩니다.

테스트 GUI (묶음으로 실행)가 닫히면 System.exit (0)이 호출되어 컨테이너가 종료되지만 이보다 더 멋진 해결책이 있어야합니다.

감사

답변

21

System.exit (0)을 사용하여 OSGi 프레임 워크를 종료하지 마십시오. ID 0, 시스템 번들을 사용하여 번들을 중지해야합니다. 이렇게하면 모든 번들에 규칙적인 방식으로 종료 할 수 있습니다 (예 : 리소스 등을 무료로 사용).

OSGi 사양은 다음을 정의합니다 (Core Specification, R4.x, 4.2.6 프레임 워크 중지).

종료는 시스템 번들을 중지하거나 [...] 또는 프레임 워크 객체에서 stop 메소드를 호출하여 시작할 수 있습니다.

이 장에서는 프레임 워크가 종료 될 때 발생하는 상황에 대해 자세히 설명합니다.

시스템 번들은 다음과 같습니다.

시스템 번들 프레임 워크가 시작됩니다 프레임 워크 객체와 유사하지만, 구현은 프레임 워크 객체 및 시스템에 동일한 개체를 사용할 필요가 없습니다 : 프레임 워크 객체도 (제 4.6 시스템 번들) 정의 묶음. 그러나 두 객체 모두 번들 ID 0, 동일한 위치 및 번들 기호 이름을 가져야합니다.

은 OSGi 스펙은 OSGi 얼라이언스의 웹 사이트 (http://www.osgi.org/Specifications/HomePage)에서 무료로 사용할 수 있습니다.

4

은 또한 응용 프로그램 내장 맥락에서 춘분을 사용하고 난 시스템 번들에 정지()를 호출하고) (EclipseStarter.shutdown과 그 후속. 모든 번들을 중지해야 할 수도 있습니다.

보유 상태가 없기 때문에 응용 프로그램에서 번들 종료에 대해 정말로 걱정하지 않았습니다.

0

아직 표준화 된 방법이 없습니다. OSGI는 다음 릴리스에서 표준 API의 일부분을 만들지 만, 모든 OSGI 컨테이너가 이것을 구현하기까지는 다소 시간이 걸릴 것으로 본다. 지금 컨테이너 전용 코드를 사용하고 System.exit()에서는 사용하지 마십시오.

감사

Leen Toelen는

평소 이런 틀 종료
+0

에게 표준 방법 지금까지 내가 내 대답에 설명했다. 이것은 OSGi 스펙에 지정된 동작이며, 다음 릴리스 4.2에서도 지정됩니다. 다음 릴리스 (4.2.)에는 번들 (및 프레임 워크)의 시작 레벨을 제어하는 ​​데 사용할 수있는 * 선택적 * 시작 레벨 서비스가 포함됩니다. – akr

7

: ID = 0

bundlecontext.getBundle(0).stop();

번들 시스템 다발

관련 문제