Service Locator Service
Naming Server에 접근하여 Context 객체를 가져오거나 JNDI Server에 접근하여 객체를 가져오는 기능을 제공하는
서비스이다. Service Locator 서비스에서는 한 번 찾은 객체를 Cache 서비스를 사용하여 Cache에 저장하고,
이 후 요청이 있을 시에는 Cache 안에 저장된 객체를 fetch하게 된다.
이 서비스가 제공하는 주된 기능은 서버로부터 트랜잭션 객체, EJBHome 객체, Datasource 객체를 찾는 것이며, 이외의 객체는
lookup 메소드를 사용하여 찾는다. 이 서비스를 사용하기 위해 객체가 존재하는 WAS의 Context 정보는 반드시 Service Locator 서비스의
속성 설정 파일에 정의해야 한다. 또한 Service Locator Service는 내부적으로 Cache 서비스를 이용하고 있으므로,
Cache 서비스와 같이 배포되어야 한다.

Service Locator 서비스에 대한 구현체는 1가지이며, 다음은 각 구현체별 사용법이다.
ServiceLocator
다음은 Service Locator 서비스를 사용하기 위해 필요한 property 들이다.
| Property Name
|
Description
|
Required
|
Default Value
|
| cacheService |
한 번 찾은 객체를 캐싱하고자 할 경우 사용할 Cache 서비스를 정의하는 요소이다. |
N |
N/A |
| Tag Name
|
Attribute Name
|
Description
|
Required
|
Default Value
|
Child Tag
|
| config:configuration |
|
|
|
|
context |
| context |
|
context를 이용하여 여러 개의 다른 context의 속성을 정의할 수 있다.
각 context에 정의된 속성은 InitialContext를 생성하는데 사용된다.
(단, Context name이 default인 것은 반드시 존재해야 함.) |
N |
N/A |
|
| context |
name |
Context 대표명으로 해당 context를 찾을 때 사용한다. |
Y |
N/A |
|
| context |
key |
Context의 속성명으로 InitialContext를 생성할때 사용한다. |
Y |
N/A |
|
| context |
value |
Context에 대한 속성값이다. |
Y |
N/A |
|
| usertx |
|
JNDI Tree에 등록된 User Transaction 이름.
Default는 javax.transaction.UserTransaction이다. |
N |
N/A |
|
Samples
다음은 ServiceLocator 서비스의 속성 설정 및 테스트 코드에 대한 예제이다.
Configuration
다음은 ServiceLocator 서비스의 속성을 정의한 applicationContext-servicelocator.xml
의 일부이다.
다음 속성 파일에서는 한 번 찾은 객체는 캐싱하여 다음 Lookup시 캐싱된 객체를 전달할 수 있도록 Cache Service 사용하며,
Naming Server로 WebLogic Server를 사용한다.
<bean name="serviceLocator" class="anyframe.core.utility.impl.ServiceLocator">
<property name="cacheService">
<ref bean="cacheService"/>
</property>
<config:configuration>
<context name="default" key="java.naming.provider.url" value="t3://server.ip:7001"/>
<context name="default" key="java.naming.factory.initial"
value="weblogic.jndi.WLInitialContextFactory"/>
<usertx name="default" key="javax.transaction.UserTransaction"/>
</config:configuration>
</bean>
TestCase
다음은 앞서 정의한 속성 설정을 기반으로 하여 DataSource 객체와 EJB Home 객체를 Lookup하는
ServiceLocatorServiceTest.java
코드의 일부이다.
/**
* Service Locator Service를 통해 Naming Server에 정의된 DataSource 객체를 lookup하는
* 테스트
*/
public void testLookupDataSource() throws Exception {
IServiceLocator serviceLocator = (IServiceLocator) context.getBean("serviceLocator");
DataSource dataSource = (DataSource) serviceLocator.getDataSource("AnyframeDS", "default");
if (dataSource == null)
throw new Exception("fail to lookup datasource.");
dataSource.getConnection().close();
}
/**
* Service Locator Service를 통해 Naming Server에 배포된 EJB Home 객체를 lookup하는 테스트
*/
public void testLookupEJBHome() throws Exception {
IServiceLocator serviceLocator = (IServiceLocator) context.getBean("serviceLocator");
Object traderHome = serviceLocator.getEJBHome("ejb20-statefulSession-TraderHome", "default");
if (traderHome == null)
throw new Exception("fail to lookup EJB Home.");
}
위의 테스트 코드를 실행시키기 위해서는 WebLogic 9.2.2 서버가 설치되어 있어야 하며 다음과 같은 추가 설정을 필요로 한다.
해당 WebLogic 서버에 'AnyframeDS'라는 이름을 가진 DataSource 생성
- WebLogic에서 제공하는 Configuration Wizard를 통해 샘플 Domain을 생성한다.
- 명령프롬프트를 띄운 후, 샘플 Domain이 생성된 위치로 이동하여 startWebLogic.cmd를 실행시킨다.
- 브라우저를 띄우고 주소창에 http://localhost:7001/console와 같이 입력하여 WebLogic Console로 이동한다.
- WebLogic 설치시 입력한 사용자명과 패스워드를 이용하여 Console에 로그인한다.
- 먼저, WebLogic Console 화면 왼쪽 상단의 Lock & Edit 버튼을 클릭하여 WebLogic 서버 설정에 대한
변경이 가능하도록 한다.
- Console 왼쪽 메뉴 Services>JDBC>Data Sources를 클릭하고, New 버튼을 클릭하여 신규 Data Source를 생성한다.

- Console 오른쪽 화면 Create a New JDBC Data Source에서 신규 Data Source Name과 JNDI Name을 부여한다.
또한 연관된 DB의 유형과 적당한 JDBC Driver의 종류를 선택한다. 그리고 Next 버튼을 클릭하여 다음 화면으로 이동한다.

- 해당하는 DB의 상세 정보인 Database Name, Host Name, Port, Database User Name,
Password 등을 입력하고 Next 버튼을 클릭하여 다음 화면으로 이동한다.

- 테스트 수행을 위해 해당 DB에 대한 Driver Class Name, URL, Password 등을 확인하고, 변경이
필요한 경우 내용을 수정하고서 Next 버튼을 클릭하여 다음 화면으로 이동한다.

- 신규 Data Source를 Deploy할 Target 서버를 선택하고, Finish 버튼을 클릭함으로써 신규 Data Source
등록 작업을 완료한다.

- 변경 내용을 WebLogic Server에 반영하기 위해 WebLogic Console 화면 왼쪽 상단의 Activate Changes
버튼을 클릭한다. Settings updated successfully. 라는 메시지가 나오면 작업이 성공적으로 이루어졌음을
의미한다.
이 페이지에서 제공하는 ejb20_basic_statefulSession.jar 파일을 다운받아 WebLogic 서버에 배포
- ejb20_basic_statefulSession.jar 파일을 다운로드한다.
- 탐색기를 통해 샘플 Domain이 생성된 위치/applications 폴더 내에 ejb20_basic_statefulSession.jar을 복사한다.
- WebLogic Server를 재시작한다.
- 브라우저를 띄우고 주소창에 http://localhost:7001/console와 같이 입력하여 WebLogic Console로 이동한다.
- WebLogic 설치시 입력한 사용자명과 패스워드를 이용하여 Console에 로그인한다.
- 먼저, WebLogic Console 화면 왼쪽 상단의 Lock & Edit 버튼을 클릭하여 WebLogic 서버 설정에 대한
변경이 가능하도록 한다.
- Console 왼쪽 메뉴 Deployments를 클릭하고, ejb20_basic_statefulSession.jar 파일이 있는 위치로 이동하여,
Deploy를 요청한다.
- 변경 내용을 WebLogic Server에 반영하기 위해 WebLogic Console 화면 왼쪽 상단의 Activate Changes
버튼을 클릭한다. Settings updated successfully. 라는 메시지가 나오면 작업이 성공적으로 이루어졌음을
의미한다.
또한, 예제 테스트 코드가 런타임시 WebLogic 라이브러리를 참조하므로 [WebLogic Home]/server/lib/ 폴더의
weblogic-9.2.jar, xbean-9.2.jar 파일을 [Anyframe Core 설치 폴더] 내에 복사해 두어야 한다.
위 작업이 완료된 후, WebLogic Server가 성공적으로 시작된 상태에서 예제 테스트 코드를 실행하도록 한다.
대상 DB가 Oracle일 경우 WebLogic Server가 Oracle JDBC Driver를 인식할 수 있도록 하기 위해 해당 Domain 내의
lib 폴더 내에
ojdbc14.jar 파일을 복사해 두어야 함에 유의하도록 한다.
* [Anyframe Core 설치 폴더]라함은 [anyframe-X.X.X-bin.zip 압축 해제 위치]로 간주한다.
Resources
다운로드
샘플 테스트 코드를 포함하고 있는 anyframe-locatortest-src.zip 파일을 다운받은 후, 테스트 환경 설정
을 참조하여
위에서 제시한 예제 코드를 실행해 볼 수 있다.
| Name
|
Download
|
| anyframe-locatortest-src.zip |
Download
|
| ejb20_basic_statefulSession.jar |
Download
|
참고자료