@Stateless @LocalBean
public class MySLSB {
@Resource
SessionContext ctx;
@PersistenceContext(unitName = "myPU")
EntityManager em;
public void T1() {
em.persist(new MyEntity(1L)); //T1 created!
/* wrong call to plain java object
T2();
*/
//corrected by lookup its business object first
ctx.getBusinessObject(MySLSB.class).T2();
ctx.setRollbackOnly();
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void T2() {
em.persist(new MyEntity(2L)); //T2 created!
}
}
Клиент вызывает T1 (), сначала T2, поскольку новая транзакция должна быть зафиксирована,
но T1 будет откат.
Ожидаемый результат:
T1: вставить в myentity set id = 1;
T2: вставить в myentity set id = 2;
T2: коммит;
T1: откат;
-> В БД создана строка с id = 2.
Фактический результат:
вставить в myentity set id = 1;
вставить в myentity set id = 2;
Откат;
-> В БД ничего не создано.
В чем проблема? Большое спасибо!