Образцы JPA2 со встроенным контейнером Java EE?

Я хочу создать пример кода для JPA2, который можно запустить внутри контейнера Java EE.

Для запуска этих примеров обычно требуется сервер Java EE, но я хочу упростить задачу и запускать их с помощью встроенного контейнера + maven.

Какой из них лучше для такого рода «проекта»?

Встроенная стеклянная рыбка, микроконтейнер JBoss или OPENEJB?

Другие?

Спасибо !


person Cris    schedule 17.02.2011    source источник


Ответы (1)


Проблема тестирования EJB вне контейнера заключается в том, что инъекции не выполняются. Я нашел это решение. В сеансовом компоненте без сохранения состояния у вас есть аннотация @PersistenceContext в автономной среде Java-SE, вам нужно самостоятельно внедрить entitymanager, что можно сделать в модульном тесте. Это быстрая альтернатива встроенному серверу.

@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();
    }
}

Модульный тест создает экземпляр 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();
        }
    }

}
person stacker    schedule 17.02.2011
comment
Спасибо за ваш ответ. Это было полезно. Это больше для тестирования некоторого кода. Что я хотел бы сделать, так это запустить некоторые приложения, которые продемонстрируют использование JPA2. - person Cris; 17.02.2011