Не могу сохранить мои данные в спящем режиме - PullRequest
0 голосов
/ 19 ноября 2010

Я начинаю работать с Hibernate и пытаюсь сохранить некоторые данные в моей БД из веб-приложения.

Мой код сервлета находится здесь:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter pr = response.getWriter();
    ServletContext ctx = super.getServletContext();
    try {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("agricultural-register-server");
        EntityManager em = emf.createEntityManager();
        em.joinTransaction();
        VolumeType vt = new VolumeType(1, "asd");
        Volume v = new Volume("a", "b", "c", 123123, vt, 1);
        em.persist(vt);
        em.persist(v);
        em.flush();
        em.close();
        RequestDispatcher dispatcher = ctx.getRequestDispatcher("/index.jsp");
        dispatcher.forward(request, response);
    } catch (Exception e) {
        pr.println("Error occured while testing");
        e.printStackTrace();
    }
}

Моя проблема в том, что онвыдает ошибку:

javax.persistence.TransactionRequiredException: транзакция не выполняется

Я добавил в свой файл persistence.xml параметр:

, и это создает нормально мои таблицы.Поэтому я думаю, что моя проблема в том, что мне нужно сделать свой код транзакционным.но как я могу это сделать?

Если я попытаюсь сделать:

em.getTransaction(); //....

, это выдаст ошибку (я думаю, потому что я объявил свой тип транзакции как "JTA" в моем файле persistence.xml).

Итак, кто-нибудь может мне помочь с этим?

Заранее спасибо.


Я решил свою проблему, выполнив следующее:

Context ic = new InitialContext();
UserTransaction ut = (UserTransaction)ic.lookup("java:comp/UserTransaction");
ut.begin();
//...transactional code

ut.commit();

Справка найдена по этой ссылке: http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/transactions/transactions6.html

Но, в любом случае, некоторые проблемы будут приветствоваться.

1 Ответ

0 голосов
/ 19 ноября 2010

Вы пробовали?

em.beginTransaction();

и в конце вам нужно будет зафиксировать или откатить транзакцию с помощью уважаемых методов.

...