Search code examples
java-8jpa-2.0ejb-3.0weblogic12c

weblogic.management.DeploymentException: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()


On deploying EJB application on Weblogic : 12.2.1 , I am facing the exception :

"weblogic.management.DeploymentException: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode"

I have the below configuration in persistence.xml to specify persistence provider

<persistence-unit name="entityManager">
<!-- Use Hibernate persistency -->  
<provider>org.hibernate.ejb.HibernatePersistence</provider>

and below in weblogic-application.xml

<prefer-application-packages>
<package-name>antlr.*</package-name>
<package-name>javax.persistence.*</package-name>

Before this exception I was facing the exception "Error instantiating Persistence Provider class java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence" which got resolved from

Error instantiating Persistence Provider class java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence

and since then I am facing this exception

I have provided below jars in the WL_DOMAIN/lib :-

  1. hibernate-jpa-2.0-api-1.0.1.Final
  2. com.oracle.jpa2support_1.0.0.0_2-1
  3. hibernate
  4. dom4j

    Also have provided in the classpath in below files as follows in WL_DOMAIN ---setDomainEnv.cmd

    set EXT_PRE_CLASSPATH=C:\Projects\GMPP-CBOSS\MFSS\MFSS\lib\hibernate\slf4j- api.jar;C:\Projects\GMPP-CBOSS\MFSS\MFSS\lib\hibernate\hibernate-jpa-api.jar

    ---TrivEnv.cmd

    set CLASSPATH=C:\oracle\Middleware2\modules\javax.persistence_1.0.0.0_1-0- 2.jar;C:\oracle\Middleware2\modules\com.oracle.jpa2support_1.0.0.0_2- 1.jar;%CLASSPATH%

    ----commonEnv.cmd -----oracle_common/common/bin

    set CLASSPATH=C:\oracle\Middleware2\modules\javax.persistence_1.0.0.0_1-0- 2.jar;C:\oracle\Middleware2\modules\com.oracle.jpa2support_1.0.0.0_2-1.jar;

Below is the stack trace of the exception:-

   <28 May, 2018, 3:38:26,86 PM IST> <Warning> <Deployer> <WL-149078> <Stack 
trace for message 149004
weblogic.management.DeploymentException: java.lang.NoSuchMethodError:   
javax.persistence.spi.PersistenceUnitInfo.getValidationMode() 
Ljavax/persistence/ValidationMode;
    at weblogic.application.internal.BaseDeployment .throwAppException 
   (BaseDeployment.java:132)
    at weblogic.application.internal.BaseDeployment.prepare 
   (BaseDeployment.java:242)
    at weblogic.application.internal.EarDeployment.prepare 
 (EarDeployment.java:66)
    at weblogic.application.internal. DeploymentStateChecker.prepare 
  (DeploymentStateChecker.java:158)
    at weblogic.deploy.internal.targetserver.AppContainerInvoker. 
  prepare(AppContainerInvoker.java:65)
    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:625)
    at org.hibernate.ejb.HibernatePersistence.createContainer 
  EntityManagerFactory (HibernatePersistence.java:73)
    at weblogic.persistence.BasePersistenceUnitInfo.initializeEntity 
 ManagerFactory(BasePersistenceUnitInfo.java:614)
    at weblogic.persistence.BasePersistenceUnitInfo. 
 init(BasePersistenceUnitInfo.java:202)
    at weblogic.persistence.BaseJPAIntegrationProvider. 
  createPersistenceUnitInfo(BaseJPAIntegrationProvider.java:54)
    Truncated. see log file for complete stacktrace
 >

Solution

  • It may be possible that javax.persistence_1.0.0.0_2-0-0.jar was added at the beginning and also at the end of server classpath (in DOMAIN_HOME/lib dir).

    As a result of this, two versions of the same jar in the same server classpath cause inconsistencies.

    SOLUTION Remove javax.persistence_1.0.0.0_2-0-0.jar from the DOMAIN_HOME/lib dir.

    Source :- https://support.oracle.com/epmos/faces/SearchDocDisplay?_adf.ctrl-state=5zdu0pjx6_53&_afrLoop=302462572500859