Java 嵌套EJB不回滚
简单应用程序服务引发异常:Java 嵌套EJB不回滚,java,ejb,jta,transactional,Java,Ejb,Jta,Transactional,简单应用程序服务引发异常: @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.sa
@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
也是@无状态的
,AppService2
类似于AppService
当我抛出上述异常时,foo
被回滚-一切正常。但是,当我调用另一个服务(注释)时,bar
不会持久化到DB中,而是持久化foo
为什么调用另一个服务后不回滚foo
编辑
我发现AppService2在保存bar
public void createBar(String name) {
if (repo.find(name) != null)
...
Bar bar = new Bar(repo.nextIdentity(), name);
repo.save(bar);
}
此查询正在中断事务。当我在这个方法上设置@TransactionAttribute时
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public Bar find(String name) {}
它解决了这个问题
你能解释一下它是怎么工作的吗
这条路对吗?还有别的路吗