JSF Bean和EJB Bean之间的区别

17

我需要一些澄清。我知道如何使用JSF及其相应的会话bean,但我对EJB感到困惑。使用EJB引入的bean和与JSF一起使用的会话bean之间有什么区别(对于ejb,我知道有无状态/完整会话bean和实体bean、实体管理器等)。我不明白的是何时使用EJB和何时使用jsf bean。除了实体bean外,ejb有状态/无状态会话bean似乎与jsf会话bean类似。我已经阅读了有关将ejb注入到jsf中的文章,但为什么不只是将ejb与jsf bean结合使用呢?希望您能理解我的困惑。谢谢。

3个回答

12

首先,我们需要了解JSFEJB bean之间的区别。

  1. JSF beans是用于读取JSF组件值的POJO类。JSF中有两种类型的bean:

    • Managed bean关注Java bean如何创建和初始化。正如您所知,JSF使用延迟初始化模型。这意味着特定范围内的bean不是在范围启动时创建和初始化,而是在按需即第一次需要bean时创建和初始化。

    • Backing bean关注特定托管bean所扮演的角色。这是一个作为页面上组件的服务器端表示的角色。通常,后备bean具有请求范围,但这不是限制。

  2. EJB Bean是封装应用程序业务逻辑的服务器端组件。业务逻辑是实现应用程序目的的代码。

主要有三种类型的会话Bean:
1. 有状态(Stateful)会话Bean
2. 无状态(Stateless)会话Bean
3. 单例(Singleton)会话Bean(EJB 3.1)

10

Java EE中有不同类型的托管bean,在其中确实存在一些混淆。更让人困惑的是,Java EE 6引入了第三种类型的托管bean:CDI bean。

在本回答中,我试图解释一下它们之间的区别和相似之处:How do CDI and EJB compare? interact?

简而言之,JSF托管bean主要不支持事务处理,在处理业务逻辑以及尤其是JPA时通常需要此功能。

另请注意,会话作用域托管bean中「会话」一词与无状态和有状态会话bean中所指的会话完全不同。


-1

网站上有另一个很好的答案,解释了CDI和EJB之间的区别。当你最终掌握整个画面时,它会帮助你很多。何时使用EJB 3.1和CDI?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接