2012-06-25 81 views
1

对于在EJB3.1中使用JSF时的各种选项和最佳实践,我有几个问题。考虑到现有的令人望而生畏的选择和组合方式,我所拥有的心智模式远非明确,所以有些问题可能没有意义。通过EL代码,通过对bean类中使用的实际注释不可知的EL代码,JSF/Facelets引用了后备bean(我使用术语“支持bean”来表示bean的属性是从Facelets页面写入或读取的) (javax.faces.bean。*或javax.enterprise.context。*)。JSF/Facelets支持bean和EJB3

它是正确的说只是通过改变bean类进口没有任何改动的Facelets XHTML代码,可以JSFCDI范围注释之间进行切换?

难道JSF/Facelets的应仅适用于使用CDI所有范围和生命周期(加上注射)注解XHTML标记代码完成中使用的既定模式?

的JBoss AS设置,其中在JSF支持豆的生命周期管理(使用JSFCDI注解)发生?在Web容器中还是在EJB3容器中?

在鉴于SessionScoped豆可以通过CDI提供一个典型的web应用,是否有任何需要使用比那些类型的@Entity,例如其他EJB3豆对于每个“流”中当信息要在数据库中保存时的最后一个典型步骤?

回答

3

它是正确的说,一个可以只通过改变bean类进口没有任何改动的Facelets XHTML代码JSF和CDI范围注释之间进行切换?

是的。


难道JSF/Facelets的应仅适用于使用CDI所做的一切范围和生命周期(加上注射)标注的XHTML标记代码中使用的既定模式?

JSF正在走向CDI。即将推出的JSF 2.2的新@FlowScoped注释证明了这一点,因为这是从CDI API扩展而来的。唯一的缺点是CDI不提供标注注释的极其有用的JSF @ViewScoped。您需要@ConversationScoped,其中您手动开始和结束对话,或看看像MyFaces CODI这样的CDI扩展。


在JBoss应用服务器设置,其中在JSF支持豆的生命周期管理(使用JSF或CDI注解)发生?在Web容器中还是在EJB3容器中?

Web容器(在一个WAR的味道)。 JSF建立在Servlet API之上,所以它绝对是Web容器。


在鉴于SessionScoped豆可以通过CDI提供一个典型的web应用,是否有任何需要使用比那些类型@Entity,例如其他EJB3豆对于每个“流”中当信息要在数据库中保存时的最后一个典型步骤?

@Entity是JPA的一部分,而不是EJB的一部分。 @Entity将用于映射到数据库表的模型类,通常仅用于跨层传输数据。您最后描述的内容听起来像是一个@Stateful EJB的候选人。要更好地理解@Stateless@Stateful EJB,请前往以下详细答案:JSF request scoped bean keeps recreating new Stateful session beans on every request?

+0

对不起,被可怕的“Stack Overflow需要来自其他域的外部JavaScript”问题困扰,无法立即接受您的答案。 –

+0

你的回答非常明确。我认识到有点毛骨悚然的是EJB的生命周期和支持bean的生命周期之间的关系。在我看来,原则上说,EJB bean是一个完全不同的野兽,并且没有与JSF页面及其支持bean的任何直接连接。然而,在各自豆类的生命周期中似乎存在某种脆弱的依赖性和一些有效和无效的组合。您分享的文章有一些亮点,但我想这是无法替代实际操作体验的。 –

+0

应将EJB用作业务服务。他们不应该关心任何JSF构件,只处理模型对象('@ Entity'实例)。 JSF支持bean(一个控制器)应该有一个模型对象('@ Entity')作为视图使用的属性,还有一个EJB作为服务(由'@ EJB'注入)。 JSF支持bean应该有执行EJB方法的动作方法。这些操作方法然后绑定到视图中的命令链接/按钮/ ajaxlisteners。 – BalusC