是否有类似于Java EE 6中可用的Springs @Transactional注释的东西?

时间:2011-06-21 11:08:13

标签: java spring transactions java-ee-6

在我的公司中,不鼓励使用Spring框架,而是推广Java EE 6。但最近我在Using @Transactional读到了关于Springs @Transactional注释的内容,并认为这对我们的代码非常有用。

据我所知,使用@Transactional注释的方法将重用已存在的事务,或者在调用该方法时如果不存在活动事务则打开新事务。 Java EE 6中是否有类似的东西(例如类似的注释)?

4 个答案:

答案 0 :(得分:9)

EJB组件在Java EE中具有此事务控制。您可以将EJB上方法的事务设置为Required,RequiresNew,Supports等。您几乎总是使用无状态会话Bean(@Stateless)来满足您描述的要求:

> @TransactionAttribute(value=[MANDATORY,
> REQUIRED, REQUIRES_NEW, SUPPORTS,
> NOT_SUPPORTED, NEVER]

必需,默认情况下,如果有正在运行的txn,则会重新使用现有的txn;如果没有,则会创建一个新的txn。 Java EE 6附带EJB 3.1,因此您甚至不需要业务接口,并且可以根据需要将EJB打包在WAR文件中。因此,您正在使用EJB,但如果您想要的只是JTA支持,那么对于开发人员来说,它们更容易集成。

对于EJB注释,这是useful cheat sheet,如果您使用Google,则会有很多指南。

答案 1 :(得分:4)

Java EE 7现在包含@javax.transactional.Transactional。 它的作用与spring注释完全相同。

答案 2 :(得分:3)

在Java EE 6中,可以使用TransactionAttribute注释来注释EJB bean类本身,或EJB(包括会话EJB和MDB)中的各个业务方法。仅当您使用容器管理的事务时才能应用此选项。

注释的有效值在TransactionAttributeType注释中定义:

  • NOT_SUPPORTED
  • SUPPORTS
  • 必需
  • REQUIRES_NEW
  • 强制性
  • NEVER

这些值的语义与早期版本的EJB规范没有相关。自Java EE 5开始,在EJB 3.0中引入注释时,这些注释可用。请注意,某些值在某些情况下不适用 - 例如,MDB不能使用除REQUIRED和NOT_SUPPORTED之外的任何值进行注释;对于MDB的容器管理trasactions,任何其他值都没有意义(毕竟,容器必须创建一个事务,或者在这种情况下不能创建事务)。

如果您想快速了解EJB 3.0和Spring模型之间事务属性的比较,我很乐意指出您Java Transaction Design Strategies的方向。免责声明:我只是读这本书的读者。

答案 3 :(得分:0)

EJB(无状态和有状态)是默认的事务组件,默认的事务属性是REQUIRED,类似于spring ..