这个针对Hibernate二级缓存的Infinispan缓存工厂之间有什么区别?

时间:2017-09-20 21:17:15

标签: caching cluster-computing wildfly-10 infinispan

我正在试图找出hibernate.cache.region.factory_class属性中使用的这些工厂之间的区别。

示例:

<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.infinispan.JndiInfinispanRegionFactory" />
<property name="hibernate.cache.infinispan.cachemanager" value="java:jboss/infinispan/container/hibernate" />

有4种可能的选择。

我所知道的两个选项是:

  1. org.hibernate.cache.infinispan.InfinispanRegionFactory:对于独立的应用程序(我认为不在集群中)。
  2. org.hibernate.cache.infinispan.JndiInfinispanRegionFactory:这是属性hibernate.cache.infinispan.cachemanager中的JNDI。
  3. 我对这两个人一无所知:

    1. org.jboss.as.jpa.hibernate5.infinispan.SharedInfinispanRegionFactory:?
    2. org.jboss.as.jpa.hibernate5.infinispan.InfinispanRegionFactory:?
    3. 我们使用域模式在Wildfly 10.1.0上配置了一个群集。我们希望在节点之间共享实体缓存,我们对如何做到这一点有一些疑问。

3 个答案:

答案 0 :(得分:2)

我同意Galder,+ 1!

关于[org.jboss.as.jpa.hibernate5.infinispan.SharedInfinispanRegionFactory] ​​[1] + [org.jboss.as.jpa.hibernate5.infinispan.InfinispanRegionFactory] ​​[2]的目的,这些类扩展了Hibernate ORM [hibernate-infinispan] [3]实现类,目的是启动用于JPA二级缓存的内部WildFly Infinispan缓存服务。他们也处理配置。以下链接可能会随着时间的推移而过时,因为我认为我们[3]代码可能会转移到Infinispan项目(最终)。

更多相关代码位于[HibernateSecondLevelCache.java] [4],它支持Galder所说的内容。您可以看到WildFly JPA容器自动为您设置区域工厂类(如果通过[HibernatePersistenceProviderAdaptor.java] [5]启用了缓存。

我不确定代码链接是否对您有帮助,我认为它们可能是。 :)

作为stackoverflow新手,我不允许发布超过2个链接,这就是为什么[3] - [5]是无效链接。

斯科特

[1] https://github.com/wildfly/wildfly/blob/master/jpa/hibernate5/src/main/java/org/jboss/as/jpa/hibernate5/infinispan/SharedInfinispanRegionFactory.java

[2] https://github.com/wildfly/wildfly/blob/master/jpa/hibernate5/src/main/java/org/jboss/as/jpa/hibernate5/infinispan/InfinispanRegionFactory.java

[3] github.com/hibernate/hibernate-orm/tree/master/hibernate-infinispan

[4] github.com/wildfly/wildfly/blob/master/jpa/hibernate5/src/main/java/org/jboss/as/jpa/hibernate5/HibernateSecondLevelCache.java

[5] github.com/wildfly/wildfly/blob/master/jpa/hibernate5/src/main/java/org/jboss/as/jpa/hibernate5/HibernatePersistenceProviderAdaptor.java#L91

答案 1 :(得分:1)

如果您正在使用Wildfly,则不必担心设置区域工厂类,因为Wildfly默认使用Infinispan作为二级缓存提供程序。这些都解释了here

您只需启用hibernate.cache.use_second_level_cache,就可以了。请参阅文档中的示例。

答案 2 :(得分:1)

配置包含 Infinispan,Hibernate和JGroups。

在Wildfly10上使用域模式,您需要在应用程序EAR上进行此配置:

<property name="hibernate.cache.use_second_level_cache" value="true"/>

您的服务器组需要使用具有ha资源(高可用性)的配置文件,例如 full-ha ha 配置文件。这些配置文件具有Infinispan和JGroups默认配置。

然后,您需要拥有私有&#39;网络接口&#39;在所有主机&#39;共享缓存的配置。 JGroups使用私有编辑域/配置/ host.xml或使用wildfly控制台管理员添加此配置( 200.0.0.171 需要由服务器的IP替换):

 <interfaces>
    ...
    <interface name="private">

        <inet-address value="${jboss.bind.address.private:200.0.0.171}"/>
    </interface>
    <!-- .... -->
</interfaces>

例如,假设您有一个HostController HC1(带有server-1和server-2)和HC2(带有server-3和server-4) 启动所有服务器和主机控制器,您将在server.log上看到:

INFO  [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (MSC service thread 1-4) ISPN000078: Starting JGroups channel hibernate
....
....
Received new cluster view for channel hibernate:  [HC1:server-1, HC2-server-2, HC2-server-3, HC2-server-4]