又得麻烦你了……(见:CMT Transactions) 假设如下:
所有 TransactionAttributes 默认设置为 REQUIRED
问题:为什么即使先前的提交不应该发生,find 方法也能够检索 foo?确实发生了在调用 find() 时插入并选择了 Foo,但是为什么呢?此时事务尚未结束,因为 Bar 仍将被存储。
现在发生了以下情况(Bang = DuplicateKeyException):
问题:为什么Foo得救了?我认为 save(Foo foo) 的方法调用将成为 GlobalService 事务的一部分,注释为 REQUIRED
好的,也许 GlobalClient 感兴趣:
public void createFooBar(Foo foo, Bar bar) throws WrappedThingsGoneBadException
{
try
{
fooService.create(foo);
}
catch (Exception e)
{
e.printStackTrace();
}
fooService.doSomethingSilly();
try
{
foo = fooService.findByName(foo.getName());
}
catch (Exception e)
{
e.printStackTrace();
}
try
{
barService.create(bar);
}
catch (Exception e)
{
e.printStackTrace();
}
}
Foo- 和 BarService 的保存方法:
public Foo create(Foo foo)
{
em.persist(foo);
return foo;
}
非常欢迎澄清!