7

我正在尝试在 Glassfish V2 上将 Hibernate 3.5.5 与 Spring HibernateJpaVendorAdapter 一起使用,但是在初始化 Spring 上下文时出现以下异常:

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

在 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

4 回答 4

4

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

于 2010-10-01T16:04:07.640 回答
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 不是朋友!

于 2010-10-03T21:35:38.510 回答
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>
于 2010-10-01T17:31:35.780 回答
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
commons-logging-1.1.jar
webservices-api.jar

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

于 2012-08-31T14:52:18.173 回答