繁体   English   中英

将JSF与JPA集成

[英]Integrate JSF with JPA

我对JSF和JPA进行了一些研究。 阅读一些教程,并遵循一些示例。 在此之前,我将创建托管Bean,模型和服务来处理我的应用程序。

将JPA包含在此模式中的最佳实践是什么? 是否应在同一Service类中包含JPQL查询和数据库调用? 在某些示例中,我看到JPA与Invoke应用程序阶段中调用的方法在同一托管Bean中实现,还是在其他托管Bean中实现JPA? 与这两个一起使用的常见做法是什么?

您应该将JPA访问权限合并到一种或另一种DAO或服务层中,如果没有其他原因,您可以将该DAO层存入单元测试中。 然后,所有您的JSF托管bean都会通过该类路由其JPA访问。 这样,每当您从JSF托管bean访问JPA时,就可以模拟单个DAO方法调用,而不是分别模拟EntityManagerQuery等。

现在,更棘手的问题是:DAO /服务层应该是另一个JSF管理的bean,EJB还是其他东西? 从某种意义上讲,这比确认要分离JPA访问要重要。

我个人开始使用@ManagedProperty进行注入,使DAO成为JSF托管的另一种风味。 然后,我在Java EE 6中发现了CDI,并使用@Named / @Inject使其成为POJO。

但是,如果您正在执行写操作而不是只读操作,则应考虑在一个单独的服务层上声明事务-如果使用JSF, @Stateless EJB可能最有意义。

希望这可以帮助!

我是一名自学者,因此请原谅我的措辞可能不合适。

如果您看到此答案 ,那么将提供指向NetBeans向导的链接,该向导用于创建RESTful Web服务。 这肯定超出了您的问题范围,但是生成的DAO类确实很有帮助,可以用于JSF项目。 如果需要,可以删除JAX-RS RESTful批注,但其余部分保留。

然后,将自动生成的Facade类(使用EJB注释)注入Bean中。 在这些Facade和Entity类中,已经编写了基本JPA查询。

如果需要创建更复杂的查询,则还可以使用类型安全的Criteria API代替JPQL。 最初的工作量更大,但是Criteria API允许您以OO方式编写复杂的查询,这在某些具体情况下也很有用,例如在“ WHERE”语句中使用多个条件(其编号是像在Advanced Search一样动态生成的) )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM