У меня есть приложение JEE. Классы этого приложения JEE упаковываются в два разных банка, которые являются членами EAR-файла.eclipselink: Отсутствует транзакция с разными банками
Предположим, у меня есть сущность JPA «DataEntity» (упакованная в банку «a.jar»).
В первом JAR файл "a.jar" также хранится следующий класс:
@Stateless
@LocalBean
public class A_Bean {
@PersistenceContext(unitName = "testApp")
private EntityManager em;
public void testMethod(DataEntity obj) {
if (em.contains(obj) log.info("CONTAINED a 1");
else {
obj = em.merge(obj);
em.refresh(obj);
}
if (em.contains(obj) log.info("CONTAINED a 2");
}
}
Во втором JAR файл "b.jar" У меня есть следующий класс:
@Stateless
@LocalBean
public class B_Bean {
@PersistenceContext(unitName = "testApp")
private EntityManager em;
public void testMethod(DataEntity obj) {
if (em.contains(obj) log.info("CONTAINED b 1");
else {
obj = em.merge(obj);
em.refresh(obj);
}
if (em.contains(obj) log.info("CONTAINED b 2");
}
}
сейчас Я предполагаю, что вызовы будут вызываться извне контейнера EJB (означает, что указанный DataEntity «dataObj» в настоящее время не управляется EntityManager):
a.testMethod(dataObj);
показывает ожидаемый результат:
CONTAINED a 2
Но если я называю
b.testMethod(dataObj);
Я получаю
Exception: javax.persistence.TransactionRequiredException
at org.jboss.as.jpa.container.AbstractEntityManager.transactionIsRequired(AbstractEntityManager.java:692)
at org.jboss.as.jpa.container.AbstractEntityManager.merge(AbstractEntityManager.java:547)
at B_Bean.testMethod(B_Bean.java:xxx)
...
добавления Также
@TransactionAttribute(TransactionAttributeType.REQUIRED)
не помогает.
И теперь, после перемещения класса B_Bean в файл a.jar, класс B_Bean работает так, как ожидалось.
Должен быть упакован весь EntityBeans в тот же файл jar? Есть ли уловка, как упаковывать классы Entity в разные файлы jar?
Моя среда:
- JBoss 7.1.1
- EclipseLink 2.5.1
Спасибо, Штеффен
где вы упакована файл persistence.xml? –
@Gabriel: В «a.jar». Это то, почему он работает, если A.class находится в a.jar? – Steffen