1. OC4J의 내부 구조
OC4J의 내부 구조는 크게 다음과 같이 구성되어 있다 :
- OHS와 OC4J를 연결하는 모듈 mod_oc4j
- 웹 애플리케이션을 실행해 주는 Web container와 EJB 애플리케이션을 실행해 주는 EJB container
- J2EE 기반의 다양한 시스템 서비스 모듈들
1.1 애플리케이션의 수행 구조
OC4J는 J2SE(Java 2 Platform Standard Edition) 인프라 구조를 지원한다. 따라서, Web Container와 EJB Container는 J2SE VM(Virtual Machine)을 사용한다. Web Container 상에서 일반적인 웹 애플리케이션이, EJB Container 상에서 EJB 기반의 애플리케이션이 실행되어지게 된다.
OC4J 상에서 수행되는 애플리케이션들은 J2SE 상의 표준 구조에 맞추어 개발되어야 한다. 일반적으로 다음과 같이 구성된다 :
- 사용자 인터페이스 : JSP 혹은 dynamic HTML 형태로 구성된다.
- 비즈니스 로직 : 일반적인 Java Beans로 개발되거나 EJB 형태로 개발된다. EJB는 J2EE가 제공하는 다양한 시스템 서비스(JNDI, JDBC, JTA, JCA, JAAS, JavaMail등)를 활용한다.
1.2 OHS와 OC4J의 연결 구조
OC4J는 웹 애플리케이션의 실행에 대한 요청을 OHS(Oracle HTTP Server)를 통해서 받는다. 즉, 사용자가 ‘http://www.host-name.co.kr/app-name/module.jsp’와 같이 쳐 주거나 이에 해당하는 링크를 누르게 되면 이 HTTP 프로토콜 기반의 웹 요청을 OHS가 먼저 받게 된다. OHS는 접수한 요청이 자신이 처리할 수 없는 요청임을 인지하면 해당 애플리케이션의 수행을 다시 OC4J로 전달하게 된다. 그러면 OC4J가 해당 애플리케이션을 찾아서 실행시켜 주고 그 수행 결과만을 다시 OHS에 넘겨 주는 것이다. 이 때, OHS와 OC4J 사이의 요청 및 실행 결과 전달을 위한 모듈이 필요한데 이러한 역할을 담당하는 모듈이 바로 mod_oc4j이다. Mod_oc4j는 OHS와 OC4J 사이에서 AJP(Apache Jserv Protocol)을 활용하여 실행 요청과 실행 결과값들을 전달하고 업무 균형을 유지한다. Mod_oc4j의 내부 프로세스는 다음의 그림과 같다 :
mod_oc4j 는 내부적으로 OC4J로의 요청 전달을 관리하기 위한 공유 메모리 테이블을 가지고 있다. 이 테이블에는 수행이 시작된 OC4J 프로세스 정보가 저장된다. Mod_oc4j가 OC4J로 전달될 요청을 받으면 이 테이블 중에서 적절한 OC4J 프로세스를 선택하여 해당 프로세스에 요청을 할당하게 된다.
OC4J 프로세스는 9iAS 상의 모든 프로세스를 관리를 담당하는 OPMN(Oracle Process Monitoring and Notification) 프로세스에 의하여 시작 및 종료되며, 주기적으로 수행 상태가 모니터링 된다. 만약 OPMN 프로세스가 특정 OC4J 프로세스가 작동하지 않음을 발견하면 해당 OC4J 프로세스에 할당된 모든 웹 요청을 수거하여 다른 OC4J 프로세스로 할당하여 주게 된다. 이를 통해 fail-over 메커니즘이 지원되어진다.
2. OC4J 환경 설정
OC4J는 다음과 같은 종류의 환경 설정 파일들로 구성되어 있다 :
OC4J는 다음과 같은 3가지 그룹의 환경 설정 파일들을 가지고 있다 :
- OHS Server 환경 설정 파일(mod_oc4j 관련 파일) : OHS와 OC4J를 연결해 주는 모듈인 mod_oc4j의 수행을 관리하기 위한 설정값들을 가지고 있는 파일이다. 역시 $ORACLE_HOME/j2ee/home/config 디렉토리에 위치한다.
- OC4J Server 환경 설정 파일들 : OC4J 서버를 관리하기 위한 다양한 설정값들을 가지고 있는 환경 화일들로 구성된다. $ORACLE_HOME/j2ee/home/config 디렉토리에 위치한다.
- 애플리케이션 환경 설정 파일들 : OC4J 위에서 수행되는 표준적인 J2EE 기반의 애플리케이션들의 수행을 조절하기 위한 다양한 속성값들을 가지고 있는 환경 파일들이다. $ORACLE_HOME/j2ee/home/applications/<app-name> 디렉토리에 위치한다. 또한, OC4J에 특별한 애플리케이션 환경 파일들도 있는데 이들은 $ORACLE_HOME/j2ee/home/application-deployments/<app-name> 디렉토리에 위치한다.
$ORACLE_HOME/Apache/Apache/conf 디렉토리 밑에 있는 httpd.conf 파일이 바로 OHS의 환경 설정 정보들을 가지고 있는 설정 파일이다. 이 설정 파일 안에 다음과 같은 한 줄이 들어가 있다 :
include “/ias20/Apache/Apache/conf/mod_oc4j.conf”
이 include 절이 바로 mod_oc4j의 환경 정보들을 포함하는 설정 파일을 httpd.conf 파일 안에 포함시키는 문장이다. 이 문장에 표시된 파일인 mod_oc4j.conf 파일이 바로 mod_oc4j 설정 파일이다. Mod_oc4j.conf 파일 안에는 OHS와 OC4J 사이의 연결 관계를 설정하는 문장들이 포함되어 있다. Mod_oc4j.conf의 예제는 다음과 같다
LoadModule oc4j_module modules/ApacheModuleOc4j.dll<IfModule mod_oc4j.c> <Location /oc4j-service> SetHandler oc4j-service-handler ... </Location> ... Oc4jMount /j2ee/* Oc4jMount /webapp/* OC4J_Demos Oc4jMount /myapp/* ajp13://my-pc:8888 Oc4jMountCopy On Oc4jCacheSize 1 ... </IfModule> |
$ORACLE_HOME/j2ee/home/config 디렉토리 밑에는 다음과 같은 서버 설정 파일들이 존재한다 :
- server.xml
- default-web-site.xml
- rmi.xml
- jms.xml
- principals.xml
- data-sources.xml
OC4J는 서버의 실행을 위한 설정값들을 확인하기 위해 server.xml을 참조한다. server.xml에는 <1..N> 개의 애플리케이션이 등록되어 있다. 또한, 각각의 애플리케이션은 <0..N> 개의 웹 모듈과 <0..N> 개의 EJB 모듈로 구성되어 있다.
애플리케이션을 등록할 때는 ①애플리케이션의 이름과 ②애플리케이션 설정 파일의 위치, ③그 외의 속성값들을 준다. 애플리케이션의 설정은 밑의 J2EE 애플리케이션 설정 파일들을 참조하면 된다.
server.xml에는 <0..N> 개의 웹 사이트가 등록되어 있다. 웹 사이트가 하나도 등록 되지 않았다는 것은 OC4J 서버를 순수히 EJB 컨테이너로 사용하겠다는 뜻이다. 각 웹 사이트에는 <1..N> 개의 웹 모듈이 등록되어 있다. 웹 모듈을 등록할 때는 ①(server.xml에 등록 된)애플리케이션의 이름과 ②(애플리케이션에 등록 된)웹 모듈의 이름, ③URL Context, ④그 외의 속성값들을 주어야 한다.
또한, server.xml에는 rmi.xml과 jms.xml 파일의 위치를 나타내는 디렉토리 정보가 등록되어 있다.
Server.xml의 예제는 다음과 같다 :
<application-server localhostIsAdmin="true" application-directory="../applications" deployment-directory="../application-deployments” connector-directory="../connectors"> <rmi-config path="./rmi.xml" /> <jms-config path="./jms.xml" /> <log><file path="../log/server.log" /></log> <global-application name="default" path="application.xml" /> <global-web-app-config path="global-web-application.xml" /> <web-site path="./default-web-site.xml" /> <application name="app01" path="../applications/app01.ear" /> ... </application-server> |
server.xml에 등록되는 애플리케이션은 서로 hierarchical 관계에 있다. OC4J의 최상위 애플리케이션은 광역 애플리케이션(Global application)이라 하여 <global-application ... > 태그를 써서 등록한다. 그 아래의 일반 애플리케이션은 <application ... >태그를 써서 등록한다.
- <global-application name="default" path="application.xml" />
<application name="foo" path="foo-application.xml" />
<application name="bar" path="../applications/bar" />
<application name="bar" parent="foo" path="../applications/bar" />
하위 애플리케이션은 상위 애플리케이션의 각종 자원[resource]을 상속받는다.(Data Source 및 EJB 클래스) 따라서, 하위 애플리케이션의 웹 모듈(.jsp)에서 상위 애플리케이션의 EJB 모듈을 사용 할 수 있다.
기본 웹 모듈과 일반 웹 모듈
광역 애플리케이션과 일반 애플리케이션이 계층적(hierarchical)인 관계라면, 기본 웹 모듈(default web module)과 일반 웹 모듈(web module)의 관계는 평행 관계이다. 다만 기본 웹 모듈의 브라우저 주소는 '/~' 이고 일반 웹 모듈의 브라우저 주소는 '/appserver/~'와 같이 URL context를 가진다는 차이가 있다. 이러한 웹 모듈들은 server.xml 상에 다음과 같이 등록한다.
<default-web-app appslication="default" name="defaultWebApp" />
<web-app application="misc" name="m-web" root="/misc" />
<web-site port="3000" protocol="ajp13" <default-web-app application="default" <web-app application="default" name="dms" root="/dmsoc4j"/> <web-app application="app01" name="app01" root="/app01"/> <web-app application="BC4J" name="webapp" root="/webapp"/> <access-log path="../log/default-web-access.log"/> </web-site> |
OC4J 상에서 수행되는 애플리케이션들이 데이타베이스와 연결되어 정보를 저장하거나 검색하기 위해서는 해당 데이타베이스가 data-sources.xml 파일에 등록되어 있어야 한다. Data-sources.xml 파일의 예는 다음과 같다 :
<data-sources> <data-source class="com.evermind.sql.DriverManagerDataSource" name="OracleDefaultDS" location=" jdbc/OracleDefaultDS" <!--JNDI로 데이타베이스 커넥션을 얻을 때 사용하는 이름 --> xa-location="jdbc/xa/OracleDefaultDS" <!--JNDI로 데이타베이스 커넥션을 얻을 때 사용하는 이름, 이때 커넥션은 XA를 지원 --> ejb-location="jdbc/ejb/OracleDefaultDS" <!--JNDI로 데이타베이스 커넥션을 얻을 때 사용하는 이름, 이때 커넥션은 XA를 지원하면서 커넥션 풀에서 가져오는 커넥션 --> pooled-location="jdbc/pooled/OracleDefaultDS" <!--JNDI로 데이타베이스 커넥션을 얻을 때 사용하는 이름, 이때 커넥션은 커넥션 풀에서 가져오는 커넥션 --> connection-driver="oracle.jdbc.driver.OracleDriver" username="scott" password="tiger" url="jdbc:oracle:thin:@svr1.customer1.co.kr:1521:ORA817" inactivity-timeout="30" /> </data-sources> |
2.3 애플리케이션 설정 파일들
$ORACLE_HOME/j2ee/home/application-deployments 디렉토리가 바로 J2EE 기반의 표준 웹 애플리케이션이 설치되는 루트 디렉토리이다. 표준적인 J2EE 애플리케이션들의 환경 설정값을 포함하는 설정 파일들은 다음과 같다 :
- application.xml : 전체 J2EE 애플리케이션의 환경 설정 파일
- web.xml : 웹 모듈 환경 설정 파일
- ejb_jar.xml : EJB 모듈 환경 설정 파일
또한, 애플리케이션들을 위한 OC4J 만을 위한 환경 설정 파일들은 다음과 같다 : - orion-application.xml
- orion-web.xml
- orion-ejb_jar.xml
[애플리케이션 루트]/META-INF/application.xml
[애플리케이션 루트]/META-INF/orion-application.xml
[애플리케이션 루트]/[웹 모듈]/WEB-INF/web.xml
[애플리케이션 루트]/[웹 모듈]/WEB-INF/orion-web.xml
[애플리케이션 루트]/[웹 모듈]/WEB-INF/classes/[서블릿 클래스들]
[애플리케이션 루트]/[웹 모듈]/WEB-INF/classes/[일반 자바 빈 클래스들]
[애플리케이션 루트]/[웹 모듈]/WEB-INF/lib/[JAR 파일들]
[애플리케이션 루트]/[EJB 모듈]/META-INF/ejb-jar.xml
[애플리케이션 루트]/[EJB 모듈]/[EJB 클래스들]
댓글 없음:
댓글 쓰기