3.2.2.2. Configure Changes for Applications That Use Hibernate and JPA
Summary
If your application contains a persistence.xml
file or the code uses the annotations @PersistenceContext
or @PersistenceUnit
, JBoss EAP 6 detects this during deployment and assumes the application uses JPA. It implicitly adds Hibernate 4 plus a few other dependencies to your application classpath.
If your application currently uses Hibernate 3 libraries, in most cases you will be able to switch to using Hibernate 4 and run successfully. However, if you see
ClassNotFoundExceptions
when you deploy your application, you can try to resolve them using one of the following approaches.
Important
Applications that use Hibernate directly with Seam 2.2 may use a version of Hibernate 3 packaged inside the application. Hibernate 4, which is provided through the org.hibernate module of JBoss EAP 6, is not supported by Seam 2.2. This example is intended to help you get your application running on JBoss EAP 6 as a first step. Please be aware that packaging Hibernate 3 with a Seam 2.2 application is not a supported configuration.
Procedure 3.13. Configure the Application
Copy the required Hibernate 3 JARs to your application library.
You may be able to resolve the issue by copying the specific Hibernate 3 JARs that contain the missing classes into the application'slib/
directory or by adding them to the classpath using some other method. In some cases this may result inClassCastExceptions
or other class loading issues due to the mixed use of the Hibernate versions. If that happens, you need to use the next approach.Instruct the server to use only the Hibernate 3 libraries.
JBoss EAP 6 allows you to package Hibernate 3.5 (or greater) persistence provider jars with the application. To direct the server to use only the Hibernate 3 libraries and to exclude the Hibernate 4 libraries, you need to set thejboss.as.jpa.providerModule
tohibernate3-bundled
in thepersistence.xml
as follows:<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name="plannerdatasource_pu"> <description>Hibernate 3 Persistence Unit.</description> <jta-data-source>java:jboss/datasources/PlannerDS</jta-data-source> <properties> <property name="hibernate.show_sql" value="false" /> <property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" /> </properties> </persistence-unit> </persistence>
The Java Persistence API (JPA) deployer will detect the presence of a persistence provider in the application and use the Hibernate 3 libraries. For more information on the JPA persistence properties, see Section 3.2.2.3, “Persistence Unit Properties”.Disable Hibernate second-level cache
Second-level cache for Hibernate 3 does not exhibit the same behavior with JBoss EAP 6 as it did in previous releases. If you are using Hibernate second-level cache with your application, you must disable it until you upgrade to Hibernate 4. To disable second-level cache, set the<hibernate.cache.use_second_level_cache>
tofalse
in thepersistence.xml
file.