1

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>

これは、次の 2 つの JAR ファイルが EE モジュール自体のコンパイル時のクラスパスに追加されている場合に機能します。

  • hibernate-ehcache-5.0.6.Final.jar
  • ehcache-core-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

これら 2 つの 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>

WildFly 9.0.2 final で Hibernate 5.0.6 final を使用しています。

4

2 に答える 2

0

これらの手順を実行する必要があると思います:

  1. メインの休止状態モジュールに hibernate-ehcache.jar を追加します。

  2. wildfly モジュールのように ehcache を追加します。フォルダを作成する必要があります: [wildfly]/modules/system/layers/base/net/sf/ehcache/main ehcache jar と module.xml 。

  3. メインの hibernate module.xml で ehcache モジュールへの参照を作成します。

よろしく

スティーブ

于 2016-01-27T10:48:47.370 に答える
0

Wildfly (バージョン 10 など) では、代わりに Infinispan (JSR107 互換) を使用して L2 キャッシュを実行できます。wildfly の modules ディレクトリ - 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"/>
于 2017-01-11T15:53:16.193 に答える