Java JBoss EAP 7和Ifinispan

Java JBoss EAP 7和Ifinispan,java,hibernate,jboss,infinispan,jboss-eap-7,Java,Hibernate,Jboss,Infinispan,Jboss Eap 7,我有一个用JEE编写的web应用程序。我使用hibernate作为JPA提供程序,我想使用Infinispan作为二级缓存。当我浏览互联网时,我注意到只需要添加几行。我在persistence.xml中添加了以下几行 <property name="hibernate.cache.provider_class" value="org.hibernate.cache.infinispan.InfinispanRegionFactory"/> <property name="jav

我有一个用JEE编写的web应用程序。我使用hibernate作为JPA提供程序,我想使用Infinispan作为二级缓存。当我浏览互联网时,我注意到只需要添加几行。我在persistence.xml中添加了以下几行

<property name="hibernate.cache.provider_class" value="org.hibernate.cache.infinispan.InfinispanRegionFactory"/>
<property name="javax.persistence.sharedCache.mode" value="ENABLE_SELECTIVE"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.infinispan.InfinispanRegionFactory"/>
<property name="hibernate.cache.use_query_cache" value="true"/>

但在JBoss上部署ear和war文件时,我收到一条错误消息

Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.spi.CacheImplementor]
        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.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:242)
        at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:879)
        ... 83 more
Caused by: org.hibernate.cache.CacheException: Unable to start region factory
        at org.hibernate.cache.infinispan.InfinispanRegionFactory.start(InfinispanRegionFactory.java:415)
        at org.hibernate.internal.CacheImpl.<init>(CacheImpl.java:49)
        at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:28)
        at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:20)
        at org.hibernate.service.internal.SessionFactoryServiceRegistryImpl.initiateService(SessionFactoryServiceRegistryImpl.java:46)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:234)
        ... 88 more
Caused by: org.infinispan.jmx.JmxDomainConflictException: ISPN000034: There's already a JMX MBean instance type=CacheManager,name="SampleCacheManager" already registered under 'org.infinispan' JMX domain. If you want to allow multiple instances configured with same JMX domain enable 'allowDuplicateDomains' attribute in 'globalJmxStatistics' config element
        at org.infinispan.jmx.JmxUtil.buildJmxDomain(JmxUtil.java:52)
        at org.infinispan.jmx.CacheManagerJmxRegistration.updateDomain(CacheManagerJmxRegistration.java:79)
        at org.infinispan.jmx.CacheManagerJmxRegistration.buildRegistrar(CacheManagerJmxRegistration.java:73)
        at org.infinispan.jmx.AbstractJmxRegistration.registerMBeans(AbstractJmxRegistration.java:37)
        at org.infinispan.jmx.CacheManagerJmxRegistration.start(CacheManagerJmxRegistration.java:41)
        at org.infinispan.manager.DefaultCacheManager.start(DefaultCacheManager.java:639)
        at org.infinispan.manager.DefaultCacheManager.<init>(DefaultCacheManager.java:300)
        at org.hibernate.cache.infinispan.InfinispanRegionFactory.createCacheManager(InfinispanRegionFactory.java:532)
        at org.hibernate.cache.infinispan.InfinispanRegionFactory$1.doWork(InfinispanRegionFactory.java:500)
        at org.hibernate.cache.infinispan.InfinispanRegionFactory$1.doWork(InfinispanRegionFactory.java:473)
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.workWithClassLoader(ClassLoaderServiceImpl.java:342)
        at org.hibernate.cache.infinispan.InfinispanRegionFactory.createCacheManager(InfinispanRegionFactory.java:472)
        at org.hibernate.cache.infinispan.InfinispanRegionFactory.start(InfinispanRegionFactory.java:380)
        ... 93 more
原因:org.hibernate.service.spi.ServiceException:无法创建请求的服务[org.hibernate.engine.spi.CacheImplementor]
位于org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:244)
位于org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208)
位于org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
位于org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:242)
位于org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:879)
... 83多
原因:org.hibernate.cache.CacheException:无法启动区域工厂
位于org.hibernate.cache.infinispan.InfinispanRegionFactory.start(InfinispanRegionFactory.java:415)
位于org.hibernate.internal.CacheImpl.(CacheImpl.java:49)
位于org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:28)
位于org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:20)
位于org.hibernate.service.internal.SessionFactoryServiceRegistryImpl.initiateService(SessionFactoryServiceRegistryImpl.java:46)
位于org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:234)
... 88多
原因:org.infinispan.jmx.JmxDomainConflictException:ISPN000034:已在'org.infinispan'jmx域下注册了一个jmx MBean实例type=CacheManager,name=“SampleCacheManager”。如果要允许使用同一JMX域配置多个实例,请在“globalJmxStatistics”配置元素中启用“allowDuplicateDomains”属性
位于org.infinispan.jmx.JmxUtil.buildJmxDomain(JmxUtil.java:52)
位于org.infinispan.jmx.CacheManagerJmxRegistration.updateDomain(CacheManagerJmxRegistration.java:79)
位于org.infinispan.jmx.CacheManagerJmxRegistration.buildRegistrator(CacheManagerJmxRegistration.java:73)
位于org.infinispan.jmx.AbstractJmxRegistration.registerMBeans(AbstractJmxRegistration.java:37)
位于org.infinispan.jmx.CacheManagerJmxRegistration.start(CacheManagerJmxRegistration.java:41)
位于org.infinispan.manager.DefaultCacheManager.start(DefaultCacheManager.java:639)
位于org.infinispan.manager.DefaultCacheManager。(DefaultCacheManager.java:300)
位于org.hibernate.cache.infinispan.InfinispanRegionFactory.createCacheManager(InfinispanRegionFactory.java:532)
位于org.hibernate.cache.infinispan.InfinispanRegionFactory$1.doWork(InfinispanRegionFactory.java:500)
位于org.hibernate.cache.infinispan.InfinispanRegionFactory$1.doWork(InfinispanRegionFactory.java:473)
位于org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.workWithClassLoader(ClassLoaderServiceImpl.java:342)
位于org.hibernate.cache.infinispan.InfinispanRegionFactory.createCacheManager(InfinispanRegionFactory.java:472)
位于org.hibernate.cache.infinispan.InfinispanRegionFactory.start(InfinispanRegionFactory.java:380)
... 93多
更新
当我的持久化单元看起来像这样时

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
             http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="myPersistenceUnit" transaction-type="RESOURCE_LOCAL">
    <non-jta-data-source>java:jboss/datasources/myDatasource</non-jta-data-source>
    <mapping-file>META-INF/orm_mapping.xml</mapping-file>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
         ...
        <properties>
          ...
            <property name="hibernate.cache.use_second_level_cache" value="true" />
          ...
        </properties>

    </persistence-unit>

</persistence>  

java:jboss/datasources/myDatasource
META-INF/orm_mapping.xml
真的
启用\u选择性
...
...
...
我有个例外

Caused by: org.hibernate.cache.NoCacheRegionFactoryAvailableException: Second-level cache is used in the application, but property hibernate.cache.region.factory_class is not given; please either disable second level cache or set correct region factory using the hibernate.cache.region.factory_class setting and make sure the second level cache provider (hibernate-infinispan, e.g.) is available on the classpath.
        at org.hibernate.cache.internal.NoCachingRegionFactory.buildEntityRegion(NoCachingRegionFactory.java:66)
        at org.hibernate.internal.SessionFactoryImpl.determineEntityRegionAccessStrategy(SessionFactoryImpl.java:619)
        at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:332)
        at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:879)
        ... 83 more
原因:org.hibernate.cache.NoCacheRegionFactoryAvailableException:应用程序中使用了二级缓存,但未提供hibernate.cache.region.factory_类属性;请使用hibernate.cache.region.factory_类设置禁用二级缓存或设置正确的区域工厂,并确保二级缓存提供程序(例如hibernate infinispan)在类路径上可用。
位于org.hibernate.cache.internal.nocachGregionFactory.buildEntityRegion(nocachGregionFactory.java:66)
位于org.hibernate.internal.sessionfactorympl.determinitentityregionaccessstrategy(sessionfactorympl.java:619)
位于org.hibernate.internal.sessionfactorympl。(sessionfactorympl.java:332)
位于org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:879)
... 83多
将以下行添加到persistence.xml后

<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.infinispan.InfinispanRegionFactory" />

我仍然对JMX MBean感到异常

Caused by: org.infinispan.jmx.JmxDomainConflictException: ISPN000034: There's already a JMX MBean instance type=CacheManager,name="SampleCacheManager" already registered under 'org.infinispan' JMX domain. If you want to allow multiple instances configured with same JMX domain enable 'allowDuplicateDomains' attribute in 'globalJmxStatistics' config element
        at org.infinispan.jmx.JmxUtil.buildJmxDomain(JmxUtil.java:52)
        at org.infinispan.jmx.CacheManagerJmxRegistration.updateDomain(CacheManagerJmxRegistration.java:79)
        at org.infinispan.jmx.CacheManagerJmxRegistration.buildRegistrar(CacheManagerJmxRegistration.java:73)
        at org.infinispan.jmx.AbstractJmxRegistration.registerMBeans(AbstractJmxRegistration.java:37)
        at org.infinispan.jmx.CacheManagerJmxRegistration.start(CacheManagerJmxRegistration.java:41)
        at org.infinispan.manager.DefaultCacheManager.start(DefaultCacheManager.java:639)
        at org.infinispan.manager.DefaultCacheManager.<init>(DefaultCacheManager.java:300)
        at org.hibernate.cache.infinispan.InfinispanRegionFactory.createCacheManager(InfinispanRegionFactory.java:532)
        at org.hibernate.cache.infinispan.InfinispanRegionFactory$1.doWork(InfinispanRegionFactory.java:500)
        at org.hibernate.cache.infinispan.InfinispanRegionFactory$1.doWork(InfinispanRegionFactory.java:473)
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.workWithClassLoader(ClassLoaderServiceImpl.java:342)
        at org.hibernate.cache.infinispan.InfinispanRegionFactory.createCacheManager(InfinispanRegionFactory.java:472)
        at org.hibernate.cache.infinispan.InfinispanRegionFactory.start(InfinispanRegionFactory.java:380)
        ... 93 more
原因:org.infinispan.jmx.JmxDomainConflictException:ISPN000034:已在'org.infinispan'jmx域下注册了一个jmx MBean实例type=CacheManager,name=“SampleCacheManager”。如果要允许使用同一JMX域配置多个实例,请在“globalJmxStatistics”配置元素中启用“allowDuplicateDomains”属性
位于org.infinispan.jmx.JmxUtil.buildJmxDomain(JmxUtil.java:52)
位于org.infinispan.jmx.CacheManagerJmxRegistration.updateDomain(CacheManagerJmxRegistration.java:79)
位于org.infinispan.jmx.CacheManagerJmxRegistration.buildRegistrator(CacheManagerJmxRegistration.java:73)
位于org.infinispan.jmx.AbstractJmxRegistration.registerMBeans(AbstractJmxRegistration.java:37)
位于org.infinispan.jmx.CacheManagerJmxRegistration.start(CacheManagerJmxRegistration.java:41)
在org.infinispan。
<jmx duplicate-domains="true" />
<persistence-unit name="...">
  (...) <!-- other configuration -->
  <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
  <properties>
    <property name="hibernate.cache.use_second_level_cache" value="true" />
    <property name="hibernate.cache.use_query_cache" value="true" />
  </properties>
</persistence-unit>
<persistence ...>
        <persistence-unit ...>
                ...
                <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>  <!-- ADD THIS -->
                <properties>
                        ...
                        <property name="hibernate.cache.use_second_level_cache" value="true" />  <!-- KEEP THIS -->
                </properties>
        </persistence-unit>
</persistence>