728x90
반응형

JBoss Tech Tips #1 JBoss 어플리케이션 디플로이 경로

 

JBoss에서 어플리케이션 디플로이 관련 사항은 conf/jboss-service.xmlDeploymentScanner 서비스에서 설정합니다.

 

 

<!-- ==================================================================== -->

  <!-- Deployment Scanning                                                  -->

  <!-- ==================================================================== -->

  <!-- An mbean for hot deployment/undeployment of archives.   -->

   <mbean code="org.jboss.deployment.scanner.URLDeploymentScanner"

      name="jboss.deployment:type=DeploymentScanner,flavor=URL">

<attribute name="URLComparator">org.jboss.deployment.DeploymentSorter</attribute>

<attribute name="FilterInstance"

         attributeClass="org.jboss.deployment.scanner.DeploymentFilter"

         serialDataType="javaBean">

         <!-- Files starting with theses strings are ignored -->

         <property name="prefixes">#,%,\,,.,_$</property>

         <!-- Files ending with theses strings are ignored -->

         <property name="suffixes">#,$,%,~,\,v,.BAK,.bak,.old,.orig,.tmp,.rej,.sh</property>

         <!-- Files matching with theses strings are ignored -->

         <property name="matches">.make.state,.nse_depinfo,CVS,CVS.admin,RCS,RCSLOG,SCCS,TAGS,core,tags</property>

      </attribute>

 

<!-- Frequency in milliseconds to rescan the URLs for changes -->

      <attribute name="ScanPeriod">5000</attribute>

 

      <!-- A flag to disable the scans -->

      <attribute name="ScanEnabled">true</attribute>

<attribute name="URLs">

         deploy/

      </attribute>

<attribute name="RecursiveSearch">True</attribute>

   </mbean>

 

 

어플리케이션 디플로이 경로는 URLs 항목에 설정되며, 디폴트로 deploy/가 설정되어 있습니다.

이에 따라 ${JBOSS_HOME}/server/<profile>/deploy 디렉토리 하위에 있는 압축된 어플리케이션 패키지 또는 expanded application들이 JBoss 기동시 자동으로 디플로이됩니다.

 

참고) 어플리케이션 디플로이의 2가지 형태

1.       어플리케이션을 EAR, JAR (EJB), WAR와 같은 압축 파일로 묶어 디플로이

2.       EAR, JAR (EJB), WAR를 동일한 패키지명의 디렉터리에 압축이 풀린 상태로 디플로이 (= 디렉터리 디플로이)

이 때 해당 어플리케이션을 expanded application이라 부름

 

 

대다수의 고객은 어플리케이션을 JBoss 하위 디렉터리에 두기보다는 별도의 어플리케이션 디렉터리를 가져가는 것을 선호합니다.

이런 고객들은 어플리케이션 디렉터리 뿐만 아니라 서버와 어플리케이션의 로그 디렉터리도 별도의 파티션으로 가져가는 경우가 많습니다.

 

만약 고객이 /app/web 디렉터리에다 어플리케이션을 배치하기를 원한다면 URLs를 다음과 같이 설정합니다.

<attribute name=URLs>

deploy/, /app/web/

</attribute>

 

이 경우, deploy 디렉터리와 마찬가지로 /app/web 디렉터리 아래의 어플리케이션 패키지와 expanded application이 자동으로 디플로이됩니다.

그런데, 위와 같이 설정 후 JBoss 기동시 어플리케이션을 디플로이하다 에러가 발생하는 경우가 있습니다.

이럴 때, /app/web 디렉터리 아래에 어플리케이션의 백업본이 있는 경우가 많습니다.

DeploymentScanner 서비스는 URLs에 설정된 경로를 recursive하게 다 뒤지기 때문에 단순히 backup 디렉터리를 만들고 그 하위에 어플리케이션을 백업해두면 디플로이를 시도하게 됩니다.

 

이런 경우를 방지하려면 실제 사용할 어플리케이션의 경로만 URLs에 등록하는 것이 좋습니다.

만약 /app/web 아래에 sso.warwebapp1.warexpanded application으로 존재한다면 URLs에 다음과 같이 설정합니다.

<attribute name=URLs>

deploy/, /app/web/sso.war, /app/web/webapp1.war

</attribute>

(*) 두 경우의 차이점은 경로명 끝에 /가 있느냐 없느냐임

    Scanning 경로를 설정할 때는 끝에 /를 붙임

    Expanded application 경로를 설정할 때는 끝에 /를 붙이지 않음

 

그런데, 위와 같이 URLsexpanded application 경로를 명시한 경우에는 해당 applicationdeployment descriptor의 시간을 touch로 변경해도 리디플로이가 되지 않습니다.

(*) 통상 운영서버에서는 hot deploy를 사용하지 말 것을 권고합니다. 따라서, 리디플로이가 안되는 것이 큰 문제가 되지는 않습니다.

     참고로 Hot deploy를 사용하지 않을 때는 ScanEnabledfalse로 합니다.

 

리디플로이가 필요한 경우에는 수동으로 해줘야 하는데 이에 대해서는 JBoss Tips #2에서 다룹니다.

 

 

정리

URLs 항목은 , (comma)로 분리된 경로 리스트를 설정합니다.

경로로는 디렉터리 패쓰 또는 패키징된 파일의 패쓰를 설정합니다.

디렉터리의 경우 경로명이 /로 끝나면 어플리케이션 모음을 가지고 있는 것(스캐닝 디렉터리)으로 간주하고, 그렇지 않으면 패키지된 어플리케이션 또는 expanded application의 경로로 간주합니다.

 

예제

- deploy용 디렉터리와 datasource용 디렉터리를 추가

<attribute name="URLs">

       deploy/, mydeploy/, datasources/

</attribute>

 

- helloworld.war 어플리케이션 디렉터리 추가

<attribute name="URLs">

       deploy/, /app/web/helloworld.war

</attribute>

 

- helloworld.war 어플리케이션 디렉터리 추가 (Windows)

<attribute name="URLs">

       deploy/, file:/C:/app/web/helloworld.war

</attribute>

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,