java - nested EJB not rolling back -
simple application service throws exception:
@stateless public class appservice { @inject private repository repo; @inject private appservice2 service2; public void createfoo(string name) { foo foo = new foo(repo.nextidentity(), name); repo.save(foo); // service2.createbar(name); throw new runtimeexception("asdf"); } }
repository
@stateless
, appservice2
similiar appservice
.
when throw exception above foo
rolled - ok. when call service (the commented), bar
not persisted db foo
persisted.
why foo
not rolled after calling service?
edit
i found appservice2 making checking query db before saving bar
public void createbar(string name) { if (repo.find(name) != null) ... bar bar = new bar(repo.nextidentity(), name); repo.save(bar); }
and query interrupting transaction. when set @transactionattribute on method
@transactionattribute(transactionattributetype.not_supported) public bar find(string name) {}
it resolves problem.
could explain how works?
is right way or there another?
Comments
Post a Comment