Java EE 6 中是否有类似于 Springs @Transactional 注释的东西?
在我的公司中,不鼓励使用 Spring 框架,而是提倡使用 Java EE 6。但最近我在 @Transactional 注释rel="nofollow">使用 @Transactional 并认为这对我们的代码非常有用。
据我了解,用 @Transactional
注释的方法将重用已存在的事务,或者如果调用该方法时不存在活动事务,则打开一个新事务。 Java EE 6 中是否有类似的东西(例如类似的注释)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
EJB 组件在 Java EE 中具有这种事务控制。您可以将 EJB 上方法的事务设置为“Required”、“RequiresNew”、“Supports”等。您几乎总是会使用无状态会话 Bean (
@Stateless
) 来满足您所描述的要求:“Required”、“默认情况下,如果有正在运行的交易,将重新使用现有的交易;如果没有,则创建一个新的交易。 Java EE 6 附带 EJB 3.1,因此您甚至不需要业务接口,如果需要,您可以将 EJB 打包在 WAR 文件中。因此,您正在使用 EJB,但对于开发人员来说,如果您想要的只是 JTA 支持,那么集成起来会容易得多。
这是一个有用的备忘单,用于 EJB 注释和如果你用谷歌搜索的话,有很多指南。
EJB components have this transactional control in Java EE. You can set the transaction of a method on the EJB to be Required, RequiresNew, Supports, etc. You would almost always use a Stateless Session Bean (
@Stateless
) for the requirements you describe:Required, the default, will re-use an existing txn if there's one running or create a new one if there is not. Java EE 6 ships with EJB 3.1, so you don't even need the Business Interface and you can package the EJBs in the WAR file if you want. Therefore you are using EJBs, but to the developer they are much easier to integrate if all you want is JTA support.
This is a useful cheat sheet for the EJB annotations and there are numerous guides if you Google for them.
Java EE 7 现在包含 @javax.transactional.Transactional 。
它的作用与 spring 注释完全相同。
Java EE 7 now contains @javax.transactional.Transactional.
It acts quite the same as the spring annotation.
在 Java EE 6 中,可以使用 TransactionAttribute 注释。仅当您使用容器管理事务时才可以应用此功能。
注释的有效值在 TransactionAttributeType 注释中定义:
这些值的语义与 EJB 规范的早期版本相比没有改变。这些注释从 Java EE 5 开始就可用,当时 EJB 3.0 中引入了注释。请注意,某些值在某些情况下不适用 - 例如,MDB 不能使用 REQUIRED 和 NOT_SUPPORTED 之外的任何内容进行注释;对于 MDB 的容器管理的事务,任何其他值都没有意义(毕竟,在这种情况下,容器必须创建事务,或者不能创建事务)。
如果您想快速了解 EJB 3.0 和 Spring 模型之间事务属性的比较,我很乐意为您指出 Java事务设计策略。免责声明:我只是这本书的满意读者。
In Java EE 6, one may annotate the EJB bean class itself, or the individual business methods in an EJB (both session EJBs and MDBs) with the TransactionAttribute annotation. This can be applied only if you use container managed transactions.
Valid values for the annotation are defined in the TransactionAttributeType annotation:
The semantics of these values haven't changed from the earlier versions of the EJB specification. These annotations are available since Java EE 5, when annotations were introduced in EJB 3.0. Note that, some of the values are not applicable in certain scenarios - MDBs for instance cannot be annotated with anything but REQUIRED and NOT_SUPPORTED; any other values would not make sense for container managed trasactions for a MDB (after all, the container must either create a transaction or musn't, in this case).
If you want a quick overview of how the transaction attributes compare between the EJB 3.0 and Spring models, I would gladly point you in the direction of Java Transaction Design Strategies. Disclaimer: I'm just a satisfied reader of this book.
EJB(无状态和有状态)是默认的事务组件,默认的事务属性是必需的,类似于 spring..
EJB's (stateless and stateful) are default transactional components, default transactional property is REQUIRED, similar to spring..