问题
I have an Infinispan cache embedded in a WildFly 8.2 server.
I added to standalone.xml
inside <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>
...and injected the cache container like this:
@Singleton
@Startup
public class CacheManager {
@Resource(lookup = "java:jboss/infinispan/container/mycache")
private CacheContainer container;
. . . .
}
I can use the cache in my applications.
However the requirement is to see/edit/delete the cached data remotely by using any of the cache monitoring APIs.
Via jconsole I can see the cache information, but not the cached data.
How can I access the cache remotely?
回答1:
First of all, my condolences on having to choose the road less traveled.
It's possible to access an embedded Infinispan cache remotely. You need to set up a org.infinispan.server.hotrod.HotRodServer
in your server process, essentially reverse engineering the pre-packaged Infinispan Server distribution. This approach is not documented, so proceed at your own risk.
You need these dependencies:
<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>
Configure an example cache (infinispan.xml
):
<infinispan>
<cache-container default-cache="default">
<local-cache name="dumpster">
<compatibility />
</local-cache>
</cache-container>
</infinispan>
The server process:
// 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
The client process:
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
来源:https://stackoverflow.com/questions/29530353/how-to-view-and-edit-infinispan-cached-data-remotely