Ear 패키징을 할 때 주의해야 할 점은 hot deploy가 가능하도록 해야한다.
어설프게 구성하다보면 hot deploy가 잘 안된다. 이미 로딩되어 있는 클래스와 쫑나기 때문인데
이를 회피하기 위해서는 J2ee서버의 Class Loader의 메커니즘을 잘 이해해야 한다.

이에 대한 공부는 별도로 해야할 것 같다. 내용이 좀 많다.
여기서는 기본적인 룰만 설명한다.

EAR
  META-INF
    application.xml
    jboss-app.xml (j2ee 서버들 마다 다를 것 )
  tricia-ejb.jar
  tricia-web.war

application.xml의 내용은
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd"
             version="1.4">

    <module>
      <ejb>tricia-ejb.jar</ejb>
    </module>
  <module>
  <web>
   <web-uri>tricia.war</web-uri>
   <context-root>/</context-root>
  </web>
 </module>
</application>


여기서 ejb의 인터페이스는 ear 패키징에 넣으면 안된다.
별로의 자바 패키징 .jar로 만들어서 따로 deploy 시킨다.
즉, Jboss의 경우에는 deploy 폴더에 
EAR 패키징한 tricia.ear 과 JAR 패키징한 tricia-classes.jar 가 따로 deploy 되어 있으며
tricia.ear에는 tricia-classes.jar에 포함된 클래스가 절대 포함되어서는 안된다.

즉, 인터페이스만 별도로 구성하는 것이며 필요하다면 이 인터페이스를 EJB 클라이언트에게 주어도 된다.

이렇게 해놓으면 ear이 새롭게 deploy 되어도 , JAR 패키징에 포함된 녀석은 새롭게 deploy 된게 아니기 때문에 hot deploy가 잘 될 거다. 그런데 만약 ear 이 새롭게 deploy될때 jar 패키징에 포함된 녀석이 함께 들어가는 순간....망하는 거지.
 


Posted by
,