메뉴 건너뛰기

tnt_os

jboss JBoss Hot Deploy , 핫 디플로이 설정

구퍼 2009.10.19 17:47 조회 수 : 7357

JBoss는 최초 설치 시 기본적으로 Hot Deploy를 지원하도록 설정이 되어 있다.

그래서, 아래 디렉토리에 war 파일을 넣고 빼는 것 만으로도 웹 애플리케이션이 Deploy 되고 Undeploy 된다.

 

- $JBOSS_HOME/server/default(실제 구동 컨테이너)/deploy/

 

Hot Deploy에 대한 설정은 아래 파일에서 변경할 수 있다.

 

- $JBOSS_HOME/server/default(실제 구동 컨테이너)/conf/jboss-service.xml

 

<server>
   ......
   <mbean code="org.jboss.deployment.scanner.URLDeploymentScanner"
      name="jboss.deployment:type=DeploymentScanner,flavor=URL">
      ......
      <attribute name="ScanEnabled">true</attribute>
      ......
   </mbean>
</server>

 

ScanEnabled를 true로 설정하면 스캐너가 /deploy 디렉토리를 스캔하여 Hot Deploy 를 하게 되고,

이 값을 false로 설정하면 스캔을 하지 않으며 당연히 Hot Deploy도 되지 않는다.

 

여기서, 한 가지 중요한 점이 있다.

위의 Hot Deploy는 /WEB-INF/classes와 /WEB-INF/lib/*.jar의 변화를 무시한다는 점이다.

즉, 웹애플리케이션과 JSP의 변화에 대해서는 Hot Deploy가 되지만,

Class와 JAR 파일은 Hot Deploy가 되지 않는다.

 

Class와 JAR 파일을 Hot Deploy 하기 위해서는 아래 파일에 설정을 추가하여야 한다.

 

- $JBOSS_HOME/server/default(실제 구동 컨테이너)/deploy/jbossweb-tomcat55.sar/context.xml (JBoss 4.0.x 이하)

  $JBOSS_HOME/server/default(실제 구동 컨테이너)/deploy/jboss-web.deployer/context.xml (JBoss 4.2.x 이상)

 

<Context cookies="true" reloadable="true" crossContext="true">
      ......
</Context>


기본 설정은 attribute 자체가 없으므로 추가를 하면 된다.

reloadable을 true로 설정하면 Class나 JAR 변경 시 Hot Deploy가 된다.

 

여기에 하나의 문제가 더 있다.

현재 업무에서 사용하는 환경이 JBoss 4.0.3이고, war 파일은 Symbolic Link를 사용하고 있다.

그런데 위와 같이 reloadable을 true로 설정하고 클래스를 변경하면,

Exception이 발생하면서 Hot Deploy가 실패를 한다.

 

여기 저기 인터넷을 뒤져보니 대략 원인이 두 가지로 압축된다.

첫째는 Symbolic Link의 사용이다.

Symbolic Link를 사용하지 않고 등록한 war는 Class에 대해 Hot Deploy가 된다.

또, 다른 원인은 4.0.3에 있는 RunAsListener의 버그때문일 수도 있을 것 같다.

 

[JBAS-2387] - RunAsListener should fail gracefully when it has no associated metadata

(https://jira.jboss.org/jira/browse/JBAS-2387)

 

Servlet의 init/destory event에 대한 핸들러인데

로컬에서 동일한 버전으로 Hot Deploy 테스트 시에는 문제가 없었으나,

Symbolic Link를 사용하는 서버에서는 문제가 발생한다.

 

테스트 여건이 안되서 더 확인은 못했지만,

war 파일을 Symbolic Link를 사용하지 않고 /deploy 디렉토리 하위에 직접 넣거나,

아님 RunAsListener 버그가 Fix된 4.0.3SP1 이상의 JBoss를 사용하면 해결이 될 것 같다.

위로