티스토리 뷰

728x90
반응형

JBoss 7(EAP6) 부터 예전 hierarchy classloader가 아닌 modular classloader를 사용한다.


예전과 다른 classloader 방식에, 많은 사람들이 도대체 어떤식으로 library를 클래스로더에 넣을 수 있는지 혼란스러워 한다.


그래서 Database 예를 가지고 일단 아주 기본적인 내용 몇개를 정리해 보려고 한다.


Datasource를 등록하기 위해서는 우선적으로 Vendor사가 제고하는 jdbc library가 필요하다. (ex.오라클은 ojdbc4.jar) 그리고 이 library를 WAS에 좀 더 정확하게 classloader에 올라와 있는 상태에서 DS를 설정이 가능하다.


이를 위해서는 2가지 방법이 있다.

1) ojdbc4.jar를 직접 deploy하기

   ==> 이 방법은 일반 application 디플로이 하는 방식대로 그냥 하면된다..


2) module로 등록한 후 사용하기

  2.1) cli를 이용하는 방법

     2.2.2) module.xml이 있을 경우

./jboss-cli.sh  --command="  module add --name=com.oracle --resources=/home/userone/ojdbc.0.jar --module-xml=/home/userone/module.xml " 


           Ex) module.xml

<module xmlns="urn:jboss:module:1.1" name="com.oracle">
  <resources>
    <resource-root path="ojdbc6.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>



     2.2.3) module.xml이 없을 경우

./jboss-cli.sh --controller=localhost:9999 --command="module add --name=com.oracle --slot=main --resources=/home/userone/ojdbc6.jar --dependencies=javax.api, javax.transaction.api"


  2.2) Manually 설정하기

      ==> 이건 말 그래도 손수 만든다는 말입니다. 따라서 폴더도 손수 만들고 ojdbc6.jar 복사도 하고, module.xml도 만들어야 하죠.


지금까지 library를 어떤 방식으로 EAP에 등록(?)할 수 있는 지에 대한 예제를 봤구요.


이제 EAP 자체에서 사용중인 library 대신 자신의 library를 사용하고 싶을때 또는 특정 Module을 등록하고 이를 EAP에서 사용하고 싶을 경우에 대해서 알아보겠습니다.


이것도 역시 2가지 방법이 있는데요.


1) jboss-deployment-structure.xml 사용하기

   예로 log4j를 적용해보자, EAP는 자체적으로도 logging system을 가지고 있는데 이때 log4j를 사용한다. 그러나 보통 개발을 할때도 logger로 log4j를 많이 사용하는데요. 이때 EAP에서 로딩한 log4j대신 자신의 라이브러리를 사용하고 싶을 때는 jboss-deployment-structure.xml을 사용해야합니다.


EAR 기준의 jboss-deployment-structure.xml 이다.

<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.apache.log4j"/>
</exclusions>
</deployment>
<sub-deployment name="testlog4j.war">
<exclusions>
<module name="org.apache.log4j"/>
</exclusions>
</sub-deployment>
<sub-deployment name="testlog4j2.war">
<exclusions>
<module name="org.apache.log4j"/>
</exclusions>
</sub-deployment>
</jboss-deployment-structure>

 

내용이 참 특이해 보일 수 있다. 왜 이런 구조가 나오느냐 하면 바로 모듈 방식의 classloader이기 때문이다.

EAP 내부의 ejb, war 조차도 모듈로 취급이 되기 때문에 우선 EAR에서 제거하고 각 WAR에서도 제거를 해야하기 때문에 위와 같은 모습이 된다. 물론 각각 WAR안에 조각조각 xml의 내용을 나누어서 넣어도 된다.이건 개인 성향으로~


이 파일은 언제나 혼동이 되는 녀석이기 때문에 차후에 한번 더 딥하게 알아봐야 될듯하다.


2) Global  module로 사용하기

이건 1번과는 좀 다른 내용이다.

예를 들어 내가 사용하는 라이브러리들이 모든 Web application에서 사용하고 싶을 경우에 module로 등록하고 이를 global module로 등록하는것이다.


만약 아래의 것처럼 4개의 jar를 사용하고 싶다고 하자.

<module xmlns="urn:jboss:module:1.1" name="org.jboss.example">
  <resources>
    <resource-root path="security-2.0.jar"/>
    <resource-root path="utils-1.0.jar"/>
    <resource-root path="commons-beanutils-1.7.0.jar"/>
    <resource-root path="commons-collections-3.2.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.persistence.api"/>
    <module name="javax.resource.api"/>
    <module name="javax.security.auth.message.api"/>
    <module name="javax.security.jacc.api"/>
    <module name="org.picketbox"/>
  </dependencies>
</module> 


이런 경우 단순하게 standalone.xml 안에서 아래와 같이 설정해주면 된다.

<subsystem xmlns="urn:jboss:domain:ee:1.1">
...
    <global-modules>
        <module name="org.jboss.example"/>            
    </global-modules>
</subsystem>

 


물론 jboss-deployment-structure.xml을 이용해서도 가능하다.대신 아래와 같이 export="true" 를 줘야한다. 왜? 이렇게 하지 않으면 ear 안의 war,jar가 그 모듈을 볼수 없기 때문이다. 음 자세한 이유는 좀더 파봐야될듯하다 :)


<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <system> <paths> <path name="com/sun/rowset" /> <path name="com/sun/rowset/internal" /> <path name="com/sun/rowset/providers" /> </paths> </system> <module name="org.hibernate" slot="main"/> <module name="org.jboss.example" export="true"/> <module name="deployment.ear-root" export="true"/> </dependencies> </deployment> <module name="deployment.ear-root"> <resources> <resource-root path="META-INF"/> </resources> </module> </jboss-deployment-structure> 



반응형
댓글
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함