Bar*_*man 4 ejb java-ee cdi jsf-2
我正在阅读这篇文章,这让我有些困惑:在那篇文章中提到了与每个特定容器一起使用的注释:JSF,CDI或EJB容器.
作为一个初学者,我学习了JSF框架并习惯了它的@ManagedBean注释及其可选的name参数,用于从JSF页面引用bean,并且对CDI知之甚少,而我正在使用EJB作为其强大的功能(甚至阅读这篇文章之后,我仍然认为EJB比CDI更强大,功能更强.
所以...... JSF和CDI容器都有自己的注释和在网页上引用bean的方法,但EJB只有@Stateless(或@Stateful),因此无法在网页上引用,这意味着JSF容器必须总是附加EJB(因为我假设混合EJB和CDI容器是荒谬的,因为它们几乎相似但是为了这一点,我希望有人告诉我,如果我错了).
JSF容器的问题在于它
"仍然没有完整和成熟的容器"
正如在那篇文章中说的那样,我知道的最糟糕的事情是在@ManagedBean旁边的Netbeans中发出警告信息:
"javax.faces.bean包中的注释将在下一个JSF版本中被删除.相反,建议使用CDI."
(好吧,这里有另一个注释的替代包:javax.annotation.ManagedBean,但我不知道我是否可以使用它,也不知道它是否有一个参数用于在网页上引用bean以及它是哪一个)
所以现在我开始怀疑未来还应该使用哪种容器组合.CDI + EJB是未来吗?
为所有人喝彩.
Ser*_*gio 10
Java EE 7正在变得更加CDI一致.因此,EJB将只是CDI +强大服务(异步,消息使用者,计划任务......)的一个非常特殊的案例.考虑到这一点,@ManagedBean变得多余,因为@Named让您将bean暴露给JSF页面.
随着技术的成熟,您将在任何地方使用CDI容器(即使是独立应用程序).
要记住一些要点:
@Stateless或@Stateful.现在,每个类都可以@Named被注入(并使用这意味着拦截,生命周期管理,资源注入的服务).@ManagedBean.每个@Named都可以在具有相关范围的网页后面(会话,视图...)@Named用@Transactional(Java EE的7)可以写入数据库.架构得到简化,模式相同(MVC,Boundary-Control-Entity),只需更改注释和一点点实现.
目前有一个名为Apache DeltaSpike的成熟项目,其中一些相关的CDI扩展是可移植的,在大多数情况下可以简化您的生活(即使您使用的是Java EE 6!).
注意:在Java EE 7而不是Java EE 6中使用完整的CDI会更容易,因为6还没有 @Transactional,所以你需要自己创建一个事务拦截器.
DeltaSpike说:
对非EJB bean的事务支持:DeltaSpike中的Transactional Interceptor为Java EE 7中的@Transactional铺平了道路.
| 归档时间: |
|
| 查看次数: |
1525 次 |
| 最近记录: |