2011년 5월 23일 월요일

Apache OpenEJB 3.0 - 3


Eclipse 이용한 Sample 개발
개발 환경 설정
1. OpenEJB3.0 “lib” 디렉토리를 “User Libraries” 등록하여 “Java Build Path” 추가 한다.
2. Client 개발에 사용할 JUnit4 버전을 “Java Build Path” 추가한다.
Sample : HelloWorld Stateless Bean
1. Local Interface : HelloWorldLocal
package inter999.com.naver.blog.ejb30.stateless;
import javax.ejb.Local;
@Local
public interface HelloWorldLocal {
public String getHelloWorld(String name);
}


n “@Local” Annotation 으로 Local Interface 임을 선언한다.
2. Remote Interface : HelloWorldRemote
package inter999.com.naver.blog.ejb30.stateless;
import javax.ejb.Remote;
@Remote
public interface HelloWorldRemote extends HelloWorldLocal {
}


n “@Remote” Annotation 으로 Remote Interface 임을 선언한다.
3. Bean Class : HelloWorldBean
package inter999.com.naver.blog.ejb30.stateless;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Stateless;
import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;
@Stateless
public class HelloWorldBean implements HelloWorldLocal, HelloWorldRemote {
public String getHelloWorld(String name) {
return name + " Wellcome!";
}
@PostConstruct
public void constructed() {
System.out.println("constructed");
}
@PreDestroy
public void destroy() {
System.out.println("destroy");
}
@AroundInvoke
public Object invoke(InvocationContext invocationContext)
throws Exception {
System.out.println("invoke : " + invocationContext.getMethod() + ","
+ invocationContext.proceed());
return invocationContext.proceed();
}
}


n “@Stateless” 사용하여 무상태 세션 임을 선언한다.
n “@PostConstruct” Callback Method HelloWorldBean 인스턴스가 생성 elloWorldBean후후 실행된다.
n “@PreDestroy” Callback Method HelloWorldBean 인스턴스가 삭제 되기 전에 실행된다.
n “@AroundInvoke” Callback Method Method 실행 마다 실행된다.
4. META-INF/ejb-jar.xml
<ejb-jar/>


n 비어 있는 Tag 입력 한다.
5. HelloWorld Client
package inter999.com.naver.blog.ejb30.stateless.client;
import inter999.com.naver.blog.ejb30.stateless.HelloWorldRemote;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.junit.Before;
import org.junit.Test;
public class HelloWorldClient {
private InitialContext ctx = null;
@Before
public void setUp() throws Exception {
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "ejbd://localhost:4201");
ctx = new InitialContext(p);
}
@Test
public void testGetHelloWorld() {
try {
HelloWorldRemote hello = (HelloWorldRemote) ctx.lookup("HelloWorldBeanRemote");
String helloMessage = hello.getHelloWorld("Hurukku");
System.out.println(helloMessage);
} catch (NamingException e) {
e.printStackTrace();
}
}
}


6. Sample 디렉토리 구조
Sample HelloWorld Deploy
1. Eclipse Export à Java à JAR file 명령을 사용하여 “HelloWorld.jar” 만든다.
2. “HellowWord.jar” 파일을 “OpenEJB/apps” 복사에 넣는다.
3. “openejb start” OpenEJB Server 실행 한다.
4. “log/openejb.log” 파일에서 정상적으로 배포 여부를 아래로그로 확인할 있다.
2008-05-20 13:40:47,737 - INFO - Jndi(name=HelloWorldBeanLocal) --> Ejb(deployment-id=HelloWorldBean)
2008-05-20 13:40:47,746 - INFO - Jndi(name=HelloWorldBeanRemote) --> Ejb(deployment-id=HelloWorldBean)


5. “HelloWorldClient” 실행 시킨다.
번째 실행 HelloWorldBean 인스턴스가 생성되며 “@PostConstruct” Callback Method 실행됨을 확인할 있다.

Sample Counter Stateful Bean
1. Remote Interface : CounterRemote
package inter999.com.naver.blog.ejb30.stateful;
import javax.ejb.Remote;
@Remote
public interface CounterRemote {
public int getCount();
}


n @Remote 선언한다.
2. Bean Class : CounterBean
package inter999.com.naver.blog.ejb30.stateful;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.PostActivate;
import javax.ejb.PrePassivate;
import javax.ejb.Stateful;
import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;
@Stateful
public class CounterBean implements CounterRemote {
private int count = 0;
public int getCount() {
return count++;
}
@PostConstruct
public void constructed() {
System.out.println("constructed");
}
@PreDestroy
public void destroy() {
System.out.println("destroy");
}
@AroundInvoke
public Object invoke(InvocationContext invocationContext) throws Exception {
System.out.println("invoke : " + invocationContext.getMethod());
return invocationContext.proceed();
}
@PostActivate
public void activated() {
System.out.println("activated");
}
@PrePassivate
public void passivate() {
System.out.println("passivate");
}
}


n “@PrePassivate” rePassivate"terClientan
n Annotation Stateful Bean 인스턴스가 Client 요청이 장시간 없어 메모리에서 저장소로 저장될 자동 실행되는 CallBack Method이다.
n “@PostActivate” Annotation Passivate 인스턴스가 Client 요청으로 저장소에서 메모리로 이동 자동 실행되는 CallBack Method이다.
3. Client : CounterClient
package inter999.com.naver.blog.ejb30.stateful.client;
import inter999.com.naver.blog.ejb30.stateful.CounterRemote;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.junit.Before;
import org.junit.Test;
public class CounterClient {
private InitialContext ctx = null;
@Before
public void setUp() throws Exception {
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "ejbd://localhost:4201");
ctx = new InitialContext(p);
}
@Test
public void testgetCount() {
try {
CounterRemote counter = (CounterRemote) ctx.lookup("CounterBeanRemote");
System.out.println("Count : "+counter.getCount());
System.out.println("Count : "+counter.getCount());
System.out.println("Count : "+counter.getCount());
System.out.println("Count : "+counter.getCount());
System.out.println("Count : "+counter.getCount());
} catch (NamingException e) {
e.printStackTrace();
}
}
}


4. META-INF/ejb-jar.xml
<ejb-jar/>


5. Eclipse “Export à Java à JAR file” 명령을 사용하여 “Counter.jar” 파일 생성
6. OpenEJB Server “apps” 디렉토리에 “Counter.jar” 파일 복사을 OpenEJB Server 실행 시킨다. “openejb start”
7. “log/openejb.log”에서 CounterStateful Bean 정상적으로 Deploy 되었음을 확인한다.
2008-05-20 15:38:01,660 - INFO - Jndi(name=CounterBeanRemote) --> Ejb(deployment-id=CounterBean)


8. Client 프로그램 “CounterClient” 실행 한다.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...