Alagammal P
Alagammal P

Reputation: 909

Hibernate version to support Oracle12cDialect and JPA 2.0

I deploy my application (Spring + Hibernate + JPA) to Websphere application server and application connects to Database version Oracle 12c.

In order to support Oracle 12c DB I need Oracle12c Dialect and Websphere Application server(8.5.5) supports JPA 2.0.

I see Hibernate versions > 5 are only providing Oracle12cDialect and don't provide JPA 2.0 instead it has (hibernate-jpa-2.1-api-1.0.0.Final.jar)

JPA 2.0 is supported by V3.5 to V4.2 (But These versions are not available with Oracle12cDialect)

When I use hibernate-entitymanager.5.0.7.Final.jar I get the below error during the service call.

Error :

Caused by: java.lang.ClassCastException: com.ibm.websphere.persistence.PersistenceProviderImpl incompatible with javax.persistence.spi.PersistenceProvider
                at javax.persistence.Persistence$1.isLoaded(Persistence.java:110) ~[hibernate-jpa-2.1-api-1.0.0.Final.jar:1.0.0.Final]
                at org.hibernate.validator.internal.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:57) ~[hibernate-validator-4.3.0.Final.jar:4.3.0.Final]
                at org.hibernate.validator.internal.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:130) ~[hibernate-validator-4.3.0.Final.jar:4.3.0.Final]
                at org.hibernate.validator.internal.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:46) ~[hibernate-validator-4.3.0.Final.jar:4.3.0.Final]
                at org.hibernate.validator.internal.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:1221) ~[hibernate-validator-4.3.0.Final.jar:4.3.0.Final

If I try keeping hibernate-jpa-2.1-api-1.0.0.Final.jar scope as provided from application, it creates the below issue as the AttributeConverter class is not available in Websphere JPA 2.0

ERROR o.s.web.servlet.DispatcherServlet - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax.persistence.AttributeConverter
                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) ~[spring-beans-3.1.3.RELEASE.jar:3.1.3.RELEASE]
Caused by: java.lang.NoClassDefFoundError: javax.persistence.AttributeConverter
                at org.hibernate.boot.internal.MetadataBuilderImpl.<init>(MetadataBuilderImpl.java:127) ~[hibernate-core-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.boot.MetadataSources.getMetadataBuilder(MetadataSources.java:135) ~[hibernate-core-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:185) ~[hibernate-entitymanager-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:34) ~[hibernate-entitymanager-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:165) ~[hibernate-entitymanager-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:160) ~[hibernate-entitymanager-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:135) ~[hibernate-entitymanager-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:50) ~[hibernate-entitymanager-5.0.7.Final.jar:5.0.7.Final]
                at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:287) ~[spring-orm-3.1.3.RELEASE.jar:3.1.3.RELEASE]
                at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) ~[spring-orm-3.1.3.RELEASE.jar:3.1.3.RELEASE]
                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) ~[spring-beans-3.1.3.RELEASE.jar:3.1.3.RELEASE]
                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) ~[spring-beans-3.1.3.RELEASE.jar:3.1.3.RELEASE]
                ... 69 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.persistence.AttributeConverter
                at java.net.URLClassLoader.findClass(URLClassLoader.java:600) ~[na:1.7.0]
                at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:240) ~[bootstrap.jar:WAS855.SERV1 [cf051507.01]]
                at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:941) ~[na:1.7.0]
                at java.lang.ClassLoader.loadClass(ClassLoader.java:876) ~[na:1.7.0]
                at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:133) ~[bootstrap.jar:WAS855.SERV1 [cf051507.01]]
                at java.lang.ClassLoader.loadClass(ClassLoader.java:846) ~[na:1.7.0]
                at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62) ~[com.ibm.ws.runtime.jar:WAS855.SERV1 [cf051507.01]]
                at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58) ~[com.ibm.ws.runtime.jar:WAS855.SERV1 [cf051507.01]]
                at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:617) ~[com.ibm.ws.runtime.jar:WAS855.SERV1 [cf051507.01]]
                at java.lang.ClassLoader.loadClass(ClassLoader.java:846) ~[na:1.7.0]
                at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:617) ~[com.ibm.ws.runtime.jar:WAS855.SERV1 [cf051507.01]]
                at java.lang.ClassLoader.loadClass(ClassLoader.java:846) ~[na:1.7.0]
                ... 81 common frames omitted

If I use the Hibernate version to support JPA 2.0, then need to use Oracle10gDialect only.

Any idea please from hibernate and webSphere members?

Upvotes: 1

Views: 1573

Answers (1)

Matteo Baldi
Matteo Baldi

Reputation: 5828

No solution for this issue, you can only:

  • Upgrade your Websphere version to WAS 9.0 (sure, that's an easy task :) )
  • Keep using Oracle10gDialect which, aside from version specific details (but I've never encountered any issue in a simple JPA use), works just fine with Oracle 12.

P.S. There is an IBM note about enabling JPA 2.1 on WAS 8.5.5 but, honestly, the effort doesn't pay off (no more container managed persistence? No thanks).

Upvotes: 1

Related Questions