Hello.
I have a problem with transaction flow (commitment).
Here is my scenario.
1) Call ejb method ejb1.notify(.) it has no special
TransactionAttributeType annotated, so TransactionAttributeType = REQUIRED
2) Inside of ejb1 I call ejb2.notify(.) this notify method is annotated
with @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW), so new
transaction is made here
3) Inside of ejb2 I call then ejb3.notify(.) this again has no special
TransactionAttributeType annotated, so transaction from ejb2 is used
4) Inside of ejb3 I call ejb4.notify(.) this is annotated with
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW),so new
transaction should be used, but this transaction failes and rolles back.
5) What I now would expect is that transaction of ejb2.notify and also
of ejb3.notify process successfully, but it failes too, because ejb4.notify
failed, why does it happen? I would expect this behavior only if
ejb4.notify(.) would have no
TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) annotation, but
REQUIRED instead.
Mayby I must tell little more about ejb3 class
It is definied like this:
@Stateless
public class Ejb4 extends Ejb3abstractClass implements Ejb4Local {.}
where Ejb3abstractClass is an abstract java class without @Stateless
annotation
so the implementation of ejb4.notify(.) method is inside the
Ejb4abstractClass , also the
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) annotation is
made here and not directly in Ejb4 class, maybe is this the problem? Please
tell me if not.
best regards
Oleg Mayevskiy