0

我是 JPA 的新手,所以在搜索了一段时间并尝试之后,我无法弄清楚如何做以下事情。

我想在单元测试、生产-树脂应用服务器和 GWT (jetty) 的开发模式中使用 JPA 注释类。

问题是我可以在单元测试中将 Persistence.createEntityManagerFactory 与 META-INF/persistence.xml 一起使用,并且效果很好。但是,它不适用于树脂,我在 GWT 开发模式下遇到同样的错误。

我可以通过使用@Inject 注释和resin-web.xml 让它在树脂上工作,但不确定如何在GWT 开发模式下使用它。

如果可能,我想对所有 3 种情况使用相同的代码:单元测试、GWT 的 Jetty 和生产中的树脂。我也喜欢让树脂处理连接池,并尽可能避免使用 Spring。

是否有任何涵盖此特定案例的教程或任何代码示例?最佳实践是什么?

4

1 回答 1

0

由于您愿意使用 Guice,因此 Guice 可以搭载现有的 @Inject 注释。

因此,这里的想法是做与 Resin 在运行代码时所做的相同的事情。Resin 识别 @Inject 注释,找到适当的类并实例化,然后注入该值。我们可以让 Guice 为您的单元测试和 GWT 模式做同样的事情。

最大的变化是您必须为您的 persistence.xml 创建一个单独的配置文件。复制现有文件并更改名称。例如,如果您现有的 PU 是“myJPAUnit”,则在新文件中,将其命名为“myJPAUnitLocal”,如下所示:

 <persistence-unit name="myJPAUnitLocal" transaction-type="RESOURCE_LOCAL">
 </persistence-unit>

另一个关键更改是更改transaction-typeRESOURCE_LOCAL如上例所示,因为您的事务不是由容器管理的。

我不会介绍先决条件,因为 Google 上有很多关于使用 Guice 运行 Junit 测试和 web 应用程序的好教程,但我认为这对你来说可能是一个绊脚石。其余步骤类似于:添加 Guice 过滤器,扩展 GuiceServletContextListener,向其中添加 JPA 注入器,将侦听器添加到 web.xml。

祝你好运!

于 2012-03-16T15:18:58.263 回答