애플리케이션 작성 및 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한다.
다음의 순서로 애플리케이션을 작성한다.
-
EAR 파일에 포함될 모듈을 작성한다.
-
JAR, WAR, RAR 파일과 같은 디렉터리에서 META-INF 디렉터리를 생성한다.
-
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>
-
다음과 같이 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하는 과정에 대한 설명이다.
-
도메인에 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].
-
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>
|
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가지 중 하나가 될 수 있다.
|
state |
애플리케이션이 도메인에서의 상태로 다음 4가지 중 하나가 될 수 있다.
각 상태에 대한 자세한 설명은 애플리케이션 상태를 참고한다. |
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을 참고한다. |