2012-03-16 132 views
0

我是JPA的新手,所以在搜索了一段时间后,我试图找不到如何执行以下操作。如何创建在容器和独立应用程序中工作的JPA EntityManagerFactory?

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

问题是,我可以在单元测试中使用Persistence.createEntityManagerFactory和META-INF/persistence.xml,它工作正常。但是,它不适用于树脂,我在GWT开发模式中遇到同样的错误。

我可以通过使用@Inject注释和resin-web.xml来使它在树脂上工作,但不知道如何在GWT dev模式下使用它。

我想在所有3种情况下使用相同的代码:单元测试,用于GWT的Jetty和生产中的树脂。我还想让树脂处理连接池,并尽可能避免使用Spring。

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

+0

GWT开发模式有没有可用的guice? – 2012-03-16 05:25:28

+0

我想我可以自己使用guice和代码注入。这实际上是我想要做的。你能提供一个关于如何在这些情况下使用guice注入的代码片段吗? – HowDoIUnregisterThisAccount 2012-03-16 13:41:00

回答

0

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

所以,这里的想法是做同样的事情,当它运行你的代码时,树脂做。 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测试和webapps的教程,但我认为这可能会成为您的跳闸点。其余的步骤如下所示:添加Guice过滤器,扩展GuiceServletContextListener,添加JPA注入器,将侦听器添加到web.xml。

祝你好运!

+0

嗨exabrial。感谢您的答复。我用这里描述的guice注入:http://www.benmccann.com/dev-blog/hibernate-with-jpa-annotations-and-guice/。它在单元测试中工作正常。我不知道如何在Jetty上运行并让Resin注入生产时如何有条件地将EntityManager注入Guice。如果我理解正确,建议在web.xml中使用guice listener来有条件地执行此操作。 – HowDoIUnregisterThisAccount 2012-03-16 20:27:14

相关问题