交易管理和CDI

时间:2013-01-05 14:30:23

标签: java-ee cdi ejb-3.1

我想用CDI开发一个应用程序(我经常使用Spring)来发现这项技术。

我已经阅读了许多关于CDI的文章,以了解它是如何工作的。我有一个关于事务管理的简单问题(例如,对于数据库中的持久性):

是否必须使用EJB 3.1进行事务管理,或者是否可以仅使用CDI进行管理?

感谢。

3 个答案:

答案 0 :(得分:8)

不,你可以用CDI做到这一点。您只需创建一个启动,提交或回滚事务的拦截器。这真的不是那么难。在Java EE 7中,对于将成为CDI拦截器的所有托管bean(JSF,CDI,EJB等),将有@Transactional

编辑:如果你想看一些已经完成的工作,Apache DeltaSpike和Seam 3(不再开发)有拦截器来处理交易。

答案 1 :(得分:2)

事务管理是一个不同的API,因此与CDI或EJB一起使用的天气并不重要。

答案 2 :(得分:2)

到目前为止(直到Java EE 7到来)你可以将CDI(不再是@ManagedBean)和EJB(事务性功能)混合起来,就像Adam Bien在帖子中所示:

@Stateless
@Named("helloService")
public class HelloService {

    @EJB ClockService clockService;

    public String getHello(){
        return "Hello from EJB / CDI: " + clockService.currentTime();
    }
} 

关于这一点的好处是你的EJB直接暴露给View Tier,不需要@Interceptor,但是,不要滥用这种方法,你可以在View和Control层之间进行高度耦合

来自JavaEE7规范:“虽然CDI,JSF和EJB都已经建立在一个称为托管bean的常见但非常抽象的概念上,但似乎JSF Managed Beans可能会被弃用以支持CD​​I,而EJB可能会被改造为一套CDI服务。“

参考文献:

  1. http://www.adam-bien.com/roller/abien/entry/ejb_3_1_killed_the

  2. http://jdevelopment.nl/open-source/java-ee-7-progress-page/