我正在尝试在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(或任何其他解决此问题的方法)?
干杯,
Ĵ
答案 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