2015-04-20 190 views
2

我是EJB项目的新手。我试图了解在我的EJB方法顶部使用@Transactional注释。我已经搜索了内容,对此没有明确的解释。任何人都可以解释清楚这一点。@Transactional注释的用途

回答

2

@Transactional来自Spring世界,但Oracle最终将它包含在Java EE 7规范(docs)中。以前,您只能使用@TransactionAttribute注释注释EJB,现在类似的功能也可以用于CDI,其中@Transactional。这些注释的目的是什么?这是应用服务器的一个信号,即某些类或方法是事务性的,也表明它在某些条件下会如何表现,例如,如果它叫什么交易等

一个例子里面:

@Transactional(Transactional.TxType.MANDATORY) 
public void methodThatRequiresTransaction() 
{ 
.. 
} 

上述方法,将抛出一个异常,如果它是不是一个事务中调用。

@Transactional(Transactional.TxType.REQUIRES_NEW) 
public void methodThatWillStartNewTransaction() 
{ 
.. 
} 

拦截器将开始一个新的JTA事务此方法的执行,它不管被称作运行的事务里面与否。但是,如果在事务内部调用它,则在执行此方法期间该事务将被暂停。

参见:

+0

是的,我明白了。那么在这里调用事务上下文和上下文之间有什么区别? – Arun

+1

@Arun在编写方法时,通常无法预测在业务场景中如何使用它。一个客户可能会开始自己的交易,然后调用您的方法,其他客户可能根本不使用交易。通过指定适当的Transactional.TxType,您可以根据事务上下文来控制方法的执行。例如,如果您在方法中执行的所有操作都需要在一个事务中,并且您不关心它是否从事务上下文中调用,那么请使用'@Transactional(Transactional.TxType.REQUIRED)' –

+0

这就是信息。我在这里理解了Transactional属性的用法。当我运行抛出我的代码时,我发现@Transactional注释在我的EJB类的几个方法中,它使用来自'weblogic.jws.Transactional'包的类。我的EJB类作为Webservice公开。我只是混淆了两者。 – Arun

相关问题