2011년 5월 23일 월요일

Eclipse + MyEclipse을 이용한 기존 DataBase을 EJB 3.0으로 전환하기

DownLoad
Installation
  • JDK Install
  • Eclipse Install
  • My Eclipse Install
  • JBoss Install
환경 설정
  1. 전환대상 DataBase 구축
사용 Data Base : Oracle 10g
CREATE TABLE USERINFO (
"ID" VARCHAR2(10 byte) NOT NULL,
"NAME" VARCHAR2(30 byte) NOT NULL,
"AGE" NUMBER,
CONSTRAINT "USERINFO_PK" PRIMARY KEY("ID")
)

  1. JBoss 환경 설정
  • DataSource 설정
{JBOSS_HOME}/server/default/deploy/oracle-ds.xml 파일 생성 후 아래 내용 입력
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@[oracle IP]:[Port]:[SID]</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>[사용자 ID]</user-name>
<password>[비밀번호]</password>
<idle-timeout-minutes>0</idle-timeout-minutes>
</local-tx-datasource>
</datasources>
  • Oracle JDBC Driver 추가
{JBOSS_HOME}/server/default/lib 밑에 ojdbc14.jar 추가 해당 파일은 설치된 {ORACLE_HOME}/product/10.2.0/client_1/jdbc/lib 밑에 존재한다.
  • EJB 3.0 persistence.properties 설정
{JBOSS_HOME}/server/default/deploy/ejb3.deployer/META-INF/persistence.properties 파일을 아래 내용으로 수정
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.connection.release_mode=after_statement
hibernate.transaction.flush_before_completion=false
hibernate.transaction.auto_close_session=false
hibernate.query.factory_class=org.hibernate.hql.ast.ASTQueryTranslatorFactory
#hibernate.hbm2ddl.auto=create-drop
#hibernate.hbm2ddl.auto=create
hibernate.hbm2ddl.auto=update
hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider

# Clustered cache with TreeCache
#hibernate.cache.provider_class=org.jboss.ejb3.entity.TreeCacheProviderHook
#hibernate.treecache.mbean.object_name=jboss.cache:service=EJB3EntityTreeCache
hibernate.connection.datasource=java:/OracleDS
hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
hibernate.jndi.java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
hibernate.jndi.java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
hibernate.bytecode.use_reflection_optimizer=false

# I don't think this is honored, but EJB3Deployer uses it
hibernate.bytecode.provider=javassist
hibernate.show_sql=ture
hibernate.max_fetch_depth=0

  1. Eclipse 환경 설정
  • Eclipse Preferences 설정에서 아래와 같이 JBoss 등록

  • JBoss Start

  1. Database Explorer 실행

  • Database 신규 등록

  • Database Connection 활성화

EJB 3.0 개발
  • Perspective 변경

  • EJB Project 생성


  • JNDI, Driver, Schema 설정

EJB 3.0 Entity Bean 자동 생성
  • Perspective 변경


  • 아래와 같이 입력 후 Finish

  • Perspective 변경

  • Entity Bean 확인

EJB 3.0 Session Bean 생성


  • UserInfoServiceRemote”을 아래와 같이 추가
package article.ejb30.session;

import java.util.List;
import javax.ejb.Remote;
import article.ejb30.entity.Userinfo;

@Remote
public interface UserInfoServiceRemote {
public Userinfo getUserInfo(String id);
public List<Userinfo> getUserInfoListList();
public void deleteUserInfo(String id);
public Userinfo insertUserInfo(String id, String name, long age);
public Userinfo updateUserInfo(String id, String name, long age);
}

  • UserInfoService을 아래와 같이 추가
package article.ejb30.session;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import article.ejb30.entity.Userinfo;

@Stateless
public class UserInfoService implements UserInfoServiceRemote {
@PersistenceContext
protected EntityManager manager;

public void deleteUserInfo(String id) {
manager.remove(getUserInfo(id));
}

public Userinfo getUserInfo(String id) {
Userinfo user = manager.find(Userinfo.class, id);
return user;
}

public List<Userinfo> getUserInfoListList() {
String ejbQl = "select o from Userinfo o";
List<Userinfo> list = manager.createQuery(ejbQl).getResultList();

return list;
}

public Userinfo insertUserInfo(String id, String name, long age) {
Userinfo user = new Userinfo(id, name, age);
manager.persist(user);
return user;
}

public Userinfo updateUserInfo(String id, String name, long age) {
Userinfo user = getUserInfo(id);
user.setName(name);
user.setAge(age);
manager.merge(user);
return user;
}

}

EJB Deploy

  • Deploy 기능 활성화

  • ADD


  • Console에서 Deploy 내용 확인

Test Case 생성
  • JUnit 라이브러리 추가



  • File/New/Other.. 메뉴에서 JUnit Test Case 추가



  • 생성된 Test Case을 아래와 같이 수정
package article.ejb30.session.test;

import java.util.Hashtable;
import java.util.List;

import javax.naming.InitialContext;

import junit.framework.Assert;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import article.ejb30.entity.Userinfo;
import article.ejb30.session.UserInfoServiceRemote;

public class UserInfoServiceTestCase {

private static String serverIP = "localhost";
public static String id;
private static UserInfoServiceRemote userInfoService = null;
private static String JNDI = "UserInfoService/remote";
@SuppressWarnings("unchecked")
@BeforeClass
public static void setUpBeforeClass() throws Exception {
Hashtable map = new Hashtable();
map.put("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
map.put("java.naming.factory.url.pkgs",
"org.jboss.naming:org.jnp.interfaces");
map.put("java.naming.provider.url", serverIP);
InitialContext ctx = new InitialContext(map);
userInfoService = (UserInfoServiceRemote)ctx.lookup(JNDI);
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
userInfoService = null;
}

@Test
public void testInsertUserInfo() {
userInfoService.insertUserInfo("inter999", "후루꾸", 15);
}

@Test
public void testGetUserInfo() {
Userinfo user = userInfoService.getUserInfo("inter999");
Assert.assertNotNull(user);
System.out.println("ID : "+user.getId());
System.out.println("NAME : "+user.getName());
System.out.println("AGE : "+user.getAge());
}

@Test
public void testUpdateUserInfo() {
userInfoService.updateUserInfo("inter999", "후루꾸2", 16);
}

@Test
public void testGetUserInfoListList() {
List<Userinfo> userList = userInfoService.getUserInfoListList();
Assert.assertNotNull(userList);
Assert.assertNotSame(0, userList.size());
for(Userinfo user : userList) {
System.out.println("ID : "+user.getId());
System.out.println("NAME : "+user.getName());
System.out.println("AGE : "+user.getAge());
}
}
@Test
public void testDeleteUserInfo() {
userInfoService.deleteUserInfo("inter999");
}
}


  • Test Case 실행을 위한 라이브러리 등록

  • {JBOSS_HOME}/client 밑의 모든 Jar 파일 등록

Test Case 실행

결과 확인

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

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