gpt4 book ai didi

jakarta-ee - JSF、CDI 和 EJB 容器 : which combination of them should be used?

转载 作者:行者123 更新时间:2023-12-04 22:21:13 25 4
gpt4 key购买 nike

我正在阅读 this post这让我有些困惑:在那篇文章中提到了每个特定容器使用哪个注释:JSF、CDI 或 EJB 容器。

作为一个初学者,我学习了 JSF 框架并习惯了它的 @ManagedBean 注释和它的可选名称参数,用于从 JSF 页面引用 bean,并且对 CDI 了解不多,我使用 EJB 来代替它的强大功能(甚至读完这篇文章后,我仍然认为 EJB 比 CDI 更强大、更有特色)。

所以.. JSF 和 CDI 容器都有自己的注释和在网页上引用 bean 的方式,但是 EJB 只有 @Stateless(或 @Stateful),因此不能在网页上引用,这意味着 JSF 容器必须总是附有 EJB(因为我认为混合 EJB 和 CDI 容器是荒谬的,因为它们几乎相似,但在这一点上,如果我错了,我希望有人告诉我)。

JSF 容器的问题在于

"still not complete and mature container"



正如那篇帖子所说,我所知道的最糟糕的是@ManagedBean旁边的Netbeans中的警告消息:

"Annotations from the package javax.faces.bean will be deprected in the next JSF version. CDI ones are recommanded instead."



(好吧,这里有另一个用于该注释的替代包:javax.annotation.ManagedBean,但我不知道我是否可以使用它,也不知道它是否具有用于在网页上引用 bean 的参数以及它是哪一个)

所以现在我开始怀疑 future 我应该使用哪种容器组合。 CDI + EJB 是 future 吗?

为所有人喝彩。

最佳答案

Java EE 7 越来越符合 CDI。因此,EJB 将只是 CDI + 强大服务(异步、消息消费者、调度任务......)的一个非常特殊的案例。考虑到这一点,@ManagedBean变得多余,因为 @Named允许您将 bean 公开给 JSF 页面。

随着技术的成熟,您将随处可见 CDI 容器(即使对于独立应用程序也是如此)。

需要记住的几点:

  • 服务层不仅适用于@Stateless@Stateful .现在,每个类都可以是 @Named并被注入(inject)(并使用这意味着作为拦截器、生命周期管理、资源注入(inject)的服务)。
  • 演示文稿不仅适用于 @ManagedBean .每@Named可能位于具有相关范围( session 、 View ...)的网页后面
  • 不仅 EJB 是事务性的,现在每个 @Named@Transactional (Java EE 7) 可以写入数据库。

  • 架构得到简化,模式相同(MVC,边界控制实体),只需更改注释和一点你的实现。

    目前有一个成熟的项目叫 Apache DeltaSpike使用一些可移植的相关 CDI 扩展,并且在大多数情况下会简化您的生活(即使您使用的是 Java EE 6!)。

    注意:在 Java EE 7 中使用完整的 CDI 可能比在 Java EE 6 中更容易,因为 6 没有 @Transactional ,因此您需要自己创建一个事务拦截器。

    DeltaSpike 说:

    Transactional support for non-EJB beans: The Transactional Interceptor in DeltaSpike paved the way for @Transactional in Java EE 7.

    关于jakarta-ee - JSF、CDI 和 EJB 容器 : which combination of them should be used?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19333051/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com