Добавление hibernate-ehcache.jar и ehcache-core.jar в WildFly в качестве модуля
Настройка провайдера кеша в persistence.xml
наряду с некоторыми другими связанными свойствами следующим образом.
<shared-cache-mode>ALL</shared-cache-mode>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.event.merge.entity_copy_observer" value="allow"/>
<property name="hibernate.use_sql_comments" value="true" />
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.use_structured_entries" value="true"/>
<property name="hibernate.cache.generate_statistics" value="true"/>
<property name="hibernate.cache.infinispan.statistics" value="true" />
<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>
</properties>
Это работает, когда следующие два JAR-файла добавляются в путь к классам времени компиляции самого модуля EE.
- Зимуют-EHCache-5.0.6.Final.jar
- EHCache-ядро-2.4.3.jar
Разрешено ли добавлять эти файлы JAR на сам сервер как модуль, поскольку эти файлы JAR не обязательно должны присутствовать в пути к классам во время компиляции?
Я получаю исключение, когда модуль, подобный следующему, пытается ${Home}/modules/system/layers/base/net/sf/ehcache/main/module.xml
,
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="net.sf.ehcache">
<resources>
<resource-root path="hibernate-ehcache-5.0.6.Final.jar"/>
<resource-root path="ehcache-core-2.4.3.jar"/>
</resources>
<dependencies>
<module name="org.hibernate"/>
<module name="org.slf4j"/>
</dependencies>
</module>
Это вызывает следующее исключение, как если бы оно не имело никакого эффекта вообще.
15:53:32,671 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 17) MSC000001: Failed to start service jboss.persistenceunit."WildFly.ear/WildFly-ejb.jar#org.hibernate.project.unit".__FIRST_PHASE__: org.jboss.msc.service.StartException in service jboss.persistenceunit."WildFly.ear/WildFly-ejb.jar#org.hibernate.project.unit".__FIRST_PHASE__: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.cache.spi.RegionFactory]
at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl$1$1.run(PhaseOnePersistenceUnitServiceImpl.java:121)
at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl$1$1.run(PhaseOnePersistenceUnitServiceImpl.java:103)
at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:665)
at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl$1.run(PhaseOnePersistenceUnitServiceImpl.java:130)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.cache.spi.RegionFactory]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:244)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
at org.hibernate.boot.internal.MetadataBuilderImpl$MetadataBuildingOptionsImpl.<init>(MetadataBuilderImpl.java:663)
at org.hibernate.boot.internal.MetadataBuilderImpl.<init>(MetadataBuilderImpl.java:127)
at org.hibernate.boot.MetadataSources.getMetadataBuilder(MetadataSources.java:135)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:185)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:149)
at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:28)
at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:40)
at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.<init>(TwoPhaseBootstrapImpl.java:39)
at org.jboss.as.jpa.hibernate5.HibernatePersistenceProviderAdaptor.getBootstrap(HibernatePersistenceProviderAdaptor.java:159)
at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl.createContainerEntityManagerFactoryBuilder(PhaseOnePersistenceUnitServiceImpl.java:243)
at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl.access$800(PhaseOnePersistenceUnitServiceImpl.java:60)
at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl$1$1.run(PhaseOnePersistenceUnitServiceImpl.java:118)
... 7 more
Caused by: org.hibernate.HibernateException: could not instantiate RegionFactory [org.hibernate.cache.ehcache.EhCacheRegionFactory]
at org.hibernate.cache.internal.RegionFactoryInitiator.initiateService(RegionFactoryInitiator.java:84)
at org.hibernate.cache.internal.RegionFactoryInitiator.initiateService(RegionFactoryInitiator.java:29)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:234)
... 21 more
Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.cache.ehcache.EhCacheRegionFactory] as strategy [org.hibernate.cache.spi.RegionFactory]
at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor(StrategySelectorImpl.java:113)
at org.hibernate.cache.internal.RegionFactoryInitiator.initiateService(RegionFactoryInitiator.java:71)
... 24 more
Разрешено ли добавлять эти два файла JAR на сервер в виде модуля или существует другой способ достижения этого?
Модуль org.hibernate
содержит следующие ресурсы вместе с их зависимостями.
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="org.hibernate">
<resources>
<resource-root path="hibernate-core-5.0.6.Final.jar"/>
<resource-root path="hibernate-envers-5.0.6.Final.jar"/>
<resource-root path="hibernate-entitymanager-5.0.6.Final.jar"/>
</resources>
<dependencies>
<module name="asm.asm"/>
<module name="com.fasterxml.classmate"/>
<module name="javax.api"/>
<module name="javax.annotation.api"/>
<module name="javax.enterprise.api"/>
<module name="javax.persistence.api"/>
<module name="javax.transaction.api"/>
<module name="javax.validation.api"/>
<module name="javax.xml.bind.api"/>
<module name="org.antlr"/>
<module name="org.apache.commons.collections"/>
<module name="org.dom4j"/>
<module name="org.javassist"/>
<module name="org.jboss.as.jpa.spi"/>
<module name="org.jboss.jandex"/>
<module name="org.jboss.logging"/>
<module name="org.jboss.vfs"/>
<module name="org.hibernate.commons-annotations"/>
<module name="org.hibernate.infinispan" services="import" optional="true"/>
<module name="org.hibernate.jipijapa-hibernate4-3" services="import"/>
</dependencies>
</module>
Я использую Hibernate 5.0.6 final в WildFly 9.0.2 final.
2 ответа
Я думаю, что вы должны сделать эти шаги:
Добавьте hibernate-ehcache.jar в основной модуль hibernate;
Добавьте ehcache как модуль wildfly. Вы должны создать папку: [wildfly]/modules/system/ слои / base / net / sf / ehcache / main с ehcache jar и module.xml.
- Сделайте ссылку на модуль ehcache в основном файле hibernate module.xml.
С уважением
Стив
В Wildfly (например, версия 10) вы можете использовать Infinispan (совместимый с JSR107), чтобы вместо этого сделать кэш L2. В каталоге модулей wildfly - org/hibernate/main/module.xml, вы должны использовать их так (не нужно указывать "hibernate-ehcache-5.0.11.Final.jar"):
<resource-root path="hibernate-core-5.0.11.Final.jar"/>
<resource-root path="hibernate-envers-5.0.11.Final.jar"/>
<resource-root path="hibernate-entitymanager-5.0.11.Final.jar"/>
<resource-root path="hibernate-java8-5.0.11.Final.jar"/>
Сервер WildFly загружается по умолчанию с Infinispan.
В вашем файле persistance.xml конфигурация будет такой:
<!-- enable query cache -->
<property name="hibernate.cache.use_query_cache" value="true"/>
<!-- EhCache provider-->
<!-- <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/> -->
<!-- 2nd level cache -->
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<!-- enable statistics -->
<property name="hibernate.generate_statistics" value="false"/>
<!-- for Wildfly only -->
<property name="wildfly.jpa.hibernate.search.module" value="org.hibernate.search.orm:5.5.5.Final"/>