Подключение в JPA - PullRequest
       40

Подключение в JPA

0 голосов
/ 23 февраля 2011

Может кто-нибудь сказать мне, как получить транзакцию в JPA, если я определил jta-data-source?

С уважением,

Satya

1 Ответ

3 голосов
/ 26 февраля 2011

С источником данных JTA работа над его соединениями является частью транзакции JTA.Это означает, что вам нужно запустить и зафиксировать или откатить транзакцию JTA.

Самый простой способ сделать это - выполнить JPA-работу внутри сессионного компонента:

@Stateless
public class SomeBean {

    @PersistenceContext
    private EntityManager entityManager;

    public void doStuff() {
        // … do some stuff
        entityManager.persist(someObj);
    }
}

В этом случаетранзакция начинается при входе в метод doStuff() и заканчивается при выходе из него.

Но если по какой-то причине вы хотите запустить транзакцию вручную в каком-либо другом типе компонента (например, управляемый компонент JSF,Servlet, Servlet filter и т. Д.), Вы можете напрямую использовать API:

public class SomeBean {

    @Resource
    private UserTransaction tx;

    public void doStuff() {
        try {
            tx.begin();
            // … do some stuff
            entityManager.persist(someObj);
            tx.commit();
        }
        catch (Throwable t) {
            tx.rollback();
            throw t;
        }
    }
}

Использование сессионного компонента и его так называемых декларативных транзакций - почти всегда рекомендуемый подход.

...