我对JPA很陌生,所以在搜索了一段时间之后,我想不出该如何做以下事情。
我希望在单元测试、生产-树脂应用服务器以及GWT (jetty)的开发模式中使用JPA注释类。
问题是,在单元测试中,我可以将Persistence.createEntityManagerFactory与META/sistence.xml一起使用,而且效果很好。但是,它不适用于树脂,我在GWT开发模式中也得到了同样的错误。
我可以通过使用@Inject注解和树脂-web.xml让它在树脂上工作,但不确定如何在GWT模式下使用它。
如果可能的话,我想在所有3种情况下使用相同的代码:单元测试、GWT的Jetty和生产中的树脂。我也喜欢让树脂处理连接池,如果可能的话避免使用Spring。
是否有涵盖此特定案例的教程或任何代码示例?什么是最佳做法?
发布于 2012-03-16 07:18:58
因为您可以使用Guice,所以Guice可以删除现有的@Inject注释。
因此,这里的想法是在运行您的代码时执行与树脂相同的操作。树脂识别@Inject注释,找到适当的类并实例化,而不是注入该值。我们可以让Guice为您的单元测试和GWT模式做同样的事情。
最大的改变是您必须为您的persistence.xml创建一个单独的配置文件。复制现有文件并更改名称。例如,如果您现有的PU是"myJPAUnit",那么在新文件中,将它命名为"myJPAUnitLocal“如下:
<persistence-unit name="myJPAUnitLocal" transaction-type="RESOURCE_LOCAL">
</persistence-unit>
另一个关键更改是将transaction-type
更改为RESOURCE_LOCAL
,如上面的示例所示,因为您的事务不是由容器管理的。
我不会讨论预reqs,因为Google上有很多关于用Guice运行Junit测试和webapps的好教程,但我认为这可能是一个绊脚点。剩下的步骤如下:添加Guice过滤器,扩展GuiceServletContextListener,向其中添加JPA注入器,将侦听器添加到web.xml中。
如何在webapp:http://code.google.com/p/google-guice/wiki/ServletModule
添加JPA注入器
祝好运!
https://stackoverflow.com/questions/9730518
复制