如何CDI和EJB比较? 相互作用?

我有一个艰难的时间,如何理解两者相互并在它们之间的边界所在。 他们是否重叠? 它们之间有冗余?

我知道有与两个相关联的注释,但我一直没能找到两个完整的清单,简要说明。 不知道这是否会帮助清理他们如何它们之间的区别或者重叠。

真的只是混淆。 我(我想)了解EJB相当不错,我想我有一个很难理解到底是什么CDI带来的表,以及它如何取代了或增强EJB什么已经提供。

--------------解决方案-------------

CDI - 这大约是依赖注入。 这意味着你可以在任何地方注入接口实现。 这个对象可以是任何东西,也可以不相关的EJB。 下面是如何使用CDI注入随机生成一个例子。 没有任何关于EJB。 你会当你想注入非EJB的服务,不同的实现或算法使用CDI(所以你并不需要EJB存在的话)。
EJB你明白,或许你被@EJB注解迷惑 - 它可以让你实现注入到你的服务或别的什么东西。 其主要思想是一流的,在那里你注入,应该由EJB容器进行管理。 看来,CDI不理解EJB是什么,所以在Java EE 6的兼容的服务器,在你的servlet可以写两个

@EJB EJBService ejbService;

@Inject EJBService ejbService;

这就是可以让你迷惑,但是这可能是EJB和CDI之间的桥梁的唯一的事。

当我们在谈论CDI,你可以到CDI管理类(他们只应该由CDI认识框架中创建)注入的其他对象。

还有什么CDI提供...例如,你使用Struts 2的MVC框架(只是举例),和你在这里的限制,即使使用EJB 3.1 - 你不能在Struts动作使用@EJB注解,它不是由管理容器。 但是当你添加Struts2的-CDI插件,你可以在里面写@Inject注解同样的事情(所以不需要更多的JNDI查找)。 这样,它增强了EJB的力量。 但正如我前面提到的,你注入什么用CDI - 如果它是关系到EJB或没有也没关系,这就是它的力量

PS。 更新链接到例

这是目前的确有点混乱,因为现在在Java EE多个组件模型。 他们是CDI,EJB3 JSF 托管Bean。

CDI是块新的孩子。 CDI Bean有dependency injectionscopingevent bus 。 CDI豆类是最灵活的相对于注射和范围。 事件总线是非常轻便,非常适合即使是最简单的Web应用程序。 除此之外,CDI也暴露称为一个非常先进的功能portable extensions ,这是一种插件机制,为供应商提供额外的功能到Java EE,可以提供在所有的实现(Glassfish的,JBoss AS中,WebSphere中,等等)。

EJB3豆是从旧的遗留EJB2组件模型*改造并分别在Java EE的第一豆通过注释进行管理的Bean。 EJB3 Bean有dependency injectiondeclarative transactionsdeclarative securitypoolingconcurrency controlasynchronous executionremoting

在EJB3豆依赖注入并不像CDI柔性豆类和豆类EJB3没有作用域的概念。 然而,EJB3 bean是事务性和默认**汇集,两块CDI选择了非常好用的东西,在EJB3的域离开。 另外提到的项目,也没有使用CDI。 EJB3有它自己的无事件总线虽然​​,但它确实有一种特殊类型的豆的用于收听消息; 消息驱动bean。 这可以用来从Java消息传递系统或从具有JCA资源适配器的任何其它系统接收消息。 使用完全成熟的消息对于简单的事件比CDI事件总线更重量级和EJB3只定义了一个监听器,而不是生产商的API。

JSF托管Bean已经在Java EE中存在自从JSF被列入。 他们也配备了dependency injectionscoping 。 JSF托管Bean介绍声明范围界定的概念。 本来是范围相当有限,并在同一版本的Java EE哪里EJB3豆已经可以通过注释声明,JSF托管Bean仍然在XML中声明。 JSF托管Bean的当前版本也终于通过注解来声明和作用域,以期范围,并创建自定义作用域的能力扩大。 视图范围,它可以记住请求之间的数据同一个页面是JSF托管Bean的一个独特的功能。

除了 ​​视图范围,很少有仍然会在Java EE 6中CDI失踪的视图范围内有不幸的JSF托管Bean,否则CDI将是一个完美的超集什么JSF托管Bean提供更新 :在Java EE 7 / JSF 2.2 CDI兼容@ViewScoped已经加入,使得CDI确实是完美的超集。

随着EJB3和CDI情况并不那么清晰。 在EJB3组件模型和API提供了很多的服务,CDI不提供,所以一般EJB3无法通过CDI代替的。 另一方面,CDI可以与EJB3结合使用 - 例如增加的EJB范围的支持。

礼萨·拉赫曼,专家组成员和一个名为CDI残敌实施实施者,经常暗示与EJB3的组件模型相关联的服务可以被改造为一组CDI注解。 如果发生这种情况,在Java EE中所有的托管beans可能成为CDI豆。 这并不意味着EJB3消失或变得过时,只是它的功能将通过CDI而不是通过EJB的自己的注释像@Stateless和@EJB被曝光。

更新

TomEE和OpenEJB的名气大卫Blevins解释了CDI和EJB很好的在自己的博客之间的异同:CDI的时候打出来的的EJB

*虽然它只是版本号的增量,EJB3豆大部分一种完全不同的bean:一个简单的POJO,变成了“托管bean”在EJB2采用简单的单批注,相较于模型,其中一个重量级的过度被要求为每个bean冗长的XML部署描述符中,除豆被要求落实各项非常重量级的大部分无意义的组件接口。

**无状态会话bean总是汇集,有状态会话bean可选

分类:java的 时间:2015-03-16 人气:251
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.213 (s). 11 q(s)