@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!
}
}
Le client appelle T1(), au premier T2 comme une nouvelle transaction doit être engagée, mais T1 sera annulée.EJB CMT TransactionAttributeType.REQUIRES_NEW ne fonctionne pas
résultat escompté:
T1: insérer dans set MyEntity id = 1; T2: insérer dans myentity set id = 2;
T2: validation;
T1: rollback;
-> La ligne avec id = 2 est créée en DB.
résultat réel:
insert en jeu de MyEntity id = 1;
insérer dans l'ensemble myentity id = 2;
rollback;
-> Rien n'est créé dans DB.
Quel est le problème? Merci beaucoup!