【问题标题】:Hibernate Weblogic 10.3.4 java.lang.NoSuchMethodError: javax/persistence/spi/PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;Hibernate Weblogic 10.3.4 java.lang.NoSuchMethodError: javax/persistence/spi/PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
【发布时间】:2014-06-24 14:02:09
【问题描述】:

我在 Ubuntu 12.04 LTS 上运行 weblogic 10.3.4(是的,我知道它是一个旧版本,但我不是指定版本的人...)。

在我得到的服务器上部署 JPA (hibernate) webapp 时

java.lang.NoSuchMethodError: javax/persistence/spi/PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:629)
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
    at weblogic.deployment.BasePersistenceUnitInfoImpl.initializeEntityManagerFactory(BasePersistenceUnitInfoImpl.java:393)
    at weblogic.deployment.BasePersistenceUnitInfoImpl.initializeEntityManagerFactory(BasePersistenceUnitInfoImpl.java:386)
    at weblogic.deployment.BasePersistenceUnitInfoImpl.<init>(BasePersistenceUnitInfoImpl.java:158)
    Truncated. see log file for complete stacktrace
Caused By: java.lang.NoSuchMethodError: javax/persistence/spi/PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:629)
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
    at weblogic.deployment.BasePersistenceUnitInfoImpl.initializeEntityManagerFactory(BasePersistenceUnitInfoImpl.java:393)
    at weblogic.deployment.BasePersistenceUnitInfoImpl.initializeEntityManagerFactory(BasePersistenceUnitInfoImpl.java:386)
    at weblogic.deployment.BasePersistenceUnitInfoImpl.<init>(BasePersistenceUnitInfoImpl.java:158)
    Truncated. see log file for complete stacktrace

我可以看到 很多 人有同样的问题。

官方解决方案在http://docs.oracle.com/cd/E17904_01/web.1111/e13720/using_toplink.htm#EJBAD1309 这告诉我要添加:

#Enable JPA 2.0 functionality on WebLogic Server 10.3.4
export PRE_CLASSPATH=%BEA_HOME%\modules\javax.persistence_1.0.0.0_2-0-0.jar;%BEA_HOME%\modules\com.oracle.jpa2support_1.0.0.0_2-0.jar

到 WL_HOME/common/bin/commEnv.sh

这没用

我的 weblogic.xml 是一个跟随者

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <container-descriptor>
        <prefer-web-inf-classes>true</prefer-web-inf-classes>
    </container-descriptor>
</weblogic-web-app>

我还在那里尝试了许多其他版本,有些版本在上面添加了问题,例如java.lang.NoSuchMethodError: javax/persistence/spi/PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <container-descriptor>
    <prefer-application-packages>
        <package-name>antlr.*</package-name>
        <package-name>org.hibernate.*</package-name>
        <package-name>javax.persistence.*</package-name>
    </prefer-application-packages>
 </container-descriptor>

这反而给了我:

weblogic.application.ModuleException: Failed to load webapp: 'administration-gui.war'
    at weblogic.servlet.internal.WebAppModule.prepare(WebAppModule.java:393)
    at weblogic.application.internal.flow.ScopedModuleDriver.prepare(ScopedModuleDriver.java:180)
    at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:199)
    at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:518)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
    Truncated. see log file for complete stacktrace
Caused By: weblogic.deployment.EnvironmentException: Error processing persistence unit Offer of module administration-gui.war: Error instantiating the Persistence Provider class org.hibernate.ejb.HibernatePersistence of the PersistenceUnit Offer: java.lang.ClassCastException: org.hibernate.ejb.HibernatePersistence
    at weblogic.deployment.BasePersistenceUnitInfoImpl.getPersistenceProvider(BasePersistenceUnitInfoImpl.java:375)
    at weblogic.deployment.BasePersistenceUnitInfoImpl.initializeEntityManagerFactory(BasePersistenceUnitInfoImpl.java:393)
    at weblogic.deployment.BasePersistenceUnitInfoImpl.initializeEntityManagerFactory(BasePersistenceUnitInfoImpl.java:386)
    at weblogic.deployment.BasePersistenceUnitInfoImpl.<init>(BasePersistenceUnitInfoImpl.java:158)
    at weblogic.deployment.PersistenceUnitInfoImpl.<init>(PersistenceUnitInfoImpl.java:39)
    Truncated. see log file for complete stacktrace

【问题讨论】:

  • 您的类路径中可能有错误的 jar 文件或同一个 jar 的两个版本...stackoverflow.com/questions/22167945/…
  • 我们已经在使用 hibernate-jpa-2.0-api,正如链接中所建议的那样
  • 您是否检查过它是否在类路径中两次,其中之一是旧版本?
  • 你能解决这个问题吗?

标签: java hibernate jpa persistence weblogic


【解决方案1】:

在我看来,你必须删除

<dependency>
    <groupId>javax.persistence</groupId>    
    <artifactId>persistence-api</artifactId>
    <version>1.0.2</version>
</dependency>

因为您可能也间接导入了 ibernate-jpa-2.0-api 或 ibernate-jpa-2.1-api。

【讨论】:

    【解决方案2】:

    这需要设置为false:
    &lt;prefer-web-inf-classes&gt;**false**&lt;/prefer-web-inf-classes&gt;
    如果您正在使用:

    &lt;container-descriptor&gt;
    &lt;prefer-application-packages&gt;
    &lt;package-name&gt;antlr.*&lt;/package-name&gt;
    &lt;package-name&gt;org.hibernate.*&lt;/package-name&gt;
    &lt;package-name&gt;javax.persistence.*&lt;/package-name&gt;
    &lt;/prefer-application-packages&gt;
    &lt;/container-descriptor&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 2014-12-24
      相关资源
      最近更新 更多