Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Orm 是否将Glassfish v2升级到JPA 2.0?_Orm_Jpa_Glassfish_Jpa 2.0_Hibernate3 - Fatal编程技术网

Orm 是否将Glassfish v2升级到JPA 2.0?

Orm 是否将Glassfish v2升级到JPA 2.0?,orm,jpa,glassfish,jpa-2.0,hibernate3,Orm,Jpa,Glassfish,Jpa 2.0,Hibernate3,我试图在Glassfish V2上使用Hibernate 3.5.5和Spring HibernateJavaEndorapter,但在初始化Spring上下文时出现以下异常: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getSharedCacheMode()Ljavax/persistence/SharedCacheMode; 位于org.hibernate.ejb.util.LogHelpe

我试图在Glassfish V2上使用Hibernate 3.5.5和Spring HibernateJavaEndorapter,但在初始化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.createContainerEntityManager工厂(HibernatePersistence.java:73)

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

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

干杯


J

您可以尝试将JPA 2.0 jar放入
/domain/lib/approved
dir

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

但是,应该可以使用JPA2.0实现和在应用程序级别提供的JPA2.0API库,并使用应用程序管理的JPA2.0EntityManager

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

<?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>

感谢各位的反馈。把jpa jar放在/domain/lib/annowned中对我来说很有用

设置

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

…对我来说不起作用,尽管这可能只是因为类是javax的一部分


我还尝试剥离Spring的JPATemplate并直接使用JPA@PersistenceContext EntityManager——但这导致了各种各样的问题。玻璃鱼v2+春天+冬眠不是朋友

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

看起来是这样的:

/glassfish/lib/背书$ls
激活.jar
openjpa-all-2.0.1.jar
commons-logging-1.1.jar
webservices-api.jar



升级到Glassfish 3会是一种选择吗?哇,我必须承认我很惊讶。我甚至不明白这是如何工作的(我的意思是,在不破坏容器管理的JPA的情况下)。并不是说我真的用过它(两年前用过玻璃鱼),但我想我可以推荐它这对我不管用。你的意思是:$GLASSFISH_HOME/domains/domain1/lib/背书还是$GLASSFISH_HOME/lib/背书?谢谢。根据Glassfish文档,这不适用于这种情况:对于许多包,包括java.*和javax.*,符号解析总是委托给父类加载器,而不管委托设置如何。这可以防止应用程序重写核心Java运行时类或更改作为Java EE平台一部分的规范的API版本。”