将Glassfish v2升级到JPA 2.0?

时间:2010-10-01 15:55:39

标签: orm jpa glassfish jpa-2.0 hibernate3

我正在尝试在Glassfish V2上使用Hibernate 3.5.5和Spring HibernateJpaVendorAdapter,但是在Spring上下文初始化时我得到以下异常:

java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getSharedCacheMode()Ljavax/persistence/SharedCacheMode;

at org.hibernate.ejb.util.LogHelper.logPersistenceUnitInfo(LogHelper.java:39)  在org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:517)  在org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)

问题是Glassfish V2使用JPA1.0,它在hibernate附带的hibernate-jpa-2.0-api-1.0.0.Final.jar之前加载到服务器类路径上。 JPA 1.0在PersistenceUnitInfo中没有getSharedCacheModel方法,但JPA 2.0没有。

有没有办法升级Glassfish V2以使用JPA 2.0(或任何其他解决此问题的方法)?

干杯,

Ĵ

4 个答案:

答案 0 :(得分:4)

您可以尝试将JPA 2.0 jar放在/domain/lib/endorsed目录

答案 1 :(得分:1)

感谢您的反馈。将jpa jar放在/ domain / lib / endorsed中为我工作。

设置...

<sun-web-app error-url="">
    <class-loader delegate="false"/>
</sun-web-app>

...对我来说不起作用,虽然这可能只是因为这些类是javax的一部分。

我还试图剥离Spring的JPATemplate并直接使用JPA @PersistenceContext EntityManager - 这会引起各种各样的问题。 Glassfish v2 + Spring + Hibernate不是朋友!

答案 2 :(得分:0)

据我所知,通过简单地替换库并使用容器管理 JPA 2.0 EntityManager来升级Java EE 5容器核心JPA库是不可能的。

但是,应该可以将JPA 2.0实现与应用程序级别提供的JPA 2.0 API库一起使用,并使用应用程序托管的 JPA 2.0 EntityManager。

要使用GlassFish v2尝试第二种方法,您需要关闭类加载器委派(以便首先使用应用程序库)。这可以在您sun-web.xml下打包的WEB-INF进行配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app
        PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 8.1 Servlet 2.4//EN"
        "http://www.sun.com/software/appserver/dtds/sun-web-app_2_4-1.dtd">
<sun-web-app error-url="">
    <class-loader delegate="false"/>
</sun-web-app>

答案 3 :(得分:0)

Glassfish 2.1不支持JPA 2,我下载了JPA 2版本并粘贴到$GLASSFISH_HOME/lib/endorsed/目录中,并粘贴到commons-loggin1.1.jar,这对我有用。

看起来像这样:

/ glassfish / lib / endorsed $ ls
的activation.jar
OpenJPA的-ALL-2.0.1.jar
共享记录-1.1.jar
webservices-api.jar

http://glassfish.java.net/public/comparing_v2_and_v3.html
http://openjpa.apache.org/downloads.html