我读了一些帖子(特别是 BalusC 帖子)并搜索了原因(不是很深),但我找不到为什么不应该使用实体 bean 作为托管 bean。什么原因?(我正在学习“Pro JSF 和 HTML5”,在本书中,实体 bean 被用作托管 bean。)
问问题
329 次
1 回答
3
关注点分离。
通常,企业应用程序是作为 EAR 而不是 WAR 开发和部署的。典型的 EAR 项目由作为“后端”的 EJB 子项目和作为“前端”的 WAR 子项目组成。EJB 子项目包含所有 JPA 实体和 EJB 服务。WAR 子项目包含所有 JSF 托管的 bean 和视图(以及与 JSF 不密切相关的内容,例如转换器、验证器、阶段侦听器等)。
一个好的 EJB 子项目可能对 JSF 没有任何依赖。这使其可重用于不同的前端,例如 Spring MVC、JAX-RS、Struts2、纯 JSP/Servlet 甚至面向桌面的 Swing 应用程序。这也意味着您的任何JPA 实体和 EJB 服务都不应在类中具有任何javax.faces.*
导入/依赖关系。例如FacesContext
,在 JPA 实体或 EJB 服务中拥有 at 是令人担忧的,因为它不一定存在于其他前端。
“Pro JSF 和 HTML5”专注于简单的 WAR 项目。为了展示可能性和/或保持示例“简单”,这是“可以的”,但是一旦他们成长为开发企业应用程序,这实际上会误导初学者,如果这本书没有涵盖设计问题,则更是如此细节。
也可以看看:
- JSF 服务层
- 在 JavaEE 6 WAR vs EAR 中打包 EJB - 我的同事 Arjan 的相关回答。
于 2014-08-21T17:20:40.257 回答