2015-04-09 4 views
6

Ich habe einen Infinispan-Cache in einen WildFly 8.2-Server eingebettet.So können Sie Infinispan-Cache-Daten aus der Ferne anzeigen und bearbeiten

ich hinzugefügt standalone.xml innen <subsystem xmlns="urn:jboss:domain:infinispan:2.0">:

<cache-container name="mycache" default-cache="cachedb"> 
    <transport lock-timeout="600000" /> 
    <replicated-cache name="cachedb" batching="true" mode="SYNC" /> 
</cache-container> 

... und den Cache-Container wie folgt injiziert:

@Singleton 
@Startup 
public class CacheManager { 

    @Resource(lookup = "java:jboss/infinispan/container/mycache") 
    private CacheContainer container; 
    . . . . 

} 

ich den Cache in meiner Anwendungen verwenden können.

Die Anforderung besteht jedoch darin, die zwischengespeicherten Daten über eine der Cacheüberwachungs-APIs remote anzuzeigen/zu bearbeiten/zu löschen.

Über jconsole kann ich die Cache-Informationen, aber nicht die zwischengespeicherten Daten sehen.

jconsole screen

Wie kann ich den Cache Remote-Zugriff?

+0

Haben Sie in Betracht gezogen, [Infinispan Server] (http://infinispan.org/docs/7.1.x/infinispan_server_guide/infinispan_server_guide.html) zu verwenden? –

+0

NR. Voraussetzung ist das Einbinden von Infinispan in den Server von Wildfly. –

+3

Dann fürchte ich, das ist alles, was Sie tun können. Zugriff auf den Infinispan-Cache, der nur mit dem Infinispan-Server verfügbar ist. –

Antwort

4

Zunächst einmal mein Beileid, dass ich die weniger bereiste Straße wählen musste.

Es ist möglich, remote auf einen eingebetteten Infinispan-Cache zuzugreifen. Sie müssen eine org.infinispan.server.hotrod.HotRodServer in Ihrem Server-Prozess einrichten, im Wesentlichen Reverse-Engineering der vorgefertigten Infinispan Server Verteilung. Dieser Ansatz ist nicht dokumentiert, also gehen Sie auf eigenes Risiko vor..

Sie müssen diese Abhängigkeiten:

<dependency> 
    <groupId>org.infinispan</groupId> 
    <artifactId>infinispan-server-hotrod</artifactId> 
    <version>7.1.0.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.infinispan</groupId> 
    <artifactId>infinispan-client-hotrod</artifactId> 
    <version>7.1.0.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.infinispan</groupId> 
    <artifactId>infinispan-remote-query-server</artifactId> 
    <version>7.1.0.Final</version> 
</dependency> 

Konfigurieren eines Beispiel-Cache (infinispan.xml):

<infinispan> 
    <cache-container default-cache="default"> 
     <local-cache name="dumpster"> 
      <compatibility /> 
     </local-cache> 
    </cache-container> 
</infinispan> 

Der Server-Prozess:

// Start a cache manager as usual 
EmbeddedCacheManager cacheManager; 
try (InputStream in = ClassLoader.getSystemResourceAsStream("infinispan.xml")) { 
    cacheManager = new DefaultCacheManager(in); 
} 

// Start a server to allow remote access to the cache manager 
HotRodServerConfiguration serverConfig = new HotRodServerConfigurationBuilder() 
     .host("127.0.0.1").port(9999).build(); 
HotRodServer server = new HotRodServer(); 
server.start(serverConfig, cacheManager); 

// Start the example cache 
Cache<String, String> cache = cacheManager.getCache("dumpster", true); 
cache.put("K", "V"); 
System.out.println(cache.get("K")); // V 

Der Client-Prozess:

Configuration config = new ConfigurationBuilder().addServer() 
     .host("127.0.0.1").port(9999).build(); 
RemoteCacheManager cacheManager = new RemoteCacheManager(config); 
RemoteCache<String, String> cache = cacheManager.getCache("dumpster"); 
System.out.println(cache.get("K")); // V 
Verwandte Themen