OSGi Framework 설정 및 제어

본 절에서는 JEUS OSGi 모듈을 사용하여 OSGi 프레임워크를 설정하고 사용하는 방법에 대해 설명한다.

1. 개요

OSGi 기술이 제공하는 스펙에 따라 작성한, 번들들로 이루어진 애플리케이션을 실행하기 위해서는 OSGi 프레임워크가 필요하다. OSGi 프레임워크는 OSGi 기술에서 핵심이 되는 구성 요소로서, 번들들에 대한 배포 및 관리 기능을 수행하고, 번들 사이에 의존 관계를 관리하며, OSGi 서비스 레지스트리(Service Registry)를 통해 서비스를 등록하고 관리할 수 있도록 하는 기능 등을 제공한다.

JEUS OSGi 모듈에서는 사용자가 OSGi 환경을 쉽게 준비할 수 있도록, 서버 설정을 통해 JEUS 서버가 기동할 때 자동으로 OSGi 프레임워크 인스턴스를 생성하여 초기화시키고, 사전에 설정한 번들들을 설치해 주는 기능을 제공한다. 이와 관련한 작업들은 JEUS에서 제공하는 웹 기반 관리 도구인 WebAdmin이나, 콘솔 기반 관리 도구인 jeusadmin을 통해 수행할 수 있다.

JEUS에서는 OSGi 프레임워크 구현체로 Apache Felix를 사용한다. Apache Felix에 대해서는 http://felix.apache.org를 참고한다.

2. OSGi Framework 설정 항목

OSGi Framework에 대한 설정 항목들에 대한 설명은 다음과 같다.

OSGi와 관련하여 JEUS에서 제공하는 설정 항목들은 동적 설정 반영을 지원하지 않는다. 운영 중인 서버에 대해 설정을 변경한 경우에는 서버를 재기동해야 적용된다.

  • Name

    OSGi 프레임워크에 대한 고유한 이름을 지정한다.

  • JNDI Export Name

    OSGi 프레임워크 객체를 JNDI에 등록할 때 사용할 JNDI 이름을 지정한다. 지정하지 않는 경우 Name 항목에 지정한 프레임워크 이름을 JNDI 이름으로 사용한다. 사용자 애플리케이션이 OSGi 프레임워크에 직접 접근해야할 경우, JNDI에 등록되어 있는 프레임워크 객체를 lookup하여 사용할 수 있다. JNDI에 등록한 OSGi Framework 객체는 해당 서버에 대해서만 유효하며, 원격지에서 lookup하여 사용할 수는 없다.

  • Target Servers

    OSGi 프레임워크를 사용할 서버를 지정한다.

  • Framework Configuration Properties

    OSGi 프레임워크를 생성하고 초기화할 떄 넘겨줄 설정값들을 지정한다. 각 설정값은 키와 값의 쌍으로 구성된 프로퍼티 형태이다. OSGi 스펙에서 사전 정의해 둔 프로퍼티들과, Apache Felix Framework에서 사전 정의해 둔 값들을 사용할 수 있으며, 애플리케이션이 사용할 설정에 대한 프로퍼티를 지정할 수도 있다. OSGi 스펙에서 정의한 프로퍼티들에 대해서는 OSGi Core Specification을, JEUS에서 사용하는 Apache Felix에서 정의한 프로퍼티들에 대해서는 Apache Felix Framework Configuration Properties을 참고한다.

    사용자가 직접 설정하지 않은 경우, JEUS OSGi 모듈이 기본값으로 설정하는 프로퍼티들이 존재한다. 해당 프로퍼티들에 대한 목록은 다음과 같다.

    프로퍼티

    felix.startlevel.bundle

    30

    org.osgi.framework.bundle.parent

    framework

    org.osgi.framework.startlevel.beginning

    100

    org.osgi.framework.storage

    SERVER_HOME/.workspace/osgi/FRAMEWORK_NAME

  • Initial Bundles Directory 관련 설정 항목들

    JEUS OSGi 모듈에서는 Initial Bundles Directory을 지정하고, 이에 대한 동작을 제어할 수 있는 설정 항목들을 제공한다. Initial Bundles Directory를 지정하고 사용하도록 설정한 경우, JEUS OSGi 모듈은 프레임워크 초기화를 완료한 후 해당 위치를 검사하여 디렉터리 안에 있는 JAR 파일들을 번들로 간주, 프레임워크에 설치하는 작업을 수행한다.

    JEUS에서는 지정한 디렉터리가 포함하고 있는 번들을 프레임워크 기동 시 설치해 주는 기능만 제공하며, 해당 디렉터리에 대한 관리나 동기화 등에 대한 기능은 제공하지 않는다.

    초기 번들 디렉터리와 관련하여 설정 가능한 항목들은 다음과 같다.

    항목 설명

    Install Initial Bundles

    OSGi 프레임워크 기동 시 Initial Bundles Directory에 담긴 번들들을 설치할지 여부를 지정한다.

    Initial Bundles Directory Location

    Initial Bundles Directory에 대한 위치(파일 경로)를 지정한다. 지정하지 않은 경우 기본 경로로 JEUS_HOME/lib/osgi/FRAMEWORK_NAME을 사용한다.

    Default Start Level

    Initial Bundles Directory에 위치한 번들들에 대한 start level 기본값을 지정한다.

    Fail On Error

    번들 설치가 제대로 이루어지지 않았을 경우 이를 오류로 간주할지 여부를 설정한다.

  • Bundle Installation Descriptors

    Bundle Installation Descriptor XML 파일들에 대한 위치를 설정한다. 상대 경로로 지정할 경우 Initial Bundles Directory 경로를 기준으로 파일 위치를 결정한다.

    Bundle Installation Descriptor는 JEUS OSGi 모듈에서 사용하는, 설치할 번들에 대한 정보를 담은 XML 파일이다. 사용자가 설치할 번들들에 대한 정보를 담아 Bundle Installation Descriptor를 작성한 후, OSGi 프레임워크 설정에 XML 파일 위치를 명시하면, JEUS OSGi 모듈은 OSGi 프레임워크 초기화 작업 및 초기 번들 디렉터리에 있는 번들들을 설치하는 작업을 완료한 후, XML 파일을 읽어들여 해당 파일에 적힌 정보를 바탕으로 번들을 설치하는 작업을 수행한다.

    다음은 Bundle Installation Descriptor에 대한 예제이다.

    Bundle Installation Descriptor 예제
    <?xml version="1.0" encoding="UTF-8"?>
    <bundles xmlns="http://www.tmaxsoft.com/xml/ns/jeus/osgi/bundles">
        <!-- XML 파일 내에 기재되어 있는 번들들을 설치할 때 적용할 start level 기본값 -->
        <default-start-level>15</default-start-level>
        <!-- 번들 설치에 실패했을 경우 이를 오류로 간주할지 여부 -->
        <fail-on-error>true</fail-on-error>
        <bundle>
            <!-- 번들에 대한 start level 값. default-start-level에 지정한 값에 우선한다. -->
            <start-level>5</start-level>
            <!-- 번들을 설치할지 여부 -->
            <install>true</install>
            <!-- 번들을 설치한 후 시작시킬지 여부 -->
            <start>true</start>
            <!-- 설치할 번들의 URL -->
            <location>http://central.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.8.2/log4j-api-2.8.2.jar</location>
        </bundle>
    </bundles>

3. OSGi Framework 설정 추가

본 장에서는 WebAdmin과 콘솔 툴을 사용해서 OSGi 프레임워크를 설정을 추가하는 방법을 설명한다.

WebAdmin 사용

다음은 WebAdmin을 사용하여 OSGi 프레임워크에 대한 설정을 추가하는 예제이다.

  1. WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면 상단 메뉴에서 [리소스]을 선택한다.

  2. 설정 메뉴에서 [OSGi Frameworks]를 클릭한 후 OSGi Frameworks 기본 설정 화면에서 [추가] 버튼을 클릭한다.

  3. OSGi Frameworks 추가 화면에서 항목을 입력한 후 [추가] 버튼을 클릭해서 새로운 OSGi Framework를 추가한다. [취소] 버튼을 클릭하면 작업이 취소된다.

콘솔 툴 사용

다음은 콘솔 툴을 사용하여 OSGi 프레임워크에 대한 설정을 생성하는 예제이다.

[MASTER]domain1.adminServer>list-osgi-frameworks
No OSGi Frameworks exists.
[MASTER]domain1.adminServer>add-osgi-framework -name framework-0 -servers server1
Successfully performed the ADD operation for OSGi Framework framework-0, but all changes were non-dynamic. They will be applied after restarting.
Check the results using "list-osgi-frameworks".
[MASTER]domain1.adminServer>list-osgi-frameworks
List of OSGi Frameworks
================================================================================
+------------------------+----------------------------+------------------------+
|     Framework Name     |      JNDI Export Name      |     Target Servers     |
+------------------------+----------------------------+------------------------+
| framework-0            |                            | server1                |
+------------------------+----------------------------+------------------------+
================================================================================
[MASTER]domain1.adminServer>

예제에서 사용한 명령어들에 대한 자세한 설명은 JEUS Reference 안내서의 OSGi 관련 명령어를 참고한다.

설정이 정상적으로 이루어진 경우, 서버를 재기동하면 다음과 같이 OSGi 프레임워크가 성공적으로 기동되었다는 메시지가 출력된다.

...
[2017.10.25 16:06:24][1] [server1-1] [OSGi-0003] OSGi Framework [framework-0] is started successfully.
...

4. OSGi Framework 설정 수정

본 장에서는 WebAdmin과 콘솔 툴을 사용해서 OSGi 프레임워크를 설정을 수정하는 방법을 설명한다.

WebAdmin 사용

다음은 WebAdmin을 사용하여 OSGi 프레임워크에 대한 설정을 수정하는 예제이다.

  1. WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면 상단 메뉴에서 [리소스]을 선택한다.

  2. 설정 메뉴에서 [OSGi Frameworks]를 클릭한 후 OSGi Frameworks 기본 설정 화면에서 수정할 OSGi Framework를 선택한다.

  3. OSGi Framework 화면에서 [수정] 버튼을 클릭해서 수정 작업을 완료한 후 [저장] 버튼을 클릭하여 설정을 저장하거나, [취소] 버튼을 클릭하여 수정한 내용을 취소할 수 있다.

콘솔 툴 사용

다음은 콘솔 툴을 사용하여 OSGi 프레임워크에 대한 설정을 수정하는 예제이다.

[MASTER]domain1.adminServer>list-osgi-frameworks -framework framework-0
OSGi Framework [framework-0]
================================================================================
+--------------------------------------------------------------+---------------+
|                        Attribute Name                        |     Value     |
+--------------------------------------------------------------+---------------+
| Framework Name                                               | framework-0   |
| JNDI Export Name                                             | Not Specified |
| Target Servers                                               | server1       |
| Install Initial Bundles                                      | true          |
| Initial Bundles Directory Location                           | Not Specified |
| Default Start Level                                          |            30 |
| Fail On Error                                                | true          |
+--------------------------------------------------------------+---------------+
================================================================================

Framework Configuration Properties
====================================================
+-----+--------------------------------------------+
| Key |                    Value                   |
+-----+--------------------------------------------+
(No data available)
====================================================

Bundle Installation Descriptors
================================================================================
+------------------------------------------------------------------------------+
|                                   Location                                   |
+------------------------------------------------------------------------------+
(No data available)
================================================================================
[MASTER]domain1.adminServer>modify-osgi-framework -name framework-0 -dsl 45 
Successfully performed the MODIFY operation for OSGi Framework framework-0, but some changes were non-dynamic. They will be applied after restarting.
Check the results using "list-osgi-frameworks".
[MASTER]domain1.adminServer>list-osgi-frameworks -framework framework-0
OSGi Framework [framework-0]
================================================================================
+--------------------------------------------------------------+---------------+
|                        Attribute Name                        |     Value     |
+--------------------------------------------------------------+---------------+
| Framework Name                                               | framework-0   |
| JNDI Export Name                                             | Not Specified |
| Target Servers                                               | server1       |
| Install Initial Bundles                                      | true          |
| Initial Bundles Directory Location                           | Not Specified |
| Default Start Level                                          |            45 |
| Fail On Error                                                | true          |
+--------------------------------------------------------------+---------------+
================================================================================

Framework Configuration Properties
====================================================
+-----+--------------------------------------------+
| Key |                    Value                   |
+-----+--------------------------------------------+
(No data available)
====================================================

Bundle Installation Descriptors
================================================================================
+------------------------------------------------------------------------------+
|                                   Location                                   |
+------------------------------------------------------------------------------+
(No data available)
================================================================================
[MASTER]domain1.adminServer>
  1. 예제에서 사용한 명령어들에 대한 자세한 설명은 JEUS Reference 안내서의 OSGi 관련 명령어를 참고한다.

  2. OSGi와 관련하여 JEUS에서 제공하는 설정 항목들은 동적 설정 반영을 지원하지 않는다. 운영 중인 서버에 대해 설정을 변경한 경우에는 서버를 재기동해야 적용된다.

5. OSGi Framework 설정 삭제

본 장에서는 WebAdmin과 콘솔 툴을 사용해서 OSGi 프레임워크를 설정을 삭제하는 방법을 설명한다.

WebAdmin 사용

다음은 WebAdmin을 사용하여 OSGi 프레임워크에 대한 설정을 삭제하는 예제이다.

  1. WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면 상단 메뉴에서 [리소스]을 선택한다.

  2. 설정 메뉴에서 [OSGi Frameworks]를 클릭한 후 OSGi Frameworks 기본 설정 화면에서 삭제할 OSGi Framework를 선택한 후 [삭제] 버튼을 클릭한다.

  3. 삭제 여부를 묻는 대화상자에서 [삭제] 버튼을 클릭하여 OSGi Framework를 삭제하거나, [취소] 버튼을 클릭하여 작업을 취소할 수 있다.

콘솔 툴 사용

다음은 콘솔 툴을 사용하여 OSGi 프레임워크에 대한 설정을 삭제하는 예제이다.

[MASTER]domain1.adminServer>list-osgi-frameworks
List of OSGi Frameworks
================================================================================
+------------------------+----------------------------+------------------------+
|     Framework Name     |      JNDI Export Name      |     Target Servers     |
+------------------------+----------------------------+------------------------+
| framework-0            |                            | server1                |
+------------------------+----------------------------+------------------------+
================================================================================
[MASTER]domain1.adminServer>remove-osgi-framework -name framework-0
Successfully performed the REMOVE operation for OSGi Framework framework-0.
Check the results using "list-osgi-frameworks".
[MASTER]domain1.adminServer>list-osgi-frameworks
No OSGi Frameworks exists.
[MASTER]domain1.adminServer>
  1. 예제에서 사용한 명령어들에 대한 자세한 설명은 JEUS Reference 안내서의 OSGi 관련 명령어를 참고한다.

  2. OSGi와 관련하여 JEUS에서 제공하는 설정 항목들은 동적 설정 반영을 지원하지 않는다. 운영 중인 서버에 대해 설정을 변경한 경우에는 서버를 재기동해야 적용된다.

6. JNDI를 통해 OSGi Framework에 접근하는 방법

OSGi 프레임워크를 생성하고 나면, JEUS OSGi 모듈은 시스템 번들 컨텍스트(OSGi 프레임워크 번들의 bundle context)를 JEUS JNDI에 등록한다. 등록하는 객체의 타입은 org.osgi.framework.launch.Framework이며, JNDI 이름은 설정에 지정한 이름을 사용한다. 별도로 설정하지 않은 경우 OSGi 프레임워크 이름을 JNDI 이름으로 사용한다. 애플리케이션은 필요한 경우 JNDI를 통해 OSGi 프레임워크 객체를 가져와 사용할 수 있다.

아래는 JNDI에 'framework-0’라는 이름을 사용하여 등록되어 있는 OSGi 프레임워크 객체를 가져온 후, 서비스 객체를 얻는 작업을 수행하는 코드 예제이다.

JNDI에 등록되어 있는 OSGi 프레임워크를 통해 서비스 객체에 접근하는 예제
...
      InitialContext ctx = new InitialContext();
      BundleContext bundleContext = ((Framework) initialContext.lookup("framework-0")).getBundleContext();

      ServiceReference sref = bctx.getServiceReference(ServiceA.class);
...
      ServiceA service = (ServiceA)bctx.getService(sref);
...