본 장에서는 JEUS에서 제공하는 보안 관리 기능과 리소스 어댑터에 jeus-connector-dd.xml를 추가하는 방법 및 디플로이할 때 유의할 사항 등에 대해 설명한다.
실제 리소스 어댑터 자체에 대한 패키징은 JCA 표준 1.5를 기준으로 "17 Packaging Requirements"을 참고한다.
본 절에서는 JEUS가 리소스 어댑터의 인증 및 권한 체크와 관련하여 어떤 기능을 제공하는지 설명한다. 그러나 보안(Security) 관련 지원은 아직 사용자의 요구 사항이 많지 않은 관계로 사용자명과 패스워드를 기반으로 한 커넥션 인증 기능만 제공하고 있다. 이 부분은 차기 버전에서 보완될 것이다.
JCA 표준에 명시된 바와 같이 ejb-jar.xml, web.xml 등에 기술된 내용을 바탕으로 커넥션 인증을 누가할 것인지 판별하게 된다.
<resource-ref>
<res-ref-name>jca/pool</res-ref-name>
<res-type>javax.resource.cci.ConnectionFactory</res-type>
<res-sharing-scope>Unshareable</res-sharing-scope>
<res-auth>Container</res-auth>
</resource-ref>
각 애플리케이션 컴포넌트 별로 인증 역할을 컨테이너가 담당할지 애플리케이션이 담당할지 설정한다. (기본값 : Container)
Container
컨테이너에 의한 커넥션 인증으로 <res-auth>의 값으로 'Container'를 설정한 경우에는 jeus-connector-dd.xml에 사용자명과 패스워드를 설정한다. 이때 패스워드에는 암호화된 값을 사용할 수 있다.
예를 들어 다음과 같이 설정할 수 있다.
{DES}FQrLbQ/D8O1lDVS71L28rw==
이렇게 설정한 사용자명과 패스워드 정보는 커넥션을 새로 만들 때 리소스 어댑터로 넘겨주는 인증 정보로 사용하게 된다. 만약 사용자가 jeus-connector-dd.xml에 아무런 인증 정보를 설정하지 않았을 경우에는 빈 껍데기의 javax.security.auth.Subject 객체를 리소스 어댑터로 넘겨준다. 패스워드 암호화에 대한 자세한 사항은 “JEUS Server 안내서”의 “제5장 Security 관리”를 참고한다.
Application
<res-auth>의 값으로 'Application'을 설정한 경우에는 애플리케이션이 커넥션을 요청할 때 JEUS는 커넥션 인증에 관여하지 않는다. 대신 애플리케이션과 리소스 어댑터 간에 인증 정보를 주고받게 된다. 그 정보는 보통 javax.resource.spi.ConnectionRequestInfo를 구현한 리소스 어댑터의 클래스를 이용하게 된다.
리소스 어댑터를 JEUS에 디플로이하기 위해서는 ra.xml 이외에 JEUS에서 필요로 하는 별도의 DD로 jeus-connector-dd.xml파일을 생성해야 한다.
이 파일에는 다음과 같은 내용이 설정된다.
Work Manager 설정: “3.1.2. Work Manager 설정”
아웃바운드 Connection Pool 설정: “2.1.4. Connection Pool 설정”
설정한 후 rar 파일의 META-INF 디렉터리에 jeus-connector-dd.xml을 위치시킨다.
xxx.rar/META-INF
<module-name>은 더 이상 사용하지 않는다. 기본적으로 모듈 이름은 파일 이름에서 확장자를 제외한 나머지 부분으로 사용한다. 예를 들어, 리소스 어댑터 모듈의 파일 이름이 samplera.rar이라고 한다면 모듈의 이름은 samplera가 된다. 만약 이를 직접 지정하고 싶은 경우에는 Deploy 명령에서 옵션을 주거나 JEUSMain.xml 상에 <application> 태그로 리소스 어댑터를 등록하고 <name> 태그를 사용한다.
리소스 어댑터는 다음과 같이 2가지 형태로 디플로이가 가능하다.
독립적인(Standalone) 모듈 : JEUS의 모든 애플리케이션에서 사용할 수 있다.
Java EE 애플리케이션(EAR)에 속한 모듈 : EAR 내에서만 사용할 수 있다.
JEUS에서 애플리케이션을 디플로이하는 방법에 관한 자세한 사항은 "JEUS Applications & Deployment 안내서"를 참고한다.
JCA 표준상 독립적인(Standalone) 모듈로 디플로이하는 리소스 어댑터는 모든 애플리케이션이 사용 가능해야 하기 때문에 JEUS에서는 SHARED 모드의 클래스 로딩 방식을 지원한다. 이를 위해서 리소스 어댑터는 사용자의 설정에 관계없이 항상 SHARED 모드로 디플로이 한다.
이때, 리소스 어댑터를 사용할 애플리케이션도 반드시 SHARED 모드로 디플로이를 해야 한다. SHARED 모드의 클래스 로딩 방식의 자세한 사항은 “JEUS Server 안내서”의 “1.5. Class Loader의 구조”를 참고하고, 디플로이하는 방법의 자세한 사항은 "JEUS Applications & Deployment 안내서"를 참고한다.
다음의 JEUSMain.xml 예제는 애플리케이션을 SHARED 모드로 등록하는 방법이다.
<application>
<name>foo</name>
<absolute-path>c:\myapps\MyJ2eeApp.ear</absolute-path>
...
<deployment-type>EAR</deployment-type>
<classloading>SHARED</classloading>
...
<ejb-component>
<uri>myejbs/ejbModuleA.jar</uri>
...
</ejb-component>
</application>
리소스 어댑터는 일종의 JDBC 드라이버처럼 JEUS에 등록된다. JDBC 드라이버의 경우에는 JEUS_HOME/lib/datasource 아래에 jar 파일을 두면 서버의 클래스 패스로 등록되는 방식이다. 그래서 중간에 jar 파일을 교체해도 제대로 반영이 되지 않기 때문에 JEUS를 Shutdown해야 한다.
그러나 리소스 어댑터는 JEUS에서 관리하는 애플리케이션이기 때문에 JEUS를 Shutdown하지 않고 리소스 어댑터의 버전 업그레이드를 할 수 있고 Redeploy가 가능하다.
다음은 Redeploy할 때 제약 사항이다.
리소스 어댑터 모듈을 Redeploy할 때는 그것을 사용하는 애플리케이션들을 모두 Redeploy해야 한다.
기존의 리소스 어댑터를 사용하고 있던 애플리케이션들은 이미 클래스를 Cache하고 있기 때문에 Redeploy한 리소스 어댑터의 클래스들을 찾지 않는다.
현재 JEUS에서는 SHARED 모드로 디플로이한 EJB 모듈을 Redeploy할 경우 그것을 사용하던 웹 모듈도 모두 자동으로 Redeploy한다. 그러나 리소스 어댑터 모듈에 대해서는 아직 자동 Redeploy를 지원하지 않고 있으므로 수동으로 해야 한다.