본문 바로가기

카테고리 없음

Weblogic server 11의 Java Application Client 프로그램의 예

HelloSLSB EJB에 접근하는 Java Application Client의 예

다음에 소개되는 Java Application Client프로그램은 앞에서 작성한 Stateless Session Bean에 접근하는 내용이므로 서버측 내용을 확인하려면 여기를 참조하세요.

아래의 코드를 컴파일하려면 weblogic.jar 라이브러리가 필요하므로 Eclipse의 Build Path에 weblogic.jar를 등록한 후에 이 코드를 컴파일해야 한다. 그리고 서버측의 EJB객체에 접근해야 하므로 EJB 프로젝트 도중에 자동으로 Eclipse 가 생성해주는 xxxxxClient 프로젝트를 jar포맷으로 export하여 weblogic.jar파일과 함께 사용가능한 경로에 두고 프로젝트(Build Path)에서 참조해야 아래의 코드를 컴파일할 수가 있다.

이 프로그램은 Java EE 서버에서 실행되는 것이 아니고 EJB 프로세스와 다른 프로세스로 실행되므로 Business Interface에는 @Remote를 설정해야만 서버에 접근이 가능하다.

package com.itbank.ejb.test;
import javax.ejb.Local;
import javax.ejb.Remote;

@Local
@Remote
public interface HelloSLSBLocal {
 String sayHello();
}




서로다른 JVM에서 EJB와 클라이언트 모듈(Web, Application)이 실행되는 상황에서는 Local접근이 아니라 Remote접근에 해당하므로 빈 클래스에서도 외부접근이 가능하도록 다음과 같이 mappedName을 지정해 주어야 한다. mappedName이 지정되면 관리서버는 그 이름으로 빈객체의 JNDI이름을 지정하여 외부접근시 참조하도록 한다.

package com.itbank.ejb.test;

import javax.ejb.Stateless;

@Stateless(mappedName="HelloSLSB")
public class HelloSLSB implements HelloSLSBLocal {

 @Override
 public String hello() {
 
  return "Hello Stateless Session Bean";
 }
}



EJB에 접근하는 Java Application Client

import java.util.*;

import javax.naming.*;

import com.itbank.ejb.test.*;


public class EJBAppClient {

 public static void main(String[] args) throws Exception {
 
  Context ctx = getInitialContext01();
  //Context ctx = getInitialContext02();
  HelloSLSBLocal helloBean = (HelloSLSBLocal)ctx.lookup("HelloSLSB#com/itbank/ejb/test/HelloSLSBLocal");
  String message = helloBean.sayHello();
  System.out.println(message);
 }
 
 private static Context getInitialContext01() {
  String url = "t3://IP Address:7001";
  String user = null;
  String password = null;
  Properties properties = null;
  try {
   properties = new Properties();
   properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
   properties.put(Context.PROVIDER_URL, url);
   if (user != null) {
    properties.put(Context.SECURITY_PRINCIPAL, user);
    properties.put(Context.SECURITY_CREDENTIALS, password == null ? "" : password);
   }
   return new InitialContext(properties);
  }catch(Exception e){
   e.printStackTrace();
  }

  return null;
 }
 
 private static Context getInitialContext02(){
  Hashtable env = new Hashtable();
  env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
  env.put(Context.PROVIDER_URL, "t3://IP Address:7001/");
  Context ctx = null;
  try{
   return new InitialContext(env);
  }catch(Exception e){
   e.printStackTrace();
  }
  return null;
 }
}


위에서 빈 객체을 찾을 때 HelloSLSB#com/itbank/ejb/test/HelloSLSBLocal 를 사용하였는데,
관리서버에 접속하여 다음과 같이 배포된 빈의 JNDI 이름을 찾을 수가 있다. 빈 클래스에서 mappedName에 지정한 이름이 JNDI이름의 가장 처음에 오는 것을 확인할 수 있다. #다음에 이어지는 문자열은 빈클래스의 패키지경로에 해당한다.

사용자 삽입 이미지


사용자 삽입 이미지


사용자 삽입 이미지


참고로 Local상태로 빈 클래스를 작성하면 위와 같은 JNDI이름이 설정되지 않는다.