JPA 2.1未加入Resin 3.1.9

时间:2014-10-14 04:58:01

标签: spring jpa jpa-2.1 resin

我使用Resin 3.1.9运行带有JPA 2.1的Java Web应用程序。 我已将库(JAR)放在我的WEB-INF / lib文件夹中,我将它们包含在resin.conf中:

<class-loader>
    <tree-loader path="${resin.root}/webapps/myapp/WEB-INF/lib"/>
</class-loader>

如果我没有将它包含在resin.conf中,我看到了一个关于无法加载某些类的异常(即使首次加载到主页上)。 好了,现在加载主页时没问题,但我想知道当我尝试添加一些记录(通过CRUD表格)时,它说:

java.lang.NoClassDefFoundError: javax/persistence/spi/PersistenceProvider

实际上,类javax.persistence.spi.PersistenceProvider绝对存在于“WEB-INF / lib”中,该文件位于“hibernate-jpa-2.1-api-1.0.0.Final.jar”文件中

是否有任何调试步骤如何在Resin启动期间检查加载的库? 或者我的resin.conf中有什么问题吗?

1 个答案:

答案 0 :(得分:0)

修改 经过一些调查后,似乎我对SPI问题的建议是错误的:没有正确声明的双JPA实现会引发PersistenceException。

这可能不是类加载问题,而是SPI问题。您是否在persistence.xml中检查了hibernate的provider元素?这应该是这样的:    

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

也许您还应该提到SPI声明,但是如果您有多个可用实现,则应该这样做。这可能是因为Java EE Web配置文件服务器的JPA实现。 在这种情况下,您应在

services
文件夹中添加

META-INF
文件夹,并在其中创建
javax.persistence.spi.PersistenceProvider
文本文件。

此文件应列出两个持久性提供程序实现(hibernate和Resin中包含的实现,我在文档中找不到它)。