Проблема с EJB + POJO Helpers + EntitiyManager - PullRequest
1 голос
/ 04 ноября 2010

Я работаю с EJB ... Я делаю следующее, и я не знаю, почему внедренный EntityManager не работает, как можно было ожидать.

  1. EJB1 вызывает метод на EJB2, который записывает в БД.
  2. , когда EJB2 возвращает, EJB1 отправляет сообщение в MDB.
  3. MDB вызывает EJB3, который читает БД и выполняет некоторую работу.

Моя проблема заключается в том, что EntityManager, введенный во все 3 EJB с @PersistenceContext, не работает должным образом.Вызов persist () в EJB2 не отражается на EntityManager, внедренном в EJB3.Что может быть не так?Надеюсь, я прояснил свою проблему.теперь работает с управляемыми контейнером транзакциями.

1 Ответ

1 голос
/ 08 ноября 2010

Моя проблема в том, что EntityManager, введенный во все 3 EJB с @PersistenceContext, не работает должным образом.Вызов persist () в EJB2 не отражается на EntityManager, внедренном в EJB3.

В среде Java EE распространенным случаем является использование менеджера сущностей с управлением транзакциями в области транзакций.А с таким диспетчером сущностей контекст постоянства распространяется по мере распространения транзакции JTA.

В вашем случае, я подозреваю, вы используете атрибут транзакции REQUIRES_NEW для метода EJB3.Итак:

  • при вызове EJB3#bar() контейнер приостановит транзакцию, начатую для EJB2#foo(), и начнет новую транзакцию
  • при вызове менеджера сущностей из EJB3#bar(), a будет создан новый контекст персистентности.
  • , поскольку транзакция, запущенная для EJB2#foo(), еще не зафиксирована, изменения не отображаются в новом контексте персистентности.

PS: Вы действительно создаете новые темы?Если да, небольшое напоминание: это запрещено спецификацией EJB.

...