애플리케이션 작성 및 Deploy

본 장에서는 Jakarta EE 애플리케이션 파일(EAR)을 작성하고 이를 JEUS에 deploy하는 방법에 대해 설명한다. 또한 JEUS에서 제공하는 애플리케이션을 deploy할 수 있는 툴을 사용하여 JEUS 서버에 애플리케이션을 deploy하는 방법과 그 외 관련된 작업에 대해 설명한다.

1. 애플리케이션 작성

본 절에서는 작성된 각각의 모듈을 포함하는 애플케이션 작성 방법 중 jar 유틸리티를 사용해서 Jakarta EE 애플리케이션을 직접 작성하는 방법에 대해서만 설명한다.

EAR 파일을 작성하기 전에 우선 포함될 모듈을 작성해야 한다. EAR 파일에 포함되는 모듈은 EJB 모듈인 JAR 파일과 웹 애플리케이션 모듈인 WAR 파일, 리소스 어댑터 모듈인 RAR 파일 등이 있다. 모듈 파일을 작성하는 자세한 내용에 대해서는 각 해당 안내서에서 다루고 있으므로 해당 안내서를 참고한다.

다음은 애플리케이션 작성 환경에 대한 설명이다.

  • myApp.ear이라는 EAR 파일을 작성한다. 이 파일은 ejb.jar라는 EJB 모듈과 web.war라는 웹 애플리케이션 모듈, appclient.jar 애플리케이션 클라이언트 모듈을 포함하고 있다.

  • 애플리케이션 myApp.ear을 먼저 도메인의 Master Server인 "adminServer"로 install하고, 서버 "server1"에 deploy한다.

다음의 순서로 애플리케이션을 작성한다.

  1. EAR 파일에 포함될 모듈을 작성한다.

  2. JAR, WAR, RAR 파일과 같은 디렉터리에서 META-INF 디렉터리를 생성한다.

  3. application.xml 파일을 생성(EAR 파일의 모듈을 포함시킨다)해서 META-INF 디렉터리에 복사한다.

    <application.xml>
    <?xml version="1.0" encoding="UTF-8"?>
    <application version="9"
        xmlns="https://jakarta.ee/xml/ns/jakartaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
            https://jakarta.ee/xml/ns/jakartaee/application_9.xsd">
        <description>Application description</description>
        <display-name>Sample application</display-name>
        <module>
            <ejb>ejb.jar</ejb>
        </module>
        <module>
            <web>
                <web-uri>web.war</web-uri>
                <context-root>hello</context-root>
            </web>
        </module>
        <module>
            <java>appclient.jar</java>
        </module>
    </application>
  4. 다음과 같이 jar 유틸리티를 사용해서 명령어를 실행하면 myApp.ear 파일이 생성된다.

    > jar cf myApp.ear ejb.jar web.war appclient.jar META-INF

    META-INF 디렉터리가 대문자인 것에 주의한다. 소문자로 작성할 경우에는 문제가 발생한다.

2. Deploy 명령어

JEUS가 제공하는 Deploy 관련 툴에서는 다음과 같은 작업들을 지원한다.

설명

distribute

애플리케이션 파일을 대상 서버나 클러스터로 복사하고, 애플리케이션을 서비스하기 위한 사전 작업을 한다. 대상으로 설정한 서버나 클러스터 중 하나라도 distribute에 실패하면 전체 작업을 실패로 간주하고 distribute에 성공한 서버에서 모두 undeploy한다.

deploy

애플리케이션 파일을 대상 서버로 복사하고, 애플리케이션을 서비스하기 위한 사전 작업을 한다. 이 작업이 성공하면 애플리케이션을 실행시킨다. 대상으로 설정한 서버나 클러스터 중 하나라도 distribute에 실패하면 전체 작업을 실패로 간주하고 distribute에 성공한 서버에서 모두 undeploy한다.

Start 작업에서 실패한 서버가 있더라도 하나라도 서비스 가능한 상태가 있으면 애플리케이션 Start 작업은 성공이다.

start

대상 서버에 distribute(배포)되어 있는 애플리케이션을 동작시키는 작업이다. Start 작업에서 실패한 서버가 있더라도 하나라도 서비스 가능한 상태가 있으면 애플리케이션 Start 작업은 성공이다.

stop

대상 서버에 배치되어 실행 중인 애플리케이션을 일시정지시키는 작업이다. 이때 애플리케이션을 대상 서버에서 삭제하지 않는다. 또한 애플리케이션 이름으로 start하거나 redeploy할 수도 있다.

undeploy

배치되어 실행 중인 애플리케이션을 정지시키고, deploy되어 있는 대상 서버나 클러스터에서 애플리케이션을 제거하는 작업이다.

redeploy

deploy되어 실행 중인 애플리케이션의 내용이 변경된 경우에 그 내용을 현재 애플리케이션에 반영하여 다시 deploy하는 작업이다.

모든 애플리케이션을 재배치할 때 Deploy 작업이 하나라도 실패하면 모든 애플리케이션은 정지된다.

다음 작업들은 JEUS에서만 제공하는 Deploy 작업이다. 이 작업은 JEUS가 제공하는 툴을 사용하여 진행할 수 있다.

작업 설명

Add Application Target

deploy나 distribute된 애플리케이션에 대상으로 특정 서버 또는 클러스터를 추가한다. 이미 서비스되고 있는 애플리케이션을 서비스하는 대상을 확장하려고 할 때 사용하는 작업이다.

대상은 여러 서버 또는 여러 클러스터를 설정할 수 있고, 이 작업이 대상으로 설정한 서버나 클러스터에서 실패한 경우 전체 작업 실패로 간주하고 기존에 서비스되고 있던 서버를 제외한 새로 추가하려는 서버에서는 모두 undeploy된다.

Remove Application Target

deploy나 distribute된 애플리케이션에서 대상으로 설정된 특정 서버 또는 클러스터를 삭제한다. 이미 서비스되고 있는 애플리케이션을 서비스하는 대상을 축소하려고 할 때 사용하는 작업이다.

대상은 여러 서버 또는 여러 클러스터를 설정할 수 있다.

3. 애플리케이션 제어 및 모니터링

본 절에서는 애플리케이션 제어 및 모니터링 방법에 대해서 설명한다.

3.1. 애플리케이션을 도메인에 Install

다음은 애플리케이션을 도메인에 install하는 방법에 대한 설명이다.

콘솔 툴 사용

install-application 명령어를 통해 애플리케이션을 도메인에 install하여 INSTALL_HOME(DOMAIN_HOME/.applications)에 위치시킨다. 이때 설치할 애플리케이션 파일 경로를 지정해야 하며 '-id' 옵션을 사용하여 애플리케이션의 ID를 지정할 수 있다.

만약 ID를 지정하지 않을 경우 JEUS가 자동으로 애플리케이션 ID를 지정한다. 예를 들어 애플리케이션 파일 이름이 myApp.ear인 경우 ID를 지정하지 않은 경우는 myApp_ear이 애플리케이션의 ID가 된다.

----------------------------------------------------------------
 using install-application command for application install
----------------------------------------------------------------
[MASTER]domain1.adminServer>install-application -id myApp /usr/apphome/myApp.ear
Successfully installed the application [myApp].

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+-------+----------+-----------+------------------------+
| Applicati|Application| State |  Server  |  Cluster  |    Application Path    |
|  on ID   |   Type    |       | Targets  |  Targets  |                        |
+----------+-----------+-------+----------+-----------+------------------------+
| myApp    |           | INSTAL|          |           | ${INSTALL_HOME}/myApp/m|
|          |           |LED    |          |           |yApp.ear                |
+----------+-----------+-------+----------+-----------+------------------------+
================================================================================

uninstall-application 명령어에 대한 자세한 내용은 JEUS Reference 안내서의 uninstall-application을 참고한다.

3.2. 도메인에서 애플리케이션 Uninstall

애플리케이션이 도메인에 더 이상 사용되지 않는다면 도메인에서 삭제할 수 있다. 애플리케이션이 INSTALLED 상태이거나 DEPLOYED 상태인 경우에 애플리케이션에 Uninstall 작업을 할 수 있다.

다음은 애플리케이션을 도메인에서 Uninstall하는 방법에 대한 설명이다.

콘솔 툴 사용

uninstall-application 명령어를 통해 애플리케이션을 uninstall할 수 있다. 명령어 실행 시 uninstall할 애플리케이션 ID를 명시해야 한다.

[MASTER]domain1.adminServer>uninstall-application myApp
uninstall the application for the application [myApp] succeeded. : Successfully deleted [myApp].

[MASTER]domain1.adminServer>application-info
No applications exist in this domain.
Application information for the domain [domain1].
================================================================================
+------------+---------------+-------+------------+-------------+--------------+
| Application|  Application  | State |   Server   |   Cluster   |  Application |
|     ID     |     Type      |       |  Targets   |   Targets   |     Path     |
+------------+---------------+-------+------------+-------------+--------------+
(No data available)
================================================================================

3.3. 애플리케이션 Deploy

install한 애플리케이션은 deploy 명령어를 통해 deploy하여 서비스 가능한 상태로 만들 수 있다. 본 절에서는 애플리케이션을 deploy하는 3가지 방법에 대해 설명한다.

콘솔 툴을 통한 Run-time Deploy 방법은 다음의 사항을 가정하여 설명한다.

  • 애플리케이션은 애플리케이션 작성에서 작성한 myApp.ear을 사용한다.

  • JEUS의 도메인 이름은 'domain1’이고, 애플리케이션을 deploy할 서버는 'server1’이다.

deploy-application 명령어를 수행할 때 사용할 수 있는 옵션에 대한 자세한 내용은 JEUS Reference 안내서의 deploy-application을 참고한다.

JEUS에서는 콘솔 툴에서 애플리케이션을 Run-time Deploy할 경우 애플리케이션의 위치에 따라 다음의 3가지 방법을 제공한다. 각 방법은 deploy, stop, start, redeploy, undeploy의 순서대로 deploy 명령어를 실행하며, 각 명령어를 실행한 뒤에는 applist를 수행하여 각 단계에서의 애플리케이션 상태를 확인한다.

JEUS를 직접 관리할 수 있는 콘솔 툴을 통해 Master Server에 연결하여 서버나 클러스터의 제어 및 모니터링을 할 수 있으며, 애플리케이션을 deploy할 수도 있다.

다음은 콘솔 툴에서 사용하는 애플리케이션의 Deploy 관련 명령어이다.

명령어 설명

distribute-application

애플리케이션을 deploy할 수 있도록 배치 대상에 애플리케이션을 복사하고, 애플리케이션 서비스를 위한 사전 준비작업을 한다.

deploy-application

애플리케이션을 deploy한다.

Deploy란 Deploy 대상에 애플리케이션을 복사하고(Distribute), 애플리케이션의 서비스를 시작(Start)하는 것이다. Deploy가 성공적으로 완료되면 RUNNING 상태가 되며, Distribute 완료 후 서비스 단계에서 장애가 발생하면 DISTRIBUTED 상태에 머물러 있다.

start-application

DISTRIBUTED 상태에 있는 애플리케이션을 실행한다. 작업이 수행되는 동안에는 STARTING 상태로 성공적으로 완료되면 RUNNING 상태가 된다.

stop-application

RUNNING 상태에 있는 애플리케이션을 정지한다. 작업이 수행되는 동안에는 STOPPING 상태로 성공적으로 완료되면 DISTRIBUTED 상태가 된다.

redeploy-application

Deploy가 완료된 애플리케이션에 변경된 내용이 있는 경우 변경 내용을 반영하여 다시 deploy한다. Deploy와 같은 단계로 이루어지며 각 단계에서의 상태 또한 같다.

undeploy-application

애플리케이션 서비스를 종료하고 배치 대상에서 애플리케이션을 제거한다.

application-info

도메인에 존재하는 애플리케이션의 정보를 출력한다.

add-application-target

Deploy되어 있는 애플리케이션에 서비스 대상을 추가한다. 서비스 대상은 서버나 클러스터가 될 수 있다.

remove-application-target

Deploy되어 있는 애플리케이션에서 서비스 대상을 삭제한다. 서비스 대상은 서버나 클러스터가 될 수 있다.

콘솔 툴에 대한 설명 및 각 명령어에 대한 자세한 내용은 JEUS Reference 안내서의 jeusadmin을 참고한다.

3.3.1. 도메인에 install한 애플리케이션 Deploy

본 절에서는 도메인에 install한 애플리케이션을 Deploy하는 방법에 대해 설명한다.

콘솔 툴 사용

install-application 명령어를 통해 애플리케이션을 도메인에 install하여 INSTALL_HOME(DOMAIN_HOME/.applications)에 위치시킨다. 이때 애플리케이션의 ID를 옵션으로 줄 수 있다.

만약 ID를 주지 않은 경우 애플리케이션 파일 이름이 myApp.ear이므로 myApp_ear이 애플리케이션의 ID가 된다. 애플리케이션을 도메인에 install한 후 deploy-application 명령어를 사용해 대상 서버에 애플리케이션을 deploy한다.

----------------------------------------------------------------
 using deploy command for application with install application
----------------------------------------------------------------
[MASTER]domain1.adminServer>install-application -id myApp /usr/apphome/myApp.ear
Successfully installed the application [myApp].

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+-------+----------+-----------+------------------------+
| Applicati|Application| State |  Server  |  Cluster  |    Application Path    |
|  on ID   |   Type    |       | Targets  |  Targets  |                        |
+----------+-----------+-------+----------+-----------+------------------------+
| myApp    |           | INSTAL|          |           | ${INSTALL_HOME}/myApp/m|
|          |           |LED    |          |           |yApp.ear                |
+----------+-----------+-------+----------+-----------+------------------------+
================================================================================

[MASTER]domain1.adminServer>deploy myApp -servers server1
deploy the application for the application [myApp] succeeded.

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicati| Application|  State  |  Server  |  Cluster  |   Application Path  |
|  on ID   |    Type    |         | Targets  |  Targets  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myAp|
|          |            |         |          |           |p/myApp.ear          |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================

[MASTER]domain1.adminServer>stop-application myApp
stop the application for the application [myApp] succeeded.

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+--------+----------+----------+------------------------+
| Applicati|Application|  State |  Server  |  Cluster |    Application Path    |
|  on ID   |   Type    |        | Targets  | Targets  |                        |
+----------+-----------+--------+----------+----------+------------------------+
| myApp    | EAR       | DISTRIB| server1  |          | ${INSTALL_HOME}/myApp/m|
|          |           |UTED    |          |          |yApp.ear                |
+----------+-----------+--------+----------+----------+------------------------+
================================================================================

[MASTER]domain1.adminServer>start-application myApp
start the application for the application [myApp] succeeded.

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicati| Application|  State  |  Server  |  Cluster  |   Application Path  |
|  on ID   |    Type    |         | Targets  |  Targets  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myAp|
|          |            |         |          |           |p/myApp.ear          |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================

[MASTER]domain1.adminServer>redeploy-application myApp
redeploy application on JEUS Master Server for the application [myApp] succeeded.

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicati| Application|  State  |  Server  |  Cluster  |   Application Path  |
|  on ID   |    Type    |         | Targets  |  Targets  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myAp|
|          |            |         |          |           |p/myApp.ear          |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================

[MASTER]domain1.adminServer>undeploy myApp
Undeploying [myApp] (This may take time due to graceful undeployment) ..........
undeploy the application for the application [myApp] succeeded.
successfully undeployed (elapsed = 415ms)

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+-------+----------+-----------+------------------------+
| Applicati|Application| State |  Server  |  Cluster  |    Application Path    |
|  on ID   |   Type    |       | Targets  |  Targets  |                        |
+----------+-----------+-------+----------+-----------+------------------------+
| myApp    | EAR       | INSTAL|          |           | ${INSTALL_HOME}/myApp/m|
|          |           |LED    |          |           |yApp.ear                |
+----------+-----------+-------+----------+-----------+------------------------+
================================================================================

[MASTER]domain1.adminServer>uninstall-application myApp
uninstall the application for the application [myApp] succeeded. : Successfully deleted [myApp].

[MASTER]domain1.adminServer>application-info
No applications exist in this domain.
Application information for the domain [domain1].
================================================================================
+------------+---------------+-------+------------+-------------+--------------+
| Application|  Application  | State |   Server   |   Cluster   |  Application |
|     ID     |     Type      |       |  Targets   |   Targets   |     Path     |
+------------+---------------+-------+------------+-------------+--------------+
(No data available)
================================================================================

3.3.2. 애플리케이션 저장소에 있는 애플리케이션 Deploy

애플리케이션 저장소를 추가하고 나면 저장소에 존재하는 애플리케이션을 deploy한다. 애플리케이션 저장소의 기능과 저장소를 추가, 삭제하는 방법에 대한 자세한 내용은 애플리케이션 저장소 추가/삭제/조회를 참고한다.

콘솔 툴 사용

다음은 콘솔 툴을 사용해서 애플리케이션 저장소에 있는 애플리케이션 deploy하는 예제이다.

[MASTER]domain1.adminServer>add-application-repository /home/user1/apps
Successfully performed the ADD operation for An application repository.
Check the results using "add-application-repository or list-application-repositories"

[MASTER]domain1.suok>list-application-repositories
Application Repositories
================================================================================
+------------------------------------------------------------------------------+
|                        Path to Application Repository                        |
+------------------------------------------------------------------------------+
| /home/user1/apps                                                             |
+------------------------------------------------------------------------------+
================================================================================

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+-------+----------+-----------+------------------------+
| Applicati|Application| State |  Server  |  Cluster  |    Application Path    |
|  on ID   |   Type    |       | Targets  |  Targets  |                        |
+----------+-----------+-------+----------+-----------+------------------------+
| exploded |           | INSTAL|          |           | /home/user1/apps/explod|
|          |           |LED    |          |           |ed                      |
+----------+-----------+-------+----------+-----------+------------------------+
================================================================================

[MASTER]domain1.adminServer>deploy exploded -servers server1
deploy the application for the application [exploded.war] succeeded.

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicati| Application|  State  |  Server  |  Cluster  |   Application Path  |
|  on ID   |    Type    |         | Targets  |  Targets  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| exploded | WAR        | RUNNING | server1  |           | /home/user1/apps/exp|
|          |            |         |          |           |loded                |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================

3.3.3. path를 지정하여 Deploy

다음은 상위 디렉터리를 애플리케이션 저장소로 추가할 수 없는 경우에 path 옵션을 설정하고 deploy하는 방법에 대한 설명이다. Master Server가 존재하는 머신에 있는 애플리케이션의 절대 경로를 설정하고 deploy하는 기능에 대한 자세한 내용은 path를 지정하여 Deploy를 참고한다.

콘솔 툴 사용

다음은 콘솔 툴을 사용해서 path를 지정하여 deploy하는 방법이다.

[MASTER]domain1.adminServer>deploy -path /home/user1/apps/myApp.ear -servers server1
deploy the application for the application [/home/user1/apps/myApp.ear] succeeded.

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+-----------+------------+---------+-----------+-----------+-------------------+
| Applicati |Application |  State  |   Target  |   Target  |  Application Path |
|   on ID   |    Type    |         |  Servers  | Clusters  |                   |
+-----------+------------+---------+-----------+-----------+-------------------+
| myApp.ear | EAR        | RUNNING | server1   |           | /home/user1/apps/ |
|           |            |         |           |           |myApp.ear          |
+-----------+------------+---------+-----------+-----------+-------------------+
================================================================================

3.4. 애플리케이션 Redeploy

애플리케이션을 수정한 경우 redeploy 명령어를 사용하여 애플리케이션을 다시 deploy하고, 수정 사항을 반영할 수 있다.

콘솔 툴 사용

다음은 콘술 툴을 사용하여 애플리케이션을 redeploy하는 과정에 대한 설명이다.

  1. 도메인에 install한 애플리케이션의 경우 수정한 애플리케이션을 새로 설치한다. 기존에 설치한 애플리케이션을 교체하는 것이기 때문에 install-application 수행 시 -f 옵션을 사용해야 한다.

    path를 지정하여 deploy한 경우에는 지정한 path에 있던 기존 애플리케이션 파일을 수정한 애플리케이션 파일로 교체한다.

    [MASTER]domain1.adminServer>install-application -id myApp -f /home/user1/apps/myApp.ear
    Successfully installed the application [myApp].
  2. redeploy-application 명령어를 통해 애플리케이션을 redeploy한다. 명령어 실행 시 redeploy할 애플리케이션 ID를 반드시 입력해야 한다.

    [MASTER]domain1.adminServer>redeploy-application myApp
    redeploy application on JEUS Master Server for the application [myApp] succeeded.

redeploy-application 명령어를 수행할 때 사용할 수 있는 옵션에 대한 자세한 내용은 JEUS Reference 안내서의 redeploy-application을 참고한다.

3.5. 애플리케이션 Undeploy

서비스 중인 애플리케이션을 중단하고 undeploy하는 작업은 undeploy 명령어를 통해 가능하다. undeploy를 수행하면 도메인에서 해당 애플리케이션이 삭제된다.

콘솔 툴 사용

다음은 콘솔 툴을 사용하여 애플리케이션을 undeploy하는 방법에 대한 설명이다.

undeploy-application 명령어를 사용하여 애플리케이션을 undeploy할 수 있다. undeploy-application 명령어 입력 시 undeploy할 애플리케이션 ID를 반드시 입력해야 한다.

[MASTER]domain1.adminServer>undeploy-application myApp
Undeploying [myApp] (This may take time due to graceful undeployment) ..........
undeploy the application for the application [myApp] succeeded.
successfully undeployed (elapsed = 82ms)
[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+-------+----------+-----------+------------------------+
| Applicat | Applicati | State |  Target  |   Target  |    Application Path    |
|  ion ID  |  on Type  |       | Servers  | Clusters  |                        |
+----------+-----------+-------+----------+-----------+------------------------+
| myApp    | EAR       | INSTA |          |           | ${INSTALL_HOME}/myApp/ |
|          |           |LLED   |          |           |myApp.ear               |
+----------+-----------+-------+----------+-----------+------------------------+
================================================================================
[MASTER]domain1.adminServer>
  • Install 과정을 거치지 않고 deploy한 애플리케이션을 undeploy하는 경우에는 INSTALLED 상태로 표시되지 않고 목록에서 바로 삭제된다.

  • undeploy-application 명령어를 수행할 때 사용할 수 있는 옵션에 대한 자세한 내용은 JEUS Reference 안내서의 undeploy-application을 참고한다.

3.6. 애플리케이션 시작

애플리케이션을 deploy할 때 'Only Distribute' 옵션을 주고 distribute만 수행했거나, 서비스 중인 애플리케이션을 stop 명령어를 수행하여 DISTRIBUTED 상태인 애플리케이션을 다시 서비스하도록 하려면 Start 작업을 수행해야 한다.

콘솔 툴 사용

다음은 콘솔 툴을 사용해서 중지된 애플리케이션이 서비스를 시작하는 방법에 대한 설명이다.

start-application 명령어를 수행하여 애플리케이션을 start할 수 있다. start-application 명령어 실행 시 start할 애플리케이션 ID를 반드시 입력해야 한다.

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+--------+----------+----------+------------------------+
| Applicat | Applicati |  State |  Target  |  Target  |    Application Path    |
|  ion ID  |  on Type  |        | Servers  | Clusters |                        |
+----------+-----------+--------+----------+----------+------------------------+
| myApp    | EAR       | DISTRI | server1  |          | ${INSTALL_HOME}/myApp/ |
|          |           |BUTED   |          |          |myApp.ear               |
+----------+-----------+--------+----------+----------+------------------------+
================================================================================
[MASTER]domain1.adminServer>start-application myApp
start the application for the application [myApp] succeeded.
[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicat |Application |  State  |  Target  |   Target  |   Application Path  |
|  ion ID  |    Type    |         | Servers  | Clusters  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myA |
|          |            |         |          |           |pp/myApp.ear         |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================
[MASTER]domain1.adminServer>

start-application 명령어를 수행할 때 사용할 수 있는 옵션에 대한 자세한 내용은 JEUS Reference 안내서의 start-application을 참고한다.

3.7. 애플리케이션 중지

애플리케이션을 undeploy하지 않고, 잠시 서비스만 중단하고자 하는 경우 다음과 같은 방법을 사용하여 애플리케이션을 stop할 수 있다.

콘솔 툴 사용

다음은 콘솔 툴을 사용해서 애플리케이션이 서비스를 중지하는 방법에 대한 설명이다.

stop-application 명령어를 사용하여 애플리케이션 서비스를 중지할 수 있다. stop-application 명령어 실행 시 중단할 애플리케이션 ID를 반드시 입력해야 한다.

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicat |Application |  State  |  Target  |   Target  |   Application Path  |
|  ion ID  |    Type    |         | Servers  | Clusters  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myA |
|          |            |         |          |           |pp/myApp.ear         |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================
[MASTER]domain1.adminServer>stop-application myApp
stop the application for the application [myApp] succeeded.
[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+--------+----------+----------+------------------------+
| Applicat | Applicati |  State |  Target  |  Target  |    Application Path    |
|  ion ID  |  on Type  |        | Servers  | Clusters |                        |
+----------+-----------+--------+----------+----------+------------------------+
| myApp    | EAR       | DISTRI | server1  |          | ${INSTALL_HOME}/myApp/ |
|          |           |BUTED   |          |          |myApp.ear               |
+----------+-----------+--------+----------+----------+------------------------+
================================================================================
[MASTER]domain1.adminServer>

stop-application 명령어를 수행할 때 사용할 수 있는 옵션에 대한 자세한 내용은 JEUS Reference 안내서의 stop-application을 참고한다.

3.8. 서비스 중인 애플리케이션에 서버 추가

애플리케이션 서비스를 확장하기 위해 현재 실행 중인 애플리케이션의 대상에 서버나 클러스터를 추가할 수 있다. 이미 도메인에 존재하는 애플리케이션을 특정 서버에만 deploy할 수는 없기 때문에 서비스 대상을 추가(add-target)하는 별도의 명령어를 지원한다. 애플리케이션에 서비스 대상을 추가하는 명령(add-target)은 애플리케이션이 RUNNING 상태이거나 DISTRIBUTED 상태일 때 가능하다.

애플리케이션 서비스 대상에 서버를 추가하려면 서버가 하나 더 존재해야 한다. 서버를 추가하는 방법은 JEUS Server 안내서의 서버 추가를 참고한다.

콘솔 툴 사용

다음은 콘솔 툴을 사용해서 서비스 중인 애플리케이션에 서버를 추가하는 방법에 대한 설명이다.

add-application-target 명령어를 사용하여 실행 중인 애플리케이션의 대상을 추가할 수 있다. add-application-target 명령어 실행 시 대상을 추가할 애플리케이션 ID와 애플리케이션을 추가할 서버(또는 클러스터) 목록을 반드시 지정해야 한다.

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicat |Application |  State  |  Target  |   Target  |   Application Path  |
|  ion ID  |    Type    |         | Servers  | Clusters  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myA |
|          |            |         |          |           |pp/myApp.ear         |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================
[MASTER]domain1.adminServer>add-application-target myApp -servers server2
add a target server or cluster to the application for the application [myApp] succeeded.
[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+---------+-----------+-----------+---------------------+
| Applicat | Applicati |  State  |   Target  |   Target  |   Application Path  |
|  ion ID  |  on Type  |         |  Servers  | Clusters  |                     |
+----------+-----------+---------+-----------+-----------+---------------------+
| myApp    | EAR       | RUNNING | server1,s |           | ${INSTALL_HOME}/myA |
|          |           |         |erver2     |           |pp/myApp.ear         |
+----------+-----------+---------+-----------+-----------+---------------------+
================================================================================
[MASTER]domain1.adminServer>

add-application-target 명령어를 수행할 때 사용할 수 있는 옵션에 대한 자세한 내용은 JEUS Reference 안내서의 add-application-target을 참고한다.

3.9. 서비스 중인 애플리케이션에서 서비스 중인 서버 삭제

애플리케이션 서비스를 축소하기 위해 애플리케이션을 서비스하고 있는 대상에서 서버나 클러스터를 삭제하는 기능을 제공한다. 이미 도메인에 존재하는 애플리케이션을 특정 서버에만 undeploy할 수 없기 때문에 서비스 대상을 삭제(remove-target)하는 별도의 명령어를 지원한다. 애플리케이션에 서비스 대상을 삭제하는 명령은 애플리케이션이 RUNNING 상태 또는 DISTRIBUTED 상태일 때 가능하다.

콘솔 툴 사용

다음은 콘솔 툴을 사용해서 서비스 중인 애플리케이션에서 서비스 중인 서버를 삭제하는 방법에 대한 설명이다.

remove-application-target 명령어를 사용하여 실행 중인 애플리케이션의 대상을 삭제할 수 있다. remove-application-target 명령어 실행 시 대상을 삭제할 애플리케이션 ID와 삭제할 대상 서버(또는 클러스터) 목록을 반드시 입력해야 한다.

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+---------+-----------+-----------+---------------------+
| Applicat | Applicati |  State  |   Target  |   Target  |   Application Path  |
|  ion ID  |  on Type  |         |  Servers  | Clusters  |                     |
+----------+-----------+---------+-----------+-----------+---------------------+
| myApp    | EAR       | RUNNING | server1,s |           | ${INSTALL_HOME}/myA |
|          |           |         |erver2     |           |pp/myApp.ear         |
+----------+-----------+---------+-----------+-----------+---------------------+
================================================================================
[MASTER]domain1.adminServer>remove-application-target myApp -servers server2
remove server or cluster target from the application for the application [myApp] succeeded.
[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicat |Application |  State  |  Target  |   Target  |   Application Path  |
|  ion ID  |    Type    |         | Servers  | Clusters  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myA |
|          |            |         |          |           |pp/myApp.ear         |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================
[MASTER]domain1.adminServer>

remove-application-target 명령어를 수행할 때 사용할 수 있는 옵션에 대한 자세한 내용은 JEUS Reference 안내서의 remove-application-target을 참고한다.

3.10. 애플리케이션 정보 확인

본 절에서는 애플리케이션 정보를 확인하는 방법에 대해서 설명한다.

3.10.1. 콘솔 툴 사용

콘솔 툴의 application-info 명령어를 통해 myApp.ear 애플리케이션에 대한 정보를 조회할 수 있다.

다음은 콘솔 툴에서 애플리케이션 정보를 확인하는 예제이다. 각 옵션에 대한 자세한 설명은 JEUS Reference 안내서의 application-info를 참고한다.

[MASTER]domain1.adminServer> application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicati| Application|  State  |  Server  |  Cluster  |   Application Path  |
|  on ID   |    Type    |         | Targets  |  Targets  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myAp|
|          |            |         |          |           |p/myApp.ear          |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================

[MASTER]domain1.adminServer>application-info -id myApp -server server1
Application information for the server [server1] in the domain [domain1].
================================================================================
+------------+-----------------+-------------+------+------------+-------------+
| Application| Application Name| Application | State|   Server   |   Cluster   |
|     ID     |                 |    Type     |      |  Targets   |   Targets   |
+------------+-----------------+-------------+------+------------+-------------+
| myApp      | myApp           | ear         | RUNNI| server1    |             |
|            |                 |             |NG    |            |             |
+------------+-----------------+-------------+------+------------+-------------+
================================================================================

[MASTER]domain1.adminServer>application-info -id myApp -server server1 -detail
Application name : myApp
Application [myApp]
===============================================================
+-------------+---------------------------------+-------------+
| Module Name |        Unique Module Name       | Module Type |
+-------------+---------------------------------+-------------+
| ejb         | myApp#ejb                       | EJB         |
| appclient   | myApp#appclient                 | CAR         |
| web         | myApp#web                       | WAR         |
+-------------+---------------------------------+-------------+

To view detailed information about EJBs or web modules in an EAR, use the "-module" or "-type" option.
===============================================================

[MASTER]domain1.adminServer>application-info -id myApp -server server1 -detail -module ejb
Application name : myApp
General information about the EJB module [ejb].
==============================================================
+-------------+----------------------------------------------+
| Module Name |              Unique Module Name              |
+-------------+----------------------------------------------+
| ejb         | myApp#ejb                                    |
+-------------+----------------------------------------------+
==============================================================

Beans
================================================================================
+-----------+-------------------------+-------------------+--------------------+
| Bean Name |           Type          | Local Export Name | Remote Export Name |
+-----------+-------------------------+-------------------+--------------------+
| HelloBean | StatelessSessionBean    |                   |                    |
+-----------+-------------------------+-------------------+--------------------+
================================================================================

[MASTER]domain1.adminServer>application-info -id myApp -server server1 -detail -type war
Application name : myApp
There are no EJBs in this module.
General information about the web module [web].
===============================================================
+-------------+--------------------------------+--------------+
| Module Name |       Unique Module Name       | Context Path |
+-------------+--------------------------------+--------------+
| web         | myApp#web                      | /hello       |
+-------------+--------------------------------+--------------+
===============================================================

Servlets
================================================================================
+---------+------------------+-------+-------+-----------+---------+-----------+
|   Name  |       Class      | State | Count | Attribute | RegType |URLPatterns|
+---------+------------------+-------+-------+-----------+---------+-----------+
| HelloSer| dvt.deployment.se| READY |     0 | SYNC      | WEB_XML | /HelloServ|
|vlet     |rvlet.HelloServlet|       |       |           |         |let        |
+---------+------------------+-------+-------+-----------+---------+-----------+
================================================================================

Filters
================================================================================
+------+-------+--------------+-----------+----------------------+-------------+
| Name | Class |   Attribute  |  RegType  |      URLPatterns     |   Servlets  |
+------+-------+--------------+-----------+----------------------+-------------+
(No data available)
================================================================================

Listeners
================================================
+------+------+--------------------------------+
| Name | Type |             RegType            |
+------+------+--------------------------------+
(No data available)
================================================

EJBs
================================================================================
+-----------+------+-------------------------+---------------------------------+
| Bean Name | Type |    Local Export Name    |        Remote Export Name       |
+-----------+------+-------------------------+---------------------------------+
(No data available)
================================================================================

[MASTER]domain1.suok>application-info -id myApp -server server1 -detail -module ejb -bean HelloBean
bean HelloBean
Application name : myApp
Module name : ejb
Bean name: HelloBean
================================================================================
+---------------+-----------+-------------------+--------------+---------------+
|      Name     |  (Count)  | WaterMark(High:Low| Bound(Upper:L| Time(Max:Min:T|
|               |           |       :Cur)       |    ower)     |     otal)     |
+---------------+-----------+-------------------+--------------+---------------+
| create        | times(0)  |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| remove        | times(0)  |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| timed-rb      | transactio|                   |              |               |
|               |n(0)       |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| request       | request(0)|                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| active-bean   |           | bean(0:0:0)       |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| rolledback    | transactio|                   |              |               |
|               |n(0)       |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| total-bean    |           | bean(0:0:0)       |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| comitted      | transactio|                   |              |               |
|               |n(0)       |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| MethodReadyCou|           | bean(0:0:0)       |              |               |
|nt             |           |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| active-thread |           | thread(0:0:0)     |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| total-remote-t|           |thread(100:100:100)|              |               |
|hread          |           |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
================================================================================

application-info 명령은 도메인에 존재하는 모든 애플리케이션의 정보를 출력한다. 기본적으로 출력되는 정보는 다음과 같다.

항목 설명

Application ID

애플리케이션의 ID이다. 이 값은 도메인에서 유일해야 한다.

Application Type

애플리케이션의 종류로 5가지 중 하나가 될 수 있다.

  • EAR : 애플리케이션

  • EJB : EJB 모듈

  • WAR : 웹 애플리케이션 모듈

  • RAR : 리소스 어댑터 모듈

  • CAR : 애플리케이션 클라이언트 모듈

state

애플리케이션이 도메인에서의 상태로 다음 4가지 중 하나가 될 수 있다.

  • INSTALLED

  • DISTRIBUTED

  • RUNNING

  • DEPLOYED

각 상태에 대한 자세한 설명은 애플리케이션 상태를 참고한다.

Server Target

애플리케이션이 deploy되어 있는 대상 서버이다.

Cluster Target

애플리케이션이 deploy되어 있는 대상 클러스터이다.

Application Path

Master Server에 존재하는 애플리케이션 파일의 경로를 나타낸다.

4. Staging Mode Deploy

exploded 모듈 형태의 애플리케이션은 파일을 압축하여 다른 머신의 MS에 deploy할 수 있다. 이를 Staging Mode Deploy라고 한다. 애플리케이션 파일이 애플리케이션 저장소에 위치하거나 Master Server가 존재하는 머신에 있는 절대 경로를 설정하고 deploy할 수 있다. Staging Mode Deploy 기능에 대한 자세한 내용은 Staging Mode Deploy를 참고한다.

콘솔 툴 사용

다음은 콘솔 툴을 사용한 Staging Mode Deploy 방법이다. deploy 명령어를 staging 옵션을 지정하여 수행한다.

[MASTER]domain1.adminServer>deploy exploded -servers server1 -staging
deploy the application for the application [exploded] succeeded.

[MASTER]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicati| Application|  State  |  Server  |  Cluster  |   Application Path  |
|  on ID   |    Type    |         | Targets  |  Targets  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| exploded | WAR        | RUNNING | server1  |           | /home/user1/apps/exp|
|          |            |         |          |           |loded                |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myAp|
|          |            |         |          |           |p/myApp.ear          |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================

5. Deployment Plan을 사용한 Deployment

Deployment Plan은 Deploy Time에 애플리케이션의 DD의 내용을 수정할 수 있는 애플리케이션 외부의 설정 파일이다. JEUS는 XML 형식의 Deployment Plan을 정의하며 EJB, 웹 애플리케이션, EAR의 표준 DD와 JEUS DD에 Deployment Plan를 적용할 수 있도록 지원한다. 애플리케이션을 deploy할 때 Deployment Plan 사용에 대해 명시하면 Deploy Time에 DD와 Deployment Plan의 설정을 merge하여 최종 애플리케이션 설정을 확정한 뒤 Deploy를 수행한다.

본 절에서는 Deployment Plan의 설정 방법과 동작 방식에 대해 설명한다. 또한 deploy 시 Deployment Plan을 적용하는 방법에 대해 설명한다.

5.1. Deployment Plan 설정 및 동작 방식

Deployment Plan의 작성 예제를 통해 설정 방법과 동작 방식에 대해 설명한다.

Deployment Plan 설정

다음은 Deployment Plan의 작성 예이다.

<?xml version="1.0" encoding="UTF-8"?>
<jeus-deployment-plan xmlns="http://www.tmaxsoft.com/xml/ns/jeus"
                      xmlns:jeus="http://www.tmaxsoft.com/xml/ns/jeus"
                      xmlns:jakartaee="https://jakarta.ee/xml/ns/jakartaee">
    <descriptors>
        <!-- For standalone EJB -->
        <descriptor>
            <uri>META-INF/ejb-jar.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>//jakartaee:ejb-name[.='ByeBean']</xpath>
                    <value>
                        <![CDATA[<ejb-name>HiBean</ejb-name>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>DELETE</action>
                    <xpath>/child::jakartaee:ejb-jar/child::jakartaee:enterprise-beans/
child::jakartaee:session/child::jakartaee:local-home[.='HelloHomeLocal']</xpath>
                </configuration>
                <configuration>
                    <action>APPEND_CHILD</action>
                    <xpath>/child::jakartaee:ejb-jar/descendant::jakartaee:session[2]</xpath>
                    <value>
                        <![CDATA[<transaction-type>Bean</transaction-type>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>INSERT_BEFORE</action>
                    <xpath>/jakartaee:ejb-jar/jakartaee:enterprise-beans/jakartaee:session/
jakartaee:ejb-name[.='HelloBean']/../jakartaee:transaction-type</xpath>
                    <value>
                        <![CDATA[<session-type>Stateless</session-type>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
        <descriptor>
            <uri>META-INF/jeus-ejb-dd.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>/jeus:jeus-ejb-dd/jeus:beanlist/jeus:jeus-bean/
jeus:export-name[.='ByeBean']</xpath>
                    <value>
                        <![CDATA[<export-name>HiBean</export-name>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>DELETE</action>
                    <xpath>/jeus:jeus-ejb-dd/jeus:beanlist/jeus:jeus-bean/
jeus:local-export-name[.='HelloBeanLocal']</xpath>
                </configuration>
                <configuration>
                    <action>APPEND_CHILD</action>
                    <xpath>/jeus:jeus-ejb-dd/jeus:beanlist/jeus:jeus-bean</xpath>
                    <value>
                        <![CDATA[<jeus-rmi>false</jeus-rmi>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>INSERT_BEFORE</action>
                    <xpath>/jeus:jeus-ejb-dd/jeus:beanlist/jeus:jeus-bean/
jeus:ejb-name[.='HiBean']/../jeus:jeus-rmi</xpath>
                    <value>
                        <![CDATA[<thread-max>100</thread-max>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
        <!-- For standalone web application -->
        <descriptor>
            <uri>WEB-INF/web.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>/child::jakartaee:web-app/child::jakartaee:servlet-mapping/
child::jakartaee:servlet-name[.='HiServlet']</xpath>
                    <value>
                        <![CDATA[<servlet-name>HelloServlet</servlet-name>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>DELETE</action>
                    <xpath>//jakartaee:load-on-startup</xpath>
                </configuration>
                <configuration>
                    <action>APPEND_CHILD</action>
                    <xpath>/jakartaee:web-app/descendant::jakartaee:login-config</xpath>
                    <value>
                        <![CDATA[<auth-method>BASIC</auth-method>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>INSERT_BEFORE</action>
                    <xpath>/jakartaee:web-app/jakartaee:env-entry/
jakartaee:env-entry-value[.='value1']</xpath>
                    <value>
                        <![CDATA[<env-entry-type>java.lang.String</env-entry-type>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
        <descriptor>
            <uri>WEB-INF/jeus-web-dd.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>//jeus:enable-jsp</xpath>
                    <value>
                        <![CDATA[<enable-jsp>true</enable-jsp>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>DELETE</action>
                    <xpath>/jeus:jeus-web-dd/child::jeus:max-instance-pool-size</xpath>
                </configuration>
                <configuration>
                    <action>INSERT_BEFORE</action>
                    <xpath>/jeus:jeus-web-dd/descendant::jeus:enable-jsp</xpath>
                    <value>
                        <![CDATA[<context-path>/hello</context-path>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>APPEND_CHILD</action>
                    <xpath>//jeus:jeus-web-dd</xpath>
                    <value>
                        <![CDATA[<webinf-first></enabled>false</enabled></webinf-first>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
        <!-- For EAR -->
        <descriptor>
            <uri>META-INF/application.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>/jakartaee:application/jakartaee:library-directory</xpath>
                    <value>
                        <![CDATA[<library-directory>mylib</library-directory>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
        <descriptor>
            <uri>ejb.jar/META-INF/ejb-jar.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>/jakartaee:ejb-jar/jakartaee:enterprise-beans/
jakartaee:session/jakartaee:ejb-class</xpath>
                    <value>
                        <![CDATA[<ejb-class>HelloBean</ejb-class>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
            <descriptor>
            <uri>web.war/WEB-INF/web.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>/jakartaee:web-app/jakartaee:servlet-mapping/
jakartaee:servlet-name</xpath>
                    <value>
                        <![CDATA[<servlet-name>HelloServlet</servlet-name>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
    </descriptors>
</jeus-deployment-plan>

다음은 <descriptor>의 하위 태그에 대한 설명이다.

  • <descriptor>

    <descriptor>는 여러 <configuration> 태그로 이루어져 있다.

    • <configuration>

      <configuration>은 target DD에 적용할 하나의 설정 단위로 하위에 <action>, <xpath>, <value> 태그로 구성된다.

      태그 설명

      <action>

      DD의 특정 태그에 대해서 어떤 설정을 변경할 것인지를 명시한다.

      다음은 설정값에 대한 설명이다.

      • DELETE : DD의 특정 태그를 삭제한다.

      • REPLACE : DD의 특정 태그를 임의의 태그로 대체한다.

      • APPEND_CHILD : DD의 특정 태그의 last child로써 임의의 태그를 추가한다.

      • INSERT_BEFORE : DD의 특정 태그의 previous sibling으로서 임의의 태그를 삽입한다.

      <xpath>

      DD의 특정 태그를 xpath expression으로 지정한다. 이때 <xpath> 표준에 따라 <xpath> 경로에 위치하는 모든 태그는 XML Name Space를 통해 qualified name으로 표현되어야 한다. 이를 위해 Deployment Plan에 각 DD의 XML Name Space를 Name Space Prefix와 함께 선언한다.

      예를 들어 JEUS DD에 있는 임의의 태그를 <xpath>로 지정할 경우 <xpath> 경로에 위치하는 모든 태그는 JEUS XML Name Space(http://www.tmaxsoft.com/xml/ns/jeus)와 함께 qualified name으로 표현될 필요가 있다. Deployment Plan에서는 JEUS XML Name Space를 'jeus' Prefix로 매칭시켜 놓았으므로 <xpath> 경로에 위치하는 모든 태그의 이름 앞에 'jeus' Prefix를 붙여 qualified name을 표현한다.

      <value>

      <value>는 <action> 값이 REPLACE, APPEND_CHILD, INSERT_BEFORE인 경우에만 유효하다.

      <action> 값에 따른 설정값은 다음과 같다.

      • REPLACE : <xpath>로 지정한 태그를 대체할 새로운 태그를 설정한다.

      • APPEND_CHILD : <xpath>로 지정한 태그에 last child로 추가할 태그를 설정한다.

      • INSERT_BEFORE : <xpath>로 지정한 태그의 previous sibling으로 삽입할 태그를 설정한다.

      <value> 값으로 설정되는 태그는 일반적으로 depth를 갖는 XML fragment 형태를 가정하므로 <value> 값은 특별히 CDATA section으로 표현한다. CDATA section에 action 수행을 위해 필요한 XML fragment를 그대로 적는다.

Deployment Plan 동작 방식

위의 작성 예제를 바탕으로 태그별 동작 방식에 대해 설명한다.

  • <descriptor>

    Deployment Plan은 여러 개의 <descriptor> 태그로 이루어져 있다.

    <descriptor> 단위로 target이 되는 DD를 지정하며 이를 위해 <uri> 태그를 사용한다. 애플리케이션 파일을 루트(root)로 가정하고 그로부터 정해지는 DD의 상대 경로를 <uri> 값으로 명시하여 target DD를 결정한다.

    • 예를 들어 Standalone EJB 모듈의 표준 DD는 애플리케이션 루트로부터 항상 META-INF/ejb-jar.xml에 위치하며 JEUS DD는 META-INF/jeus-ejb-dd.xml에 위치한다. 그러므로 위의 Deployment Plan의 첫 번째 <descriptor>는 그것의 <uri> 값으로부터 Standalone EJB 모듈의 표준 DD를 위한 것이고 두 번째 <descriptor>는 그것의 <uri> 값으로부터 Standalone EJB 모듈의 JEUS DD를 위한 것임을 알 수 있다. Standalone 웹 애플리케이션이나 EAR에 대해서도 동일한 규칙이 적용된다.

    • <uri> 값이 'ejb.jar/META-INF/ejb-jar.xml’인 <descriptor>는 EAR에 속한 EJB 모듈(파일 이름이 ejb.jar)을 위한 것이고, <uri> 값이 'web.war/WEB-INF/web.xml’인 <descriptor>는 EAR에 속한 WEB 모듈(파일 이름이 web.war)을 위한 것이다.

    • 하나의 Deployment Plan은 여러 개의 서로 다른 애플리케이션 Deploy를 위해 사용될 수 있다. deploy하는 애플리케이션의 DD와 <uri> 값이 매칭되어 유효한 것으로 판단되는 <descriptor>만 선택되어 해당 애플리케이션을 deploy할 때 적용되는 방식이므로 그 외의 <descriptor>는 Deploy에 전혀 영향을 주지 않는다.

  • <configuration>

    다음은 첫 번째 <descriptor> 설정을 예로 들어 설명한 것으로 <descriptor>의 설정에 의해 DD에 실제적으로 수정되는 사항에 대한 설명이다.

    • 첫 번째 <descriptor>는 앞서 언급했듯이 Standalone EJB 모듈의 표준 DD를 조작한다. 가정 먼서 수행되는 조작 action은 특정 태그의 대체로써 첫 번째 <configuration>으로 표현되어 있다. 값이 'ByeBean’이라는 <ejb-name> 태그를 값이 'HiBean’인 <ejb-name> 태그로 대체하고 있음을 확인할 수 있다.

    • 두 번째 <configuration>은 값이 'HelloHomeLocal’인 <local-home> 태그의 삭제를 표현한다.

    • 세 번째 <configuration>은 두 번째 <session> 태그의 last child로써 <transaction> 태그를 추가함을 표현한다.

    • 네 번째 <configuration>은 <ejb-name> 태그의 값이 'HelloBean’인 <session> 태그의 previous sibling으로써 <session-type> 태그를 삽입함을 표현한다.

5.2. Deployment Plan Install

Deployment Plan을 이용하여 deploy를 하기 위해서는 우선 Deployment Plan을 도메인에 install해야 한다. 애플리케이션과 유사하게 Deploy에 이용할 수 있는 Deployment Plan 또한 도메인에 install된 것들에 한한다. Deployment Plan을 install할 때는 도메인에서의 Deployment Plan의 식별자를 설정할 수 있다.

Deployment Plan은 콘솔 툴을 사용해서 install할 수 있다.

콘솔 툴 사용

콘솔 툴에서 install-deployment-plan 명령어를 통해 Deployment Plan을 install할 수 있다.

[MASTER]domain1.adminServer>install-deployment-plan -path /home/user1/plans/jeus-deployment-plan.xml -name plan1
Installing the deployment plan [plan1] was successful.

install-deployment-plan 명령의 사용 방법에 대한 자세한 내용은 JEUS Reference 안내서의 install-deployment-plan을 참고한다.

5.3. Install한 Deployment Plan 확인

콘솔 툴을 사용해서 Install한 Deployment Plan을 확인할 수 있다. 각각의 Deployment Plan은 install할 때 설정한 Deployment Plan의 식별자로 구분되며 Deployment Plan별로 그것이 적용된 애플리케이션 목록이 표시된다. Deployment Plan의 실제 파일 내용도 화면에 출력할 수 있다.

콘솔 툴 사용

콘솔 툴에서 deployment-plan-info 명령어를 통해서 도메인에 install한 Deployment Plan이 적용된 애플리케이션의 목록을 조회할 수 있고, 특히 특정 Deployment Plan을 지정하면 해당 Deployment Plan의 내용을 화면에서 확인할 수 있다.

  • Deployment Plan의 목록 조회

    [MASTER]domain1.adminServer>deployment-plan-info
    The list of deployment plans installed in the domain and the applications to which each deployment plan applies
    ===========================================================
    +------------------------------------------+--------------+
    |              Deployment plan             | Applications |
    +------------------------------------------+--------------+
    | plan1                                    |              |
    +------------------------------------------+--------------+
    ===========================================================
  • 특정 Deployment Plan의 내용 조회

    [MASTER]domain1.adminServer>deployment-plan-info -name plan1
    <?xml version="1.0" encoding="UTF-8"?>
    <jeus-deployment-plan xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
       ...
    </jeus-deployment-plan>

deployment-plan-info 명령 사용 방법에 대한 자세한 내용은 JEUS Reference 안내서의 deployment-plan-info를 참고한다.

5.4. Deployment Plan을 적용한 Deploy

콘솔 툴을 사용해서 Install한 Deployment Plan을 적용하여 Deploy를 수행할 수 있다.

콘솔 툴 사용

콘솔 툴에서 deploy-application 명령어를 통해 Deployment Plan을 사용한 Deploy를 수행할 수 있다.

[MASTER]domain1.adminServer>deploy-application webapp -all -plan plan1
deploy the application for the application [webapp] succeeded.

5.5. 애플리케이션에 적용된 Deployment Plan 확인

콘솔 툴을 사용해서 임의의 애플리케이션에 어떤 Deployment Plan이 적용되었는지 확인할 수 있다.

콘솔 툴 사용

콘솔 툴에서 application-info 명령어를 통해 애플리케이션에 적용된 Deployment Plan을 확인할 수 있다.

[MASTER]domain1.adminServer>application-info -id webapp -detail
Application information for the domain [domain1].
================================================================================
+------+-------+-----+------+-------+--------------+----------+----------+-----+
| Appli| Applic|State|Server|Cluster|    Running   | Applicati| Applicati| Plan|
|cation| ation |     |Target|Targets|   Servers    | on Path  | on Time  |Name |
|  ID  | Type  |     |  s   |       |              |          |          |     |
+------+-------+-----+------+-------+--------------+----------+----------+-----+
|webapp| WAR   | RUNN| ALL  | ALL   | server1,serve| ${INSTALL| Tue May  |plan1|
|      |       |ING  |      |       |r2,server3,adm|HOME}/web|28        |     |
|      |       |     |      |       |inServer      |app/deploy|22:45:13  |     |
|      |       |     |      |       |              |ment_plan|KST 2013  |     |
|      |       |     |      |       |              |web.war   |          |     |
+------+-------+-----+------+-------+--------------+----------+----------+-----+
================================================================================

5.6. Deployment Plan Uninstall

콘솔 툴을 사용해서 Deployment Plan을 도메인에서 uninstall할 수 있다. Uninstall된 Deployment Plan은 도메인에서 더 이상 유효하지 않으며 당연히 deploy할 때도 사용할 수 없다.

콘솔 툴 사용

콘솔 툴에서 uninstall-deployment-plan 명령어를 통해 Deployment Plan을 uninstall할 수 있다.

[MASTER]domain1.adminServer>uninstall-deployment-plan plan1
Uninstalling the deployment plan was successful.

uninstall-deployment-plan 명령의 사용 방법에 대한 자세한 내용은 JEUS Reference 안내서의 uninstall-deployment-plan을 참고한다.

5.7. Deployment Plan Redeploy

Deployment Plan을 이용해서 deploy한 애플리케이션은 redeploy할 때 기본적으로 기존의 Deployment Plan이 그대로 적용된다. 그러나 redeploy할 때 Deployment Plan을 새롭게 설정하면 새로운 Deployment Plan을 적용하여 redeploy할 수 있다.