java hibernate maven configuration ehcache

java.lang.NoClassDefFoundError: org/hibernate/cache/EntityRegion configurando EHCache



maven configuration (4)

Desde Hibernate 4, hay una nueva introducción de hibernate-cache para el almacenamiento en caché. Esto necesita la última dependencia para net.sf.ehcache hasta 2.6. El siguiente artículo HAGA CLIC EN EL ENLACE . Cuando agrego la siguiente dependencia en mi pom, el error se eliminará:

<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.8.3</version> </dependency>

Estoy tratando de agregar ehcache (v2.6.0) a mi proyecto Hibernate 4.1.5.SP1 , pero tengo algunos problemas de configuración. Específicamente, java.lang.NoClassDefFoundError un error java.lang.NoClassDefFoundError : org/hibernate/cache/EntityRegion cuando intento compilar mi configuración de Hibernate con

<property name="hibernate.cache.use_second_level_cache">true</property> <property name="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</property>

Aquí están mis dependencias de Maven ...

<hibernate.version>4.1.5.SP1</hibernate.version> <hibernate.validator.version>4.3.0.Final</hibernate.validator.version> <ehcacheVersion>2.6.0</ehcacheVersion> ... <!-- Hibernate dependencies --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>${hibernate.validator.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>${ehcacheVersion}</version> </dependency>

Aquí está el código de Java que utilizo para configurarlo ...

Configuration config = new Configuration() .setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect") .setProperty("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver") .setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:myprojectTestDb") .setProperty("hibernate.connection.username", "sa") .setProperty("hibernate.connection.password", "") .setProperty("hibernate.connection.pool_size", "1") .setProperty("hibernate.connection.autocommit", "true") .setProperty("hibernate.cache.provider_class", "org.hibernate.cache.HashtableCacheProvider") .setProperty("hibernate.hbm2ddl.auto", "create-drop") .setProperty("hibernate.show_sql", "true") .setProperty("hibernate.current_session_context_class", "thread") .setProperty("hibernate.cache.use_second_level_cache", "true") .setProperty("hibernate.cache.region.factory_class", "net.sf.ehcache.hibernate.EhCacheRegionFactory") .addAnnotatedClass(Organization.class) .addAnnotatedClass(State.class) .addAnnotatedClass(Country.class) .addAnnotatedClass(Domain.class) .addAnnotatedClass(Community.class); final ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); sessionFactory = config.buildSessionFactory(serviceRegistry);

Y aquí está el error horrible. ¿Qué configuración me falta?

java.lang.NoClassDefFoundError: org/hibernate/cache/EntityRegion at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Unknown Source) at java.lang.Class.getConstructor0(Unknown Source) at java.lang.Class.getConstructor(Unknown Source) at org.hibernate.cfg.SettingsFactory.createRegionFactory(SettingsFactory.java:386) at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:251) at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2270) at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2266) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1735) at org.mainco.subco.orgsclient.service.OrganizationServiceTest.setupOrgServiceTest(OrganizationServiceTest.java:56) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.EntityRegion at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 32 more



Revisé maven las dependencias. Maven siempre carga ehcache-code cuando se carga el paquete hibernate-ehcache.

Árbol de dependencia:

+--- org.hibernate:hibernate-ehcache:4.3.0.Final | +--- org.jboss.logging:jboss-logging:3.1.3.GA | +--- org.jboss.logging:jboss-logging-annotations:1.2.0.Beta1 | +--- org.hibernate:hibernate-core:4.3.0.Final (*) | /--- net.sf.ehcache:ehcache-core:2.4.3 | /--- org.slf4j:slf4j-api:1.6.1 -> 1.6.6

Por favor, compruebe su configuración de persistencia. No debe incluir ninguna clase donde el nombre del paquete comience con "net.sf"

Por ejemplo, tienes que reemplazar la siguiente cadena en tu código:

.setProperty("hibernate.cache.region.factory_class", "net.sf.ehcache.hibernate.EhCacheRegionFactory")

con la siguiente cadena:

.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.EhCacheRegionFactory")


Configuration.setProperty("hibernate.cache.region.factory_class", "net.sf.ehcache.hibernate.EhCacheRegionFactory")

Para Hibernate 4, use

org.hibernate.cache.ehcache.EhCacheRegionFactory instead of net.sf.ehcache.hibernate.EhCacheRegionFactory

Artículo de configuración de hibernación