2011-02-17 5 views
3

Java EE 컨테이너 내에서 실행할 수있는 JPA2에 대한 샘플 코드를 만들고 싶습니다.Java EE 컨테이너가 포함 된 JPA2 샘플?

이러한 샘플을 실행하려면 일반적으로 Java EE 서버가 있어야하지만 작업을보다 쉽게 ​​만들고 포함 된 컨테이너 + 메이븐을 사용하여 실행하려면이 샘플을 실행하십시오.

"프로젝트"에 대해 어느 것이 더 낫습니까?

글래스 피시 임베디드, JBoss 마이크로 컨테이너 또는 OPENEJB?

기타?

감사합니다.

답변

3

컨테이너 외부에서 EJB를 테스트하는 문제는 주입이 수행되지 않는다는 것입니다. 나는이 해결책을 발견했다. Stateless Session Bean에서 @PersistenceContext 을 독립 실행 형 Java-SE 환경에 보유하고 있으며 unittest에서 수행 할 수있는 entitymanager를 직접 삽입해야합니다. 이것은 emmbed 된 서버에 대한 빠른 대안입니다.

@Stateless 
public class TestBean implements TestBusiness { 

    @PersistenceContext(unitName = "puTest") 
    EntityManager entityManager = null; 

    public List method() { 
     Query query = entityManager.createQuery("select t FROM Table t"); 
     return query.getResultList(); 
    } 
} 

unittest는 entitymanager를 인스턴스화하고 bean에 '주입'합니다.

public class TestBeanJUnit { 

    static EntityManager em = null; 
    static EntityTransaction tx = null; 

    static TestBean tb = null; 
    static EntityManagerFactory emf = null; 

    @BeforeClass 
    public static void init() throws Exception { 
     emf = Persistence.createEntityManagerFactory("puTest"); 
    } 

    @Before 
    public void setup() { 
     try { 
      em = emf.createEntityManager(); 
      tx = em.getTransaction(); 
      tx.begin(); 
      tb = new TestBean(); 
      Field field = TestBean.class.getDeclaredField("entityManager"); 
      field.setAccessible(true); 
      field.set(tb, em); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

    @After 
    public void tearDown() throws Exception { 
     if (em != null) { 
      tx.commit(); 
      em.close(); 
     } 
    } 

} 
+0

답변 해 주셨습니다. 도움이되었습니다. 이것은 일부 코드를 테스트하기위한 것입니다. JPA2의 사용법을 보여줄 일부 응용 프로그램을 실제로 실행하는 것이 좋습니다. – Cris