제3장 애플리케이션 작성 및 Deploy

내용 목차

3.1. 애플리케이션 작성
3.2. WebAdmin을 이용한 Deploy
3.2.1. 애플리케이션 관련 메뉴
3.2.2. Runtime Deploy
3.2.3. Boot-time Deploy
3.3. 콘솔 툴을 이용한 Deploy
3.3.1. 애플리케이션 관련 명령어
3.3.2. Runtime Deploy
3.3.3. Boot-time Deploy
3.3.4. Auto Deploy
3.4. Ant Task를 이용한 Deploy
3.4.1. build.xml
3.4.2. build.xml 예제
3.4.3. Ant Task의 실행 과정
3.5. Auto Deploy
3.5.1. 디렉터리를 Auto Deploy Home으로 사용
3.5.2. 특정 애플리케이션에 대한 Auto Deploy

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

3.1. 애플리케이션 작성

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

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

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

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

  • helloear.ear 파일은 “johan”이라는 노드에 디플로이되며, 엔진 컨테이너의 이름은 “johan_container1”이다. 이 엔진 컨테이너는 EJB 엔진과 서블릿 엔진을 포함하고 있다.

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

  1. EAR 파일에 포함될 jar, war, rar 파일을 작성한다.

  2. jar, war, rar 파일과 같은 디렉터리에서 META-INF 디렉터리를 생성한다.

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

    <?xml version="1.0" encoding="UTF-8"?>
    <application version="5" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
            http://java.sun.com/xml/ns/javaee/application_5.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 유틸리티를 사용해서 명령을 실행하면 helloear.ear 파일이 생성된다.

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

    주의

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

3.2. WebAdmin을 이용한 Deploy

WebAdmin은 JEUS를 전반적으로 관리하기 위해 제공되는 웹 기반의 관리 툴이다.

3.2.1. 애플리케이션 관련 메뉴

다음은 WebAdmin의 JEUS 노드 트리 화면이다.

[그림 3.1] WebAdmin의 JEUS 노드 트리

WebAdmin의 JEUS 노드 트리

WebAdmin에서 애플리케이션과 관련된 3가지 메뉴는 다음과 같다.

  • 어플리케이션 모듈

  • 어플리케이션 모듈 디플로이

  • 영구 모듈

어플리케이션 모듈

어플리케이션 모듈은 디플로이된 애플리케이션의 정보를 조회한다. JEUS 노드 트리에서 각 엔진 컨테이너 하위에 존재한다.

다음은 어플리케이션 모듈 화면이다.

[그림 3.2] 어플리케이션 모듈 화면

어플리케이션 모듈 화면

어플리케이션 모듈은 다음과 같은 기능을 제공한다.

기능설명
설정애플리케이션의 Deploy Descriptor(표준 DD와 JEUS DD)를 확인할 수 있다. xml 형식의 텍스트로 출력된다.
통계애플리케이션의 통계 정보를 조회한다.
제어애플리케이션에 대해 시작(start), 정지(stop), 제거(undeploy) 명령을 실행한다.

어플리케이션 모듈 디플로이

어플리케이션 모듈 디플로이는 애플리케이션을 디플로이할 수 있는 기능을 제공한다. Runtime Deploy와 Boot-time Deploy를 지원한다. Runtime Deploy와 Boot-time Deploy에 대한 자세한 내용은 각각 “3.2.2. Runtime Deploy”“3.2.3. Boot-time Deploy”를 참고한다.

다음은 어플리케이션 모듈 디플로이 화면이다.

[그림 3.3] 어플리케이션 모듈 디플로이 화면

어플리케이션 모듈 디플로이 화면

영구 모듈

영구 모듈어플리케이션 모듈 디플로이의 하위 메뉴로, JEUSMain.xml의 <application> 태그에 등록되어 있는 애플리케이션의 설정을 조회한다.

[그림 3.4] 영구 모듈 화면

영구 모듈 화면


3.2.2. Runtime Deploy

WebAdmin을 이용하여 애플리케이션을 Runtime Deploy할 수 있다.

WebAdmin에서 디플로이를 실행하려면 JEUS 노드 트리어플리케이션 모듈 디플로이를 선택한다.

어플리케이션 모듈 디플로이 화면([그림 3.3])은 다음과 같이 일정한 순서에 의해 구성되어 있는 wizard 형식의 5개의 탭으로 구성되어 있고, 각 탭의 순서에 따라 Runtime Deploy 과정을 진행한다.

  1. 모듈 선택

  2. 대상 선택

  3. 선택 사항

  4. 디플로이

  5. 결과

[모듈 선택], [대상 선택], [선택 사항], [디플로이] 탭은 디플로이 설정 및 직접 디플로이를 실행하는 과정이고, [결과] 탭은 디플로이 실행 후 에러 상황에 대해서만 리포트한다.

모듈 선택

디플로이할 애플리케이션 또는 모듈을 선택한다. 애플리케이션은 어플리케이션 모듈 디플로이 화면에서 [모듈], [절대 경로], [파일 업로드] 탭을 이용한 3가지 방법으로 선택할 수 있으며, 반드시 하나 이상의 애플리케이션을 선택해야 한다.

다음은 모듈 선택 방법에 대한 설명이다.

참고

여러 개의 애플리케이션을 선택하는 경우에는 선택한 애플리케이션을 모두 동일한 설정으로 디플로이할 경우에 사용된다.

  • [모듈]

    [모듈] 탭에서는 애플리케이션 홈 디렉터리 또는 사용자가 선택한 디렉터리 내에 존재하는 모듈의 리스트를 보여주고, 사용자가 직접 선택을 할 수 있도록 한다.

    모듈 이름과 경로를 확인할 수 있으며, 해당 애플리케이션의 디플로이 여부도 알 수 있다. 모듈 이름란은 텍스트 박스로 되어있어, 모듈 이름을 별도로 주고 싶을 때는 변경이 가능하다.

    • 어플리케이션 홈

      JEUS의 APP_HOME에 위치한 애플리케이션을 보여준다.

      [그림 3.5] WebAdmin을 이용한 Runtime Deploy - 모듈 선택 : 모듈 - 어플리케이션 홈

      WebAdmin을 이용한 Runtime Deploy - 모듈 선택 : 모듈 - 어플리케이션 홈

    • 디렉토리 선택

      표 위에 있는 디렉터리 탐색 기능을 이용하여 특정 디렉터리에 있는 애플리케이션 모듈을 찾아볼 수 있다.

      [그림 3.6] WebAdmin을 이용한 Runtime Deploy - 모듈 선택 : 모듈-디렉토리 선택

      WebAdmin을 이용한 Runtime Deploy - 모듈 선택 : 모듈-디렉토리 선택

  • [절대 경로]

    [절대 경로] 탭에서는 사용자가 직접 애플리케이션의 절대 경로를 입력하여 모듈을 선택한다.

    [그림 3.7] WebAdmin을 이용한 Runtime Deploy - 모듈 선택 : 절대 경로

    WebAdmin을 이용한 Runtime Deploy - 모듈 선택 : 절대 경로

  • [파일 업로드]

    [파일 업로드] 탭에서는 로컬에 있는 파일을 JEUS 서버로 업로드 한다. [찾아보기...] 버튼을 클릭하면 탐색창이 나타나면서 쉽게 파일을 찾을 수 있다. 해당 파일은 애플리케이션 홈 라인에 선택된 JEUS 애플리케이션 디렉터리로 업로드된다.

    [그림 3.8] WebAdmin을 이용한 Runtime Deploy - 모듈 선택 : 파일 업로드

    WebAdmin을 이용한 Runtime Deploy - 모듈 선택 : 파일 업로드

대상 선택

선택한 애플리케이션을 디플로이할 대상을 선택한다. 대상의 단위는 엔진 컨테이너이며, 웹 애플리케이션 모듈인 경우에는 컨텍스트 및 가상 호스트를 추가로 설정할 수 있다.

[그림 3.9] WebAdmin을 이용한 Runtime Deploy - 대상 선택

WebAdmin을 이용한 Runtime Deploy - 대상 선택

선택 가능한 대상에 대한 설명은 다음과 같다.

대상설명
모두현재 가능한 모든 대상을 선택한다.
(노드)해당 노드 전체의 엔진 컨테이너를 대상으로 설정한다.
(엔진 컨테이너)해당 엔진 컨테이너를 대상으로 설정한다.

선택 사항

컴포넌트별 선택 사항이나 애플리케이션 또는 모듈에 공통적으로 적용할 값들을 설정한다.

[그림 3.10] WebAdmin을 이용한 Runtime Deploy - 선택 사항

WebAdmin을 이용한 Runtime Deploy - 선택 사항

  • 컴포넌트별 선택 사항

    선택한 모듈 오른쪽의 를 클릭하면 각 컴포넌트 종류별 선택 사항 화면이 나타난다.

    각 애플리케이션 또는 모듈에 포함된 컴포넌트별 설정을 할 수 있다. 화면에서는 컴포넌트별로 탭 화면으로 나누어져 있다. 탭의 상위에는 각 컴포넌트의 타입을 구분하는 아이콘(모듈 아이콘과 동일)과 컴포넌트의 이름이 표시된다. 원하는 탭을 선택하여 해당 컴포넌트를 설정할 수 있다.

    [그림 3.11] WebAdmin을 이용한 Runtime Deploy - 선택 사항 - 컴포넌트별

    WebAdmin을 이용한 Runtime Deploy - 선택 사항 - 컴포넌트별

  • 공통 선택 사항

    선택한 모듈 오른쪽의 를 클릭하면 어플리케이션 모듈 선택 사항 화면이 나타난다.

    각 애플리케이션 또는 모듈에 공통적으로 적용될 값을 설정할 수 있다.

    [그림 3.12] WebAdmin을 이용한 Runtime Deploy - 선택 사항 - 공통 선택 사항

    WebAdmin을 이용한 Runtime Deploy - 선택 사항 - 공통 선택 사항

디플로이

설정한 내용을 바탕으로 애플리케이션 디플로이를 실행한다. 원하는 디플로이 종류를 선택한 후 [다음] 버튼을 클릭하여 디플로이를 진행한다.

[그림 3.13] WebAdmin을 이용한 Runtime Deploy - 디플로이

WebAdmin을 이용한 Runtime Deploy - 디플로이

항목설명
런타임 디플로이Runtime Deploy를 선택하면 디플로이를 바로 실행할 수 있다.
영구적인 디플로이Boot-time Deploy를 설정하는 것이다. 자세한 내용은 “3.2.3. Boot-time Deploy”를 참고한다.

결과

디플로이할 때 문제가 발생했을 경우에 에러 상황에 대한 stack trace 등이 출력되어 문제점을 파악할 수 있다. 디플로이가 성공적으로 완료되었다면, 디플로이 성공 메시지와 함께 해당 애플리케이션이 JEUS 노드 트리어플리케이션 모듈 하위에 나타난다.

3.2.3. Boot-time Deploy

WebAdmin을 이용하여 애플리케이션을 Boot-time Deploy할 수 있다.

Boot-time Deploy는 Runtime할 때 바로 서버에 디플로이하는 것이 아니라, 해당 애플리케이션의 설정을 JEUSMain.xml의 <application>에 등록해 놓았다가 이후 서버(정확하게는 엔진 컨테이너)가 기동될 때 등록된 애플리케이션이 디플로이되는 것이다. 따라서 WebAdmin에서의 Boot-time Deploy는 WebAdmin에서 JEUSMain.xml에 애플리케이션을 등록하는 것이고, WebAdmin을 이용할 경우에는 직접 xml을 다루는 것보다 쉽게 애플리케이션을 등록 및 편집할 수 있다.

Boot-time Deploy 과정은 Runtime Deploy 과정과 거의 유사하다. 차이점은 디플로이를 실행할 경우 해당 애플리케이션 설정을 서버가 아닌 JEUSMain.xml에 보내어 바로 디플로이하는 것이 아니라 파일로 저장한다는 것이다. 따라서 애플리케이션에 대한 설정을 하는 과정(모듈 선택 ~ 선택 사항)까지는 동일하다.

본 절에서는 차이점인 마지막 두 단계에 대해서만 설명하고, 등록된 애플리케이션 설정을 수정하는 방법에 대해서 추가로 설명한다.

디플로이

설정한 내용을 바탕으로 애플리케이션 설정을 JEUSMain.xml에 등록한다. 서버의 상태에 따라 2가지의 경우가 발생한다.

  • 서버가 기동된 경우

    이 경우에는 Runtime Deploy를 하는 경우와 동일한 화면이 나타난다. Boot-time Deploy를 할 경우에는 "영구적인 디플로이" 옵션을 선택하고 [다음] 버튼을 클릭하여 디플로이를 진행한다.

  • 서버가 종료된 경우

    서버가 다운되었기 때문에 Boot-time Deploy만 진행이 가능하다. 따라서 이 경우에는 선택할 수 있는 옵션이 없다.

    [그림 3.14] WebAdmin을 이용한 Boot-time Deploy - 디플로이 : 서버가 종료된 경우

    WebAdmin을 이용한 Boot-time Deploy - 디플로이 : 서버가 종료된 경우

디플로이할 때 문제가 발생했을 경우에 에러 상황에 대한 stack trace 등이 출력되어, 문제점을 파악할 수 있다. 디플로이가 성공적으로 완료되었다면, 디플로이 성공 메시지와 함께 해당 애플리케이션이 JEUS 노드 트리영구 모듈 하위에 나타난다. 이렇게 영구 모듈에 등록된 애플리케이션의 설정은 변경할 수가 있다. 그 내용은 다음과 같다.

  • 영구 모듈

    Boot-time Deploy가 성공적으로 완료된 애플리케이션은 영구 모듈 하위에 나타난다. 이것을 클릭하면 영구 모듈 화면으로 이동하여 설정을 변경하거나 삭제할 수 있다. 영구 모듈 화면은 [개요][설정]의 2개의 탭으로 구성된다.

    • 개요

      JEUSMain.xml에 등록된 이 애플리케이션의 설정을 xml 형식의 텍스트로 보여준다.

      [그림 3.15] 영구 모듈 - 개요

      영구 모듈 - 개요

    • 설정

      이 애플리케이션의 설정을 변경한다. 하나의 테이블은 JEUSMain.xml에서 하나의 <application> 태그에 속한 애플리케이션을 나타낸다. 마지막 컬럼의 아이콘을 클릭하면 해당 애플리케이션 설정을 JEUSMain.xml에서 삭제한다.

      [그림 3.16] 영구 모듈 - 설정

      영구 모듈 - 설정

      첫 번째 컬럼의 아이콘에 마우스 포인터를 위치하면 해당 애플리케이션의 <application> 태그 설정을 보여준다.

      [그림 3.17] 영구 모듈 - 설정 : <application> 설정 보기

      영구 모듈 - 설정 : <application> 설정 보기

      세 번째 컬럼의 아이콘을 클릭하면 애플리케이션을 설정할 수 있다.

      [그림 3.18] 영구 모듈 - 설정 : 애플리케이션 대상 설정하기

      영구 모듈 - 설정 : 애플리케이션 대상 설정하기

      [그림 3.19] 영구 모듈 - 설정 : 애플리케이션 공통 속성 설정하기

      영구 모듈 - 설정 : 애플리케이션 공통 속성 설정하기

      아이콘을 클릭하면 컴포넌트별 속성을 설정할 수 있다.

      [그림 3.20] 영구 모듈 - 설정 : 각 컴포넌트별 선택 사항 설정하기

      영구 모듈 - 설정 : 각 컴포넌트별 선택 사항 설정하기

3.3. 콘솔 툴을 이용한 Deploy

jeusadmin은 JEUS를 직접 관리할 수 있는 콘솔 툴이다. jeusadmin을 통해 JEUS, 엔진 컨테이너 그리고 엔진의 제어 및 모니터링을 할 수 있으며, 애플리케이션을 디플로이할 수도 있다.

본 절에서는 jeusadmin 명령어 중 애플리케이션 디플로이에 관련된 명령어와 이를 통해 애플리케이션을 디플로이하는 방법에 대해서 설명한다.

3.3.1. 애플리케이션 관련 명령어

jeusadmin에는 애플리케이션과 관련된 7개의 명령어가 있다.

본 절에서는 jeusadmin에서 애플리케이션과 관련된 7개의 명령어 중에서 applist 명령어에 대해 설명한다.

[표 3.1] 애플리케이션 관련 명령어

명령어설명
distribute애플리케이션을 디플로이할 수 있도록 배치 대상에 애플리케이션을 복사한다.
deploy

애플리케이션을 디플로이한다.

디플로이란 디플로이 대상에 애플리케이션을 복사하고(distribute), 애플리케이션의 서비스를 시작(start)하는 것이다.

디플로이가 성공적으로 완료되면 running 상태가 되며, distribute 완료 후 서비스 단계에서 장애가 발생하면 failed 상태가 된다.

startstopped 또는 failed 상태에 있는 애플리케이션을 실행한다. 작업이 수행되는 동안에는 starting 상태로, 성공적으로 완료되면 running 상태가 된다.
stoprunning 또는 failed 상태에 있는 애플리케이션을 정지한다. 작업이 수행되는 동안에는 stopping 상태로 성공적으로 완료되면 stopped 상태가 된다.
redeploy디플로이가 완료된 애플리케이션에 변경된 내용이 있는 경우 변경 내용을 반영하여 다시 디플로이한다. 디플로이와 같은 단계로 이루어지며, 각 단계에서의 상태 또한 같다.
undeploy배치 대상에서 애플리케이션을 제거한다.
applist디플로이된 모든 애플리케이션 또는 모듈의 정보를 출력한다.

참고

jeusadmin에 대한 설명 및 각 명령어에 대한 자세한 내용은 JEUS Reference Book”의 “4.2. jeusadmin”을 참고한다.

applist

applist 명령어는 디플로이된 모든 애플리케이션 또는 모듈의 정보를 출력한다.

다음은 applist 실행 예로 calc.jar EJB 모듈을 johan_container1에 성공적으로 디플로이한 경우이다.

[예 3.1] applist 실행 예

johan> applist
name : calc
        type : EJBModule    EngineContainer : johan_container1
        node : johan    state : running

applist 명령어를 사용하여 출력되는 정보는 다음과 같다.

항목설명
name애플리케이션의 이름이다.
type

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

  • J2EEApplication: 애플리케이션

  • EJBModule: EJB 모듈

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

  • ResourceAdapter: 리소스 어댑터 모듈

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

EngineContainer애플리케이션이 배치되어 있는 대상 엔진 컨테이너이다.
node애플리케이션이 배치되어 있는 대상 노드이다.
state애플리케이션의 상태로 5가지(starting, running, stopping, stopped, failed) 중 하나가 될 수 있다. [그림 3.21]을 참고한다.

[그림 3.21] 애플리케이션 상태

애플리케이션 상태


3.3.2. Runtime Deploy

jeusadmin을 통한 Runtime Deploy 방법은 다음의 사항을 가정하여 설명한다.

  • 애플리케이션은 “3.1. 애플리케이션 작성”에서 작성한 MyApp.ear을 사용한다.

  • JEUS의 노드 이름은 'johan'이고, 이미 부팅된 'johan_container1'이라는 엔진 컨테이너 1개를 가지고 있다.

  • -absolute-path를 제외한 deploy 명령어의 다른 옵션은 사용하지 않는다.

참고

옵션에 대한 자세한 내용은 JEUS Reference Book”의 “4.2.3.21. deploy”를 참고한다.

JEUS에서는 jeusadmin에서 애플리케이션을 Runtime 디플로이할 경우 애플리케이션의 위치에 따라 다음의 2가지 방법을 제공한다.

  • 디플로이할 애플리케이션을 APP_HOME에 복사한다. 시스템 프로퍼티 jeus.apphome을 설정하여 변경할 수 있다. 이 경우에는 deploy 명령어를 사용할 때 파라미터로 애플리케이션의 이름만 설정하면 된다. 기본적으로 APP_HOME의 위치는 다음과 같다.

    JEUS_HOME/webhome/app_home
  • 디플로이할 애플리케이션을 APP_HOME에 복사하지 않고, 디플로이할 애플리케이션의 경로를 설정한다. 이때는 deploy 명령어 다음 -absolute-path 옵션을 사용하여, 현재 디플로이할 애플리케이션의 절대 경로를 설정한다.

다음은 jeusadmin에서의 Runtime Deploy 예제이다.

[예 3.2] jeusadmin - Runtime Deploy

-------------------------------------------------------------
1. using deploy command for application in APP_HOME
-------------------------------------------------------------
johan>deploy MyApp
using the following application info :
<applicationType>
    <deploy-when-booting>true</deploy-when-booting>
    <path>MyApp.ear</path>
    <deployment-type>EAR</deployment-type>
    <ejb-component>
        <uri>calc.jar</uri>
    </ejb-component>
    <web-component>
        <uri>cookie.war</uri>
    </web-component>
    <deployment-target>
        <all-targets>
        </all-targets>
    </deployment-target>
    <class-ftp-unit>JAR</class-ftp-unit>
</applicationType>

The J2EEApplication, MyApp, is deployed on johan_container1
johan>applist
name : MyApp
    type : J2EEApplication    EngineContainer : johan_container1
    node : johan    state : running

johan>stop MyApp
The J2EEApplication [MyApp] is stopped on the johan_container1

johan>applist
name : MyApp
    type : J2EEApplication    EngineContainer : johan_container1
    node : johan    state : stopped

johan>start MyApp
The J2EEApplication [MyApp] is started on the johan_container1

johan>applist
name : MyApp
    type : J2EEApplication    EngineContainer : johan_container1
    node : johan    state : running

johan>redeploy MyApp
Undeploying J2EEApplication [MyApp] from johan_container1 (This may take time
due to graceful undeployment)
J2EEApplication [MyApp] is undeployed from johan_container1 (elapsed = 59ms)
using the following application info :
<applicationType>
    <deploy-when-booting>true</deploy-when-booting>
    <path>MyApp.ear</path>
    <deployment-type>EAR</deployment-type>
    <ejb-component>
        <uri>calc.jar</uri>
    </ejb-component>
    <web-component>
        <uri>cookie.war</uri>
    </web-component>
    <deployment-target>
        <all-targets>
        </all-targets>
    </deployment-target>
    <class-ftp-unit>JAR</class-ftp-unit>
</applicationType>

johan>applist
name : MyApp
    type : J2EEApplication    EngineContainer : johan_container1
    node : johan    state : running

johan>undeploy MyApp
Undeploying J2EEApplication [MyApp] from johan_container1 (This may take time
due to graceful undeployment)
J2EEApplication [MyApp] is undeployed from johan_container1 (elapsed = 59ms)

johan>applist
there is no module corresponding to the request

-------------------------------------------------------------
2. using deploy command with -absolute-path option
-------------------------------------------------------------
johan>deploy -absolute-path c:\jeus\myApp\MyApp.ear
using the following application info :
<applicationType>
    <deploy-when-booting>true</deploy-when-booting>
    <path>c:\jeus\myApp\MyApp.ear</path>
    <deployment-type>EAR</deployment-type>
    <ejb-component>
        <uri>calc.jar</uri>
    </ejb-component>
    <web-component>
        <uri>cookie.war</uri>
    </web-component>
    <deployment-target>
        <all-targets>
        </all-targets>
    </deployment-target>
    <class-ftp-unit>JAR</class-ftp-unit>
</applicationType>

johan>applist
name : MyApp
    type : J2EEApplication    EngineContainer : johan_container1
    node : johan    state : running

[예 3.2]에서는 deploy, stop, start, redeploy, undeploy의 순서대로 deploy 명령어를 실행하며, 각 명령어를 실행한 뒤에는 applist를 수행하여 각 단계에서의 애플리케이션 상태를 확인한다.

마지막에는 "-absolute-path" 옵션을 사용하여 deploy 명령어를 실행하는 예(나머지 명령어에 대해서도 똑같이 -absolute-path 옵션을 사용하면 된다.)를 보여주고 있다. 이때 애플리케이션은 c:\jeus\myApp 디렉터리 아래에 위치한다고 가정한다.

다음과 같이 각 명령어에 따라 조회되는 정보가 달라진다.

  • deploy, redeploy: 현재 애플리케이션의 설정이 조회된다.

  • start, stop, undeploy: 해당 애플리케이션의 타입, 이름, 디플로이된 엔진 컨테이너 이름과 실행 결과가 조회된다.

3.3.3. Boot-time Deploy

애플리케이션이 Runtime Deploy되는 것을 원하지 않는 경우에는 직접 JEUSMain.xml에 애플리케이션을 등록하거나 WebAdmin의 '영구 모듈 등록' 기능을 사용한다.

jeusadmin에서는 [-per] 옵션을 사용하여 JEUSMain.xml에 애플리케이션 설정을 저장할 수 있다. 그러나 -per 옵션을 사용하더라도 먼저 애플리케이션이 Runtime 디플로이된 후에 그 설정을 JEUSMain.xml에 저장한다는 것에 주의한다.

다음의 예제는 jeusadmin에서 [-per] 옵션을 사용하여 deploy 명령을 실행했을 경우이다.

[예 3.3] jeusadmin - Boot-time Deploy

johan>deploy -per MyApp
using the following application info :
<applicationType>
    <deploy-when-booting>true</deploy-when-booting>
    <path>MyApp.ear</path>
    <deployment-type>EAR</deployment-type>
    <ejb-component>
        <uri>calc.jar</uri>
    </ejb-component>
    <web-component>
        <uri>cookie.war</uri>
    </web-component>
    <deployment-target>
        <all-targets>
        </all-targets>
    </deployment-target>
    <class-ftp-unit>JAR</class-ftp-unit>
</applicationType>

다음의 예제는 [예 3.3]에서 deploy 명령이 실행된 후 JEUSMain.xml에 애플리케이션 설정이 저장된 결과이다.

[예 3.4] jeusadmin - Boot-time Deploy 후 <<JEUSMain.xml>>에 애플리케이션 등록

<?xml version="1.0" encoding="UTF-8"?>
<jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    ...
    <!-- in case of using deploy command with -per option,
         the application is registered at <application> element
         in JEUSMain.xml -->
    <application>
        <path>MyApp.ear</path>
        <deployment-type>EAR</deployment-type>
        <ejb-component>
            <uri>calc.jar</uri>
        </ejb-component>   
        <web-component>
            <uri>cookie.war</uri>
        </web-component>
        <deployment-target>
            <all-targets>
            </all-targets>
        </deployment-target>
        ...
    <application>
</jeus-system>

3.3.4. Auto Deploy

jeusadmin은 2가지 Auto Deploy 형태 중에서 애플리케이션에 대한 Auto Deploy 설정 기능만을 제공한다.

본 절에서는 [-auto] 옵션을 사용하여 애플리케이션에 대한 Auto Deploy 설정하는 방법을 설명한다. 자세한 설정은 “3.5. Auto Deploy”을 참조한다.

다음은 jeusadmin에서 [-auto] 옵션을 사용하여 auto-deploy-check-interval 값을 50초로 설정하고 디플로이를 하는 예이다.

[예 3.5] jeusadmin - Auto Deploy

johan>deploy -auto 50000 MyApp
using the following application info :
<applicationType>
    <auto-deploy>
        <auto-deploy-check-interval>5000</auto-deploy-check-interval>
    </auto-deploy>
    <deploy-when-booting>true</deploy-when-booting>
    <path>MyApp.ear</path>
    <deployment-type>EAR</deployment-type>
    <ejb-component>
        <uri>calc.jar</uri>
    </ejb-component>
    <web-component>
        <uri>cookie.war</uri>
    </web-component>
    <deployment-target>
        <all-targets>
        </all-targets>
    </deployment-target>
    <class-ftp-unit>JAR</class-ftp-unit>
</applicationType>

The J2EEApplication, MyApp, is deployed on johan_container1

3.4. Ant Task를 이용한 Deploy

JEUS에서는 Ant를 사용하여 Java EE 애플리케이션 디플로이를 쉽게 할 수 있다. 그러기 위해서는 Ant를 통해 실행해야 할 task를 기술한 Build 파일을 작성해야 한다.

본 절에서는 Build 파일에 기술되어야 할 내용들과 디플로이 Ant Task를 실행하는 과정을 설명한다.

3.4.1. build.xml

build.xml은 Ant Task를 기술한 XML 형식의 Ant Build 파일이다.

Build 파일의 중요한 부분은 <project> 요소에 포함되어 있으며, 일반적으로 1개의 프로젝트에 여러 개의 <target>이 존재한다. <target>은 실제 실행해야 하는 Ant Task 작업을 정의한다. 프로젝트의 속성들은 <project> 하위에 정의하며, ${property-name}의 표현식을 통해 프로젝트 내에서 속성 값들을 사용할 수 있다. JEUS Ant Task에 정의된 작업은 다음과 같다.

  • deploy

    애플리케이션을 디플로이한다. deploy task는 지정한 Java EE 애플리케이션을 JEUS 서버에 배치한다.

    참고

    deploy Task 파라미터에 대한 자세한 내용은 JEUS Reference Book”의 “5.4. Deployment Ant Task”를 참고한다.

  • modulecommand

    디플로이 외에 다른 administrative operation들(start, stop, undeploy)을 실행한다.

    operation설명
    start애플리케이션 시작하기
    stop애플리케이션 정지하기
    undeploy애플리케이션 제거하기

    참고

    modulecommand Task의 파라미터에 대한 자세한 내용은 JEUS Reference Book”의 “5.4. Deployment Ant Task”를 참고한다.

3.4.2. build.xml 예제

다음은 standard.war라는 웹 애플리케이션 모듈을 johan_container1이라는 대상에 디플로이하는 작업에 대한 build.xml의 예제이다.

[예 3.6] <<build.xml>>

<?xml version="1.0"?>

<project name="example" default="deploy" basedir=".">
    <property environment="env" />
    <property name="jeus.home" value="${env.JEUS_HOME}"/>
    <property name="jeus.baseport" value="${env.JEUS_BASEPORT}"/>
    <property name="java.library.path"
              value="${java.library.path};${jeus.home}/lib/system"/>

    <property name="node.name" value="johan"/>
    <!-- target.name is the full name of engine container -->
    <property name="target.name" value="johan_container1"/>
    <property name="source.path" value="standard.war"/>
    <!-- module.name is the name of standalone module or EAR application -->
    <property name="module.name" value="standard"/>
    <property name="user" value="jeus"/>
    <property name="password" value="jeus"/>
    <property name="uri" value="deployer:Jeus:${node.name}"/>

    <path id="jeus.libraries">
        <fileset dir="${jeus.home}/lib/system" includes="*.jar"/>
    </path>

    <taskdef resource="jeus/util/ant/jeusant.properties">
      <classpath>
        <path refid="jeus.libraries"/>
      </classpath>
    </taskdef>

    <target name="init">
    </target>

    <target name="deploy" depends ="init">
        <deploy targetNames="${target.name}" 
                deployURI="${uri}"
                modulePath="${source.path}" 
                user="${user}" 
                password="${password}"/>
    </target>

    <target name="undeploy" depends="init">
        <modulecommand command="undeploy"
                       moduleName="${module.name}"
                       targetNames="${target.name}"
                       deployURI="${uri}"
                       user="${user}"
                       password="${password}"/>
    </target>
</project>


3.4.3. Ant Task의 실행 과정

Ant Task의 실행 과정은 다음과 같다.

  1. Java EE 애플리케이션(또는 standalone EJB, 웹 애플리케이션 모듈)을 작성한다.

  2. 작성한 Java EE 애플리케이션에 따라서 build.xml을 작성한다. 필요한 프로퍼티(classpath 및 librarypath 등)들을 설정한다.

  3. 작성된 build.xml 파일로 다음과 같이 Ant Task를 실행한다.

    ant deploy
    ant undeploy

deployment Ant Task를 실행하기 전에는 반드시 ANT_OPTS(환경변수)에 다음을 추가해야 한다.

-Djava.endorsed.dirs=JEUS_HOME\lib\endorsed

3.5. Auto Deploy

본 절에서는 Auto Deploy 설정 방법에 대해 설명한다.

3.5.1. 디렉터리를 Auto Deploy Home으로 사용

특정 디렉터리를 주기적으로 감시하면서 추가 또는 삭제되거나 변경된 애플리케이션을 감지하여 Deploy나 Undeploy나 Redeploy를 자동으로 수행하는 기능이다. 이 디렉터리에 존재하는 애플리케이션들은 엔진 컨테이너 부팅 시 자동으로 디플로이된다. 디플로이는 애플리케이션 이름의 유니코드를 기준으로 숫자, 특수문자, 영문자(알파벳), 한글 순서로 수행된다. 숫자는 작은 수에서 큰 수의 순서를 영문자는 대소문자 구분 없이 알파벳 순서를 따른다.

JEUS에서는 2가지 방법으로 이 기능을 사용할 수 있다.

  • Default Auto Deploy Home

    autodeploy 디렉터리(JEUS_HOME\webhome\autodeploy)는 Default로 동작하는 Auto Deploy Home이다. 이 디렉터리는 모든 엔진 컨테이너에 대하여 Auto Deploy Home으로 동작하며 시스템 프로퍼티인 jeus.deploy.autodeploy.dir을 통해서 변경할 수 있다.

  • JEUSMain.xml에 Auto Deploy Home 설정

    Default Auto Deploy Home 이외에 추가적인 Auto Deploy Home을 설정하고 싶거나 엔진 컨테이너별로 Auto Deploy Home을 설정하고 싶은 경우 JEUSMain.xml을 이용할 수 있다.

    <absolute-path> 태그에 Auto Deploy Home으로 지정할 디렉터리의 절대 경로를 설정하고, <check-absolute-path>는 true로 설정한다. <deployment-target>이 명시되지 않으면 모든 엔진 컨테이너에 대한 Auto Deploy Home으로 동작하며, <deployment-target>이 명시된 경우에는 해당 엔진 컨테이너에 대해서만 Auto Deploy Home으로 동작한다.

    다음은 c:\jeus\applications 디렉터리를 johan_container1 엔진 컨테이너에 대하여 Auto Deploy Home으로 설정하는 예다.

    [예 3.7] <<JEUSMain.xml>>를 통한 Auto Deploy Home 설정

    <?xml version="1.0" encoding="UTF-8"?>
    <jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
        ...
        <application>
            <!-- Auto Deploy Home으로 사용할 디렉터리의 절대 경로를
                <absolute-path>에 지정한다. -->
            <absolute-path>c:\jeus\applications<absolute-path>
            <auto-deploy>
                <!-- 이 태그는 true로 설정해야 한다.-->
                <check-absolute-path>true</check-absolute-path>
                <auto-deploy-check-interval>60000</auto-deploy-check-interval>
            </auto-deploy>
            <!-- Auto Deploy Home이 적용되기 원하는 엔진 컨터이너를 명시한다. -->
            <deployment-target>
                <target>
                    <engine-container-name>johan_container1</engine-container-name>
                </target>
            </deployment-target>
            ...
        <application>
    </jeus-system>

3.5.2. 특정 애플리케이션에 대한 Auto Deploy

특정 애플리케이션의 변경을 감지하여 자동으로 Redeploy를 수행하는 기능이다.

<check-absolute-path> 태그를 false로 설정하면 <absolute-path> 또는 <path>를 통해 결정된 경로에 존재하는 애플리케이션에 대하여 Auto Deploy가 적용된다.

다음은 c:\jeus\applications\MyApp.ear 애플리케이션에 대하여 Auto Deploy를 설정한 예다.

[예 3.8] 애플리케이션에 대한 Auto Deploy 설정

<?xml version="1.0" encoding="UTF-8"?>
<jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    ...
    <application>
        <name>MyApp</name>
        <path>c:\jeus\applications\MyApp.ear</path>
        <deployment-type>EAR</deployment-type>
        <ejb-component>
            <uri>calc.jar</uri>
        </ejb-component>   
        <web-component>
            <uri>cookie.war</uri>
        </web-component>
        <auto-deploy>
            <!-- 이 태그는 false로 설정해야 한다. -->
            <check-absolue-path>false</check-absolute-path>
            <auto-deploy-check-interval>60000</auto-deploy-check-interval>
        </auto-deploy>
        ...
    <application>
</jeus-system>

참고

packaging된 애플리케이션의 경우는 애플리케이션 파일 자체에 대한 변경을 감지하며 디렉터리 모드의 애플리케이션의 경우는 Java EE 표준 DD 파일의 변경을 감지함에 유의한다.