웹 애플리케이션 배포
본 장에서는 웹 애플리케이션에 OSGi 번들을 포함시켜 배포하는 방법에 대해 설명한다.
JEUS에 배포하는 일반적인 웹 애플리케이션에서 라이브러리로 OSGi 번들을 사용할 경우 해당 애플리케이션에 번들을 같이 패키징하여 deploy할 때 지정한 OSGi 프레임워크에 번들이 설치되게 할 수 있다. 이를 위해서는 애플리케이션 패키징 시 아래와 같은 추가 작업을 해 주어야 한다.
-
사용할 번들을 애플리케이션 내부에 둔다.
-
jeus-web-dd.xml에 OSGi 관련한 설정을 명시한다.
jeus-web-dd.xml 설정 예제<?xml version="1.0"?> <jeus-web-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> .... <osgi> <!-- Framework Name --> <framework-name>fwk-0</framework-name> <!-- Initial Bundles Directory 관련 설정 항목들 --> <install-initial-bundles>true</install-initial-bundles> <initial-bundles-directory-location>WEB-INF/osgi</initial-bundles-directory-location> <default-start-level>11</default-start-level> <fail-on-error>true</fail-on-error> <!-- Class Loading Delegation 관련 설정 항목들 --> <class-loading-delegation> <application-bundle> <bundle-symbolic-name>jeus.osgi.hello-api</bundle-symbolic-name> <version>1.0.0.Final</version> </application-bundle> </class-loading-delegation> </osgi> .... </jeus-web-dd>
각 설정 항목에 대한 설명은 다음과 같다.
-
Framework Name
웹 애플리케이션에서 사용할 OSGi 프레임워크의 이름을 지정한다.
-
Initial Bundles Directory 관련 설정 항목들
웹 애플리케이션 내부에 번들들을 위치시킨 디렉터리를 JEUS에서는 Initial Bundles Directory라는 용어로 지칭한다. jeus-web-dd.xml 설정 항목들을 통해 해당 디렉터리의 위치와 이에 대한 동작을 제어할 수 있다. Initial Bundles Directory를 지정하고 사용하도록 설정한 경우 웹 애플리케이션을 deploy할 때 지정한 위치를 검사하여 포함되어 있는 번들들을 지정한 OSGi 프레임워크에 설정한다. 웹 애플리케이션에 포함되어 있는 번들은 웹 애플리케이션을 deploy 시 지정한 OSGi 프레임워크에 설치되고, undeploy 시 삭제된다.
초기 번들 디렉터리와 관련하여 설정 가능한 항목들은 다음과 같다.
항목 설명 Install Initial Bundles
웹 애플리케이션 배포 시 Initial Bundles Directory에 담긴 번들들을 설치할지 여부를 지정한다.
Initial Bundles Directory Location
Initial Bundles Directory에 대한 위치를 지정한다.
Default Start Level
Initial Bundles Directory에 위치한 번들들에 대한 start level 기본값을 지정한다.
Fail On Error
번들 설치가 제대로 이루어지지 않았을 경우 이를 오류로 간주할지 여부를 설정한다.
-
Class Loading Delegation 관련 설정 항목들
웹 애플리케이션에서 OSGi 프레임워크에 설치한 번들에 있는 클래스를 참조하고자 하는 경우 설정한다. 클래스를 참조할 번들에 대한 bundle symbolic name과 version을 지정하면 해당 번들로부터 클래스를 가져와 사용할 수 있다. 참조할 번들은 여러 개를 지정할 수 있으며, 여러 개를 지정한 경우 지정한 순서대로 클래스를 찾으려고 시도한다.
-
JEUS 클래스 로더 계층 구조에서 클래스나 리소스를 찾지 못한 경우에만 OSGi 번들로부터 클래스나 리소스를 찾으려고 시도한다.
-
웹 애플리케이션에서 참조하고 있는 클래스를 로딩한 번들이 갱신된 경우, 웹 애플리케이션에서 클래스 관련 오류가 발생할 수 있다. 이런 경우 웹 애플리케이션을 redeploy하거나 reload 해 주어야 한다. 이러한 상황을 최소화하기 위해 웹 애플리케이션에서는 변경이 상대적으로 적은 API 번들들을 참조하여 사용하는 것을 권장한다.
-
-
OSGi 번들을 포함한 애플리케이션을 배포한 경우 관련 설정 등은 콘솔 명령어를 통해 확인할 수 있다.
콘솔 툴 사용
콘솔 명령어를 사용하여 웹 애플리케이션에 대한 상세 정보를 조회할 경우 OSGi 관련 설정이 되어 있다면 해당 정보가 같이 출력된다.
[MASTER]domain1.adminServer>application-info -server server1 -id hello-osgi.war -type WAR There are no EJBs in this module. General information about the web module [hello-osgi]. ================================================================================ +-------------+---------------------+--------------+---------------------------+ | Module Name | Unique Module Name | Context Path | Target Session Cluster | +-------------+---------------------+--------------+---------------------------+ | hello-osgi | hello-osgi | /hello-osgi | | +-------------+---------------------+--------------+---------------------------+ ================================================================================ Servlets ================================================================================ +------------+-------------+-------+-------+-----------+---------+-------------+ | Name | Class | State | Count | Attribute | RegType | URLPatterns | +------------+-------------+-------+-------+-----------+---------+-------------+ | appServlet | org.springf | READY | 0 | SYNC | WEB_XML | / | | |ramework.web | | | | | | | |.servlet.Dis | | | | | | | |patcherServl | | | | | | | |et | | | | | | +------------+-------------+-------+-------+-----------+---------+-------------+ ================================================================================ ... ... OSGi Application Information ================================================================================ +--------------------------+---------------------------------------------------+ | Attribute Name | Value | +--------------------------+---------------------------------------------------+ | Framework Name | framework-0 | +--------------------------+---------------------------------------------------+ | Install Initial Bundles | true | +--------------------------+---------------------------------------------------+ | Initial Bundles | /home/user/workspace/jeus/jeus/target/jeus/doma | |Directory Location |ins/osgi/servers/server1/.workspace/deployed/hello | | |-osgi.war/hello-osgi_war___/WEB-INF/osgi | +--------------------------+---------------------------------------------------+ | Default Start Level | 11 | +--------------------------+---------------------------------------------------+ | Fail On Error | true | +--------------------------+---------------------------------------------------+ ================================================================================ Delegate Bundles ================================================================ +------------------------------------------------+-------------+ | Bundle Symbolic Name | Version | +------------------------------------------------+-------------+ | jeus.osgi.hello-api | 1.0.0.Final | +------------------------------------------------+-------------+ ================================================================ EJBs ================================================================================ +-----------+------+-------------------------+---------------------------------+ | Bean Name | Type | Local Export Name | Remote Export Name | +-----------+------+-------------------------+---------------------------------+ (No data available) ================================================================================ [MASTER]domain1.adminServer>