Jboss CMT交易

Jboss CMT交易,jboss,ejb,transactional,Jboss,Ejb,Transactional,我这边还有一个问题。。。 如果我有一个无状态服务(无状态会话Bean)作为facade(比如GlobalService),它的方法调用几个其他服务(同样是slsb,比如FooService和BarService): FooService上的所有方法(以及看起来几乎相同的BarService)都注释为需要新事务: @Stateless @Remote(FooService.class) @TransactionManagement(TransactionManagementType.CONTAIN

我这边还有一个问题。。。 如果我有一个无状态服务(无状态会话Bean)作为facade(比如GlobalService),它的方法调用几个其他服务(同样是slsb,比如FooService和BarService):

FooService上的所有方法(以及看起来几乎相同的BarService)都注释为需要新事务:

@Stateless
@Remote(FooService.class)
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class FooServiceBean implements FooService{
   public Foo save(Foo foo){
     ... // exception here
假定FooServiceBean会持久化某些类型为“Foo”的对象,在此期间,将引发未经检查的异常(DuplicateKeyException),这是否会影响要回滚的“周围”事务,还是会忽略它并创建Bar

我最初的想法是,这不会影响交易,但Jboss证明我错了


这是人们可以预料的行为吗?我错了吗?如果是的话。。。如何将两者分离:Foo导致异常,显然没有保存,但Bar要保存?

真让我感到羞耻。。。正是不适当的异常处理导致客户机在继续第二个事务之前停止world

@Stateless
@Remote(FooService.class)
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class FooServiceBean implements FooService{
   public Foo save(Foo foo){
     ... // exception here