我需要澄清一下。我知道如何使用JSF及其相应的会话bean,但我对EJB感到困惑。使用EJB引入的bean与JSF使用的会话bean之间有什么区别(对于ejb我知道无状态/完整会话bean和实体bean,实体管理器等)。我不知道的是何时使用EJB以及何时使用jsf bean。除了实体bean之外,ejb有状态/少会话bean看起来都类似于jsf会话bean。我已经阅读了关于注入ejb到jsf的内容,但为什么不将ejb与jsf bean结合使用呢?我希望你能理解我的困惑。谢谢。
答案 0 :(得分:10)
亚历
首先需要了解JSF bean和EJB bean之间的区别。
JSF Bean: JSF bean是pojo类,用于读取jsf的组件值。 jsf中有两种类型的bean
托管bean 是关于如何创建和初始化java bean的。如您所知,jsf使用延迟初始化模型。这意味着特定范围内的bean不是在范围启动时创建和初始化,而是按需创建和初始化,即在第一次需要bean时。
Backing bean 是关于特定托管bean所扮演的角色。这是位于页面上的组件的服务器端表示的角色。通常,支持bean具有请求范围,但它不是限制。
EJB Bean 是一个服务器端组件,它封装了应用程序的业务逻辑。业务逻辑是满足应用程序目的的代码。
主要有三种类型的会话bean -
1.Statefull会话bean
2.无状态会话bean
3.Singleton会话bean(ejb 3.1)
答案 1 :(得分:9)
Java EE中不同类型的托管bean之间确实存在一些混淆。更令人困惑的是,Java EE 6引入了第三种托管bean:CDI bean。
在这个答案中,我试着解释一下这些差异和相似之处:How do CDI and EJB compare? interact?
简单地说,JSF托管bean主要不提供对事务的支持,这是您在使用业务逻辑时尤其是JPA时经常需要的。
另请注意,会话作用域托管bean中的术语session
是一种完全不同类型的会话,而不是无状态会话bean和有状态会话bean所引用的会话。
答案 2 :(得分:-1)
在网站上还有另一个可靠的答案,其中解释了CDI和EJB的差异。当你最终掌握整体情况时,它会有很大的帮助。 Where to use EJB 3.1 and CDI?