Reputation: 909
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
Reputation: 5828
No solution for this issue, you can only:
Websphere
version to WAS 9.0
(sure, that's an easy task :) )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