본 장에서는 EJB의 구성 요소와 특성 그리고 간단한 설치와 환경설정 방법에 대해서 설명한다.
JEUS는 JSR 220 Enterprise JavaBeansTM(이하 EJB) 3.0을 지원하고 있다. EJB 3.0 표준(이하 EJB 표준)은 복잡하고 중요한 고성능의 비즈니스 로직을 개발할 때 개발자의 노력을 최소화하면서도 이식성이 뛰어난 비즈니스 컴포넌트를 작성할 수 있는 구조를 기술하고 있다.
EJB 3.0에 따르면 EJB를 다음과 같이 정의할 수 있다.
"EJB 아키텍처는 객체지향 분산 엔터프라이즈 애플리케이션의 개발 및 분산 배치를 위한 컴포넌트이다. EJB로 작성된 애플리케이션은 확장성, 트랜잭션 처리 그리고 동시 사용자 처리에 안전하다. EJB 스펙을 준수한 애플리케이션은 한번 작성되면 어떠한 서버 플랫폼에도 배치된다."
JEUS는 위에서 언급한 “서버 플랫폼”의 역할을 담당한다.
본 안내서에서는 JEUS에서 구현한 EJB 구현체와 엔터프라이즈 환경에 필수적인 부가 기능에 대해서 설명한다.
더 자세한 스펙 구현 정보들은 "JEUS 소개"를 참조한다.
JEUS EJB는 클러스터링을 통한 성능과 안정성을 더하기 위하여 JEUS는 표준 외에 2가지 추가 기능을 제공한다.
성능개선을 위한 부하 분산(Load Balancing) 기능
안정성 확장을 위한 Failover 기능
이 기능들을 사용하려면 2개 이상의 노드가 클러스터로 구성되어 있어야 한다. 이때 각 노드의 엔진 컨테이너에는 EJB 엔진이 있어야 한다.
EJB 클러스터링은 “제6장 EJB 클러스터링”를 참고하고, 노드 클러스터링에 관해서는 “JEUS Server 안내서”의 “제4장 JEUS 클러스터링”을 참고한다.
다음은 EJB 구현체의 주요 구성 요소에 대한 그림이다.
EJB 엔진
EJB 3.0에서 설명하는 EJB 컨테이너에 해당하는 것으로 디플로이된 EJB 모듈의 실행 환경을 제공한다. EJB 엔진은 “제2장 EJB 엔진”에서 자세히 설명한다.
EJB 모듈
각각의 EJB 컴포넌트를 그룹화하고 관리할 수 있는 단위이다. JEUS에서는 EJB 컴포넌트를 디플로이하고 제어할 때 EJB 모듈을 기본 단위로 하므로, EJB 모듈은 반드시 하나 이상의 EJB 컴포넌트를 포함하고 있다. EJB 모듈에 대해 자세한 내용은 “제3장 EJB 모듈”에서 설명한다.
EJB 컴포넌트
EJB 모듈 내에 속해 있으며 실제 비즈니스 컴포넌트를 일컫는다. 각 EJB 컴포넌트의 공통 특성은 “제4장 EJB의 공통 특성”을 참고한다.
다음은 EJB 컴포넌트의 5가지 종류이다. 각 종류에 대한 상세한 내용은 각 장을 참고한다.
Stateless Session Bean : “제7장 Session Bean”
Stateful Session Bean : “제7장 Session Bean”
BMP Entity Bean : “제8장 Entity Bean”
CMP 1.1 & CMP 2.x Entity Bean : “제8장 Entity Bean”
Entity Bean은 EJB 3.0부터 JPA로 대체되었으므로 이에 대해서는 "JEUS JPA 안내서"를 참고한다.
JEUS EJB에 관련된 환경설정 요소에 대해 설명한다. 이러한 요소들은 EJB에 관련된 디렉터리 구조와 EJB 설정 파일들, 각종 툴 등으로 구성된다. 또한 EJB와 관련된 시스템 프로퍼티들과 그 특성들도 설명한다.
다음은 JEUS EJB에 관련된 디렉터리들과 파일에 대한 설명이다.
관리자가 EJB를 관리할 때 사용할 수 있는 실행 스크립트들이 저장된다. 여기에는 jeusadmin, appcompiler 등이 있다.
다음과 같은 하위 디렉터리가 있다.
하위 디렉터리 | 설명 |
---|---|
<node name> | 디렉터리는 현재의 JEUS 시스템의 주 설정 디렉터리이다. 이 디렉터리에는 EJB 엔진을 시스템에 추가할 수 있는 JEUSMain.xml이 포함되어 있다. |
<node name>_ejb_<engine name> | <node name> 디렉터리 아래에 위치하고 1개의 EJB 엔진을 설정하는 디렉터리이다. 주 EJB 엔진 설정 파일인 EJBMain.xml 파일이 포함되어 있다. |
하위 디렉터리 | 설명 |
---|---|
javaee | EJB에 관련된 모든 Java EE XML 스키마 파일들이 위치한다. |
jeus | EJB에 관련된 모든 JEUS XML 스키마 파일들이 위치한다. |
EJB 엔진의 로그 설정에 파일 핸들러를 별도로 지정한 경우 <container name> 컨테이너 JVM에 기록되는 EJB 로그만 별도로 모아 놓은 파일들이 생성되는 곳이다. 따라서 EJB 엔진 로그 설정에 따로 파일 핸들러를 지정하지 않으면 <container name> 컨테이너의 로그 설정에 정의된 핸들러를 사용하거나, 컨테이너 로그에도 핸들러가 없는 경우는 노드의 로그 설정을 따르게 된다.
EJB 엔진에 파일 핸들러를 별도로 지정한 경우 JEUS Manager JVM에 남은 EJB 로그만 별도로 모은 파일들이 생성되는 곳이다. 따라서 디폴트 컨테이너의 경우는 노드와 같은 JVM에 동작하기 때문에 여기에 로그 파일이 남게 된다.
여러 종류의 EJB들을 구현해 놓은 예제 코드들과 하위 디렉터리들이 포함되어 있다.
<container name>의 컨테이너에서 사용하는 애플리케이션들의 Archive 파일이 복사되고 이 Archive 파일을 풀어 놓은 디렉터리가 존재하는 장소이다. 애플리케이션의 Archive 파일과 풀린 디렉터리에는 EJB 구현 클래스들과 helper 클래스들이 포함되어 있다.
디렉터리 목록에서 사용된 “<”, “>” 표현(예: '<node name>\')은 그 사이에 사용된 문자들은 실제 시스템 설정 값으로 대체되어야 한다. 예를 들어, 실제 시스템이 'johan'이라면 JEUS 노드는 'johan'이라고 값이 설정되어야 한다. 그러므로, '<node name>\' 표현은 실제 시스템에서 'johan\' 디렉터리로 대체되어야 한다.
다음 XML 설정 파일들은 JEUS EJB의 관리와 설정에 관련된 것들이다.
XML 스키마 파일들은 JEUS_HOME\lib\schemas\jeus\ 디렉터리에 위치한다. 헤더 파일들의 내용은 반드시 표준, 즉 JEUS에서 정의된 XML 헤더로 시작되어야 한다. 또한 Root Element는 JEUS XML 스키마의 namespace를 기존 name-space로 지정해야 한다.
EJB 엔진의 등록은 이 파일에서 설정해야 한다. 자세한 설명은 "JEUS Server 안내서"와 “제2장 EJB 엔진”을 참고한다.
위치
JEUS_HOME\config\<node name>\
헤더
<?xml version="1.0"?> <jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus" version="6.0">
주 EJB 엔진에 대한 설정 파일이다. 자세한 설명은 “제2장 EJB 엔진”을 참고한다.
위치
JEUS_HOME\config\<node name>\<node name>_ejb_<engine name>\
헤더
<?xml version="1.0"?> <ejb-engine xmlns="http://www.tmaxsoft.com/xml/ns/jeus" version="6.0">
주 EJB 엔진 설정 파일이다. 자세한 설명은 EJB 3.0 스펙을 참고한다.
위치
META-INF\ 표준 JAR 파일 내의 구조
헤더
헤더는 EJB 표준에 포함되어 있다.
<?xml version="1.0"?> <ejb-jar version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
jeus-ejb-dd.xml (jeus-ejb-dd.xsd)
JEUS EJB 모듈을 위한 JEUS DD 정보를 설정한다. 자세한 설명은 “제3장 EJB 모듈”을 참고한다.
위치
META-INF\ 표준 JAR 파일 내의 구조
헤더
<?xml version="1.0"?> <jeus-ejb-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus" version="6.0">
본 안내서에서 사용되는 모든 태그 순서는 XML 스키마의 설정 순서대로 작성되어 있다. 태그 순서는 "JEUS XML Reference"를 참고한다. 그러나 실제 사용할 때는 순서를 제대로 지키기가 쉽지 않으므로, JEUS에서는 태그 순서를 자동으로 정렬해주는 기능을 제공한다. 그러므로 XML 설정 파일을 작성할 때, 순서를 정확하게 지키지 않아도 무방하다.
위 파일들의 예제가 본 안내서에서 사용될 때에는 표준 헤더가 편의상 생략되어 사용되고 있다. 실제 XML 설정 파일에는 이 헤더들이 포함되어 있다는 것에 주의한다.
다음은 EJB 엔진, EJB 모듈 그리고 EJB 컴포넌트를 관리하기 위해 사용되는 툴이다.
콘솔 툴(jeusadmin)
EJB 엔진을 컨트롤하고 모니터링하기 위해 사용된다. 자세한 내용은 “JEUS Reference Book”의 “4.2.4. EJB 엔진 관련 명령어”를 참고한다.
WebAdmin
JEUS의 그래픽 관리 툴로 jeusadmin에서 가능한 작업은 WebAdmin에서도 모두 가능하다. 툴에 대한 자세한 내용은 "JEUS WebAdmin 안내서"를 참고한다.
EJB 2.x를 위한 appcompiler에 대한 설명은 “JEUS Reference Book”의 “4.4. appcompiler”를 참고한다.
본 절에서는 JEUS에서 EJB를 사용하기 위한 설치 단계를 설명한다.
다음은 'johan'이라는 노드 이름을 사용하여 설치하는 과정에 대한 설명이다.
먼저 JEUS의 정상적인 설치와 환경변수를 확인한다.
특히 시스템 PATH에 JEUS_HOME\bin\ 디렉터리가 설정되어 있는지 확인한다. 본 안내서에서 JEUS_HOME은 실제 JEUS의 설치 디렉터리에 해당한다. (예: “c:\jeus”)
JEUS_HOME\config\johan\JEUSMain.xml에 적어도 하나의 EJB 엔진이 설정되어 있어야 한다.
[예 1.1] EJB 엔진 설정 : <<JEUSMain.xml>>
<?xml version="1.0"?>
<jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
<node>
<name>johan</name>
<engine-container>
<name>mycontainer</name>
<engine-command>
<type>ejb</type>
<name>engine1</name>
</engine-command>
<engine-command>
<type>servlet</type>
<name>engine1</name>
</engine-command>
</engine-container>
</node>
</jeus-system>
JEUSMain.xml에 상응한 EJB 엔진 디렉터리가 존재하는지 확인한다.
JEUS_HOME\config\johan\johan_ejb_engine1 디렉터리가 존재해야 한다. 여기서 'engine1'이라는 것은 JEUSMain.xml에 설정된 EJB 엔진 이름이 engine1이기 때문이다.
JEUS_HOME\config\johan\johan_ejb_engine1 디렉터리에 EJBMain.xml 파일이 존재해야 한다. 각각의 EJB 엔진의 설정 파일에 다음과 같은 부분이 포함되어 있어야 한다.
[예 1.2] EJB 엔진 설정 : <<EJBMain.xml>>
<?xml version="1.0"?> <ejb-engine xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> </ejb-engine>
위의 사항을 확인한 후 command line에 ‘jeus’라고 입력하면 JEUS Manager가 기동된다.
c:\jeus\bin> jeus
[2007.02.09 19:04:11][0][b008] [johan-10] [MGR-0411] virtual host name of this m
anager : johan
. . .
[2007.02.09 19:04:21][3][b008] [johan-10] [MGR-0239] JEUSMain.xml is loaded
. . .
[2007.02.09 19:04:23][2][b008] [johan-10] [MGR-0173] JNDI Server started
. . .
[2007.02.09 19:04:30][0][b008] [johan-10] [MGR-0241] JeusServer is Ready
다른 command line에 ‘jeusadmin johan’이라고 입력한다(“johan”은 각 호스트의 이름이다).
jeusadmin johan Login name>
관리자의 사용자명과 패스워드를 입력한다. 관리자 정보는 설치할 때 설정한다.
jeusadmin johan Login name>administrator Password> johan>
jeusadmin의 prompt에 ‘boot’라고 입력한다. JEUS 노드가 기동(Booting)되며 컨테이너와 엔진이 기동된다.
johan>boot johan boot done johan_container1
‘help’라고 입력하면 EJB 엔진에 대한 모니터링과 관리에 대한 명령어들을 조회하여 확인할 수 있다.
johan>help -g ejb ************************** ejb engine *************************** beanlist list EJB Beans compile compile EJB module in the container moduleinfo get EJB module information
jeusadmin 툴을 종료하려면 prompt에 ‘down’ → ‘jeusexit’ → ‘exit’를 입력한다.
johan>down Do you really want to down whole JEUS? (y : n):>y johan down successful johan>jeusexit johan jeusexit successful johan>exit
전체 JEUS 시스템이 종료된다.
설치와 설정에 대한 자세한 내용은 "JEUS 설치 및 시작하기"와 "JEUS Server 안내서"를 참고한다.