2017-09-20 1 views
0

Ich versuche herauszufinden, der Unterschied zwischen diesen Fabriken, in hibernate.cache.region.factory_class Eigentum verwendet.Was sind die Unterschiede zwischen diesen Infinispan-Cache-Fabriken für den Second-Level-Cache von Hibernate?

Beispiel:

<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" /> 

Es gibt 4 mögliche Optionen.

Die 2 Möglichkeiten, dass ich etwas wissen ist:

  1. org.hibernate.cache.infinispan.InfinispanRegionFactory: für eigenständige aplications (nicht in einem Cluster, glaube ich).
  2. org.hibernate.cache.infinispan.JndiInfinispanRegionFactory: Dies ist zu einem JNDI in der Eigenschaft hibernate.cache.infinispan.cachemanager gebunden.

Und haben keine Ahnung über diese 2:

  1. org.jboss.as.jpa.hibernate5.infinispan.SharedInfinispanRegionFactory:?
  2. org.jboss.as.jpa.hibernate5.infinispan.InfinispanRegionFactory:?

Wir haben ein Cluster in Wildfly 10.1.0 im Domänenmodus konfiguriert. Wir wollen den Entity-Cache unter den Knoten teilen und wir haben einige Zweifel daran.

Antwort

1

Wenn Sie Wildfly verwenden, müssen Sie sich keine Gedanken über das Festlegen der Region-Factory-Klasse machen, da Wildfly Infinispan standardmäßig als Cache-Provider der zweiten Ebene verwendet. Es ist alles erklärt here.

Alles, was Sie tun müssen, ist aktivieren hibernate.cache.use_second_level_cache und Sie sind gut zu gehen. Siehe Beispiele in der Doku.

+0

Danke! Aber diese Standardkonfiguration macht den Cache auf die Knoten des Clusters verteilt? – Dherik

+0

Die Standardkonfiguration, standalone.xml, wurde für einzelne Knoten entwickelt. Es gibt jedoch mehrere mit Wildfly gelieferte Konfigurationen, einschließlich clustered.xml und anderen, die für ein Cluster-Env entwickelt wurden. –

+1

BTW, unabhängig von der Wildfly-Konfiguration (Standalone oder Clustered), bleibt Ihre persistence.xml die gleiche, nichts, was Sie anders als das, was ich oben vorgeschlagen habe, berühren müssen. –

0

Die Konfiguration envelves Infinispan, Hibernate und JGroups.

Mit Domain-Modus auf Wildfly10 Sie diese Konfiguration auf Ihre Anwendung EAR benötigen:

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

Gruppe Ihr Server benötigen ein Profil zu verwenden, die die Ressourcen ha (hohe Verfügbarkeit) wie voll hat -ha oder ha Profile. Diese Profile haben die Standardkonfiguration für Infinispan und JGroups.

Dann müssen Sie auf ALL Hosts' Konfiguration das private 'Network Interfaces' haben, die den Cache teilen. JGroups nutzt das private bearbeiten die Domain/configuration/host.xml oder verwenden Sie die Wildfly Konsole Admin diese Konfiguration hinzuzufügen (200.0.0.171 muss durch die Server-IP ersetzt werden):

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

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

Zum Beispiel, angenommen, Sie haben einen HostController HC1 (mit server-1 und server-2) und HC2 (mit server-3 und server-4) Starten Sie alle Server und Host-Controller, die Sie auf Ihrem Server.log sehen:

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] 
+1

Sie brauchen keine, um eine Region-Factory-Klasse oder die Eigenschaft 'hibernate.cache.infinispan.cachemanager' anzugeben, wenn Sie in Wildfly ausgeführt werden. Es könnte funktionieren, aber es ist unnötig und verwirrt die Benutzer. Wenn es Probleme mit meiner vorgeschlagenen Lösung gibt, lassen Sie es mich bitte wissen. –

+0

Sie haben Recht. Ich habe diesen Teil entfernt und gearbeitet. –

1

Ich stimme mit Galder, +1!

Im Hinblick auf den Zweck der [org.jboss.as.jpa.hibernate5.infinispan.SharedInfinispanRegionFactory] [1] + [org.jboss.as.jpa.hibernate5.infinispan.InfinispanRegionFactory] [2], wobei diese Klassen erweitern die Hibernate ORM [Hibernate-Infinispan] [3] Implementierungsklassen, mit dem Zweck, die internen WildFly Infinispan Cache-Dienste zu starten, die für das JPA Second Level Caching verwendet werden. Sie beschäftigen sich auch mit der Konfiguration. Die untenstehenden Links können im Laufe der Zeit veraltet sein, da ich denke, dass wir [3] -Code möglicherweise zum Infinispan-Projekt (möglicherweise) wechseln werden.

Ein wenig mehr von dem verwandten Code ist bei [HibernateSecondLevelCache.java] [4], die das unterstützt, was Galder sagte. Sie können sehen, dass der WildFly JPA-Container automatisch die Region-Factory-Klasse für Sie einstellt (wenn das Caching über [HibernatePersistenceProviderAdaptor.java] [5] aktiviert ist.

Ich bin mir nicht sicher, ob die Code-Links für Sie hilfreich sind. Ich dachte, sie könnten. :)

Als Stackoverflow-Neuling, ich bin nicht berechtigt, mit mehr als 2 Links, weshalb [3] - [5] sind ungültige Links.

Scott

[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

Verwandte Themen