我正在试图找出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种可能的选择。
我所知道的两个选项是:
org.hibernate.cache.infinispan.InfinispanRegionFactory
:对于独立的应用程序(我认为不在集群中)。org.hibernate.cache.infinispan.JndiInfinispanRegionFactory
:这是属性hibernate.cache.infinispan.cachemanager
中的JNDI。我对这两个人一无所知:
org.jboss.as.jpa.hibernate5.infinispan.SharedInfinispanRegionFactory
:?org.jboss.as.jpa.hibernate5.infinispan.InfinispanRegionFactory
:?我们使用域模式在Wildfly 10.1.0上配置了一个群集。我们希望在节点之间共享实体缓存,我们对如何做到这一点有一些疑问。
答案 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]是无效链接。
斯科特
[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]