How to use replicated Infinispan cache in Wildfly standalone-full-ha
discger Mar 13, 2016 9:28 AMHello,
I would like to use a replicated Infinispan cache using two Wildfly standalone instances. I want to insert a value on one node and I should be able to read it on the other node.
Here's what I tried:
- I unzipped the full WF10 distribution using two different virtual maschines running Debian Jessie.
- I run both maschines with the standalone-full-ha.xml config.
- I changed the binding from localhost to the IP adresses of the VMs - all ports are reachable from outside.
- I added another cache by inserting the following code to the config:
<subsystem xmlns="urn:jboss:domain:infinispan:4.0"> <cache-container name="monitor" default-cache="default"> <transport lock-timeout="60000"/> <replicated-cache name="default" mode="SYNC"> <transaction mode="BATCH"/> </replicated-cache> </cache-container> ...
- The rest of the configuration is not modified.
- On both nodes I get the following log entries (my interpretation is - both nodes see each other):
2016-03-13 11:19:43,160 INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (MSC service thread 1-1) ISPN000094: \ Received new cluster view for channel monitor: [wf1|5] (2) [wf1, wf2]
- On one node I created a cache writer. On the other node a cache reader is deployed:
@Singleton @Startup public class CacheWriter { private final static Logger LOG = LoggerFactory.getLogger(CacheWriter.class); @Resource(lookup = "java:jboss/infinispan/container/monitor") private EmbeddedCacheManager cacheManager; private Cache<String, String> cache; @PostConstruct public void init() { cache = cacheManager.getCache(); LOG.info("Cache name: " + cache.getName()); } @Schedule(hour = "*", minute = "*", second = "0", persistent = false) public void createDateString() { Long date = new Date().getTime(); updateCache("date", date.toString()); } public void updateCache(String key, String value) { if (cache.containsKey("date")) { LOG.info("Update date value: " + value); cache.put(key, value); } else { LOG.info("Create date value: " + value); cache.put(key, value); } } }
@Singleton @Startup public class CacheReader { private final static Logger LOG = LoggerFactory.getLogger(CacheReader.class); @Resource(lookup = "java:jboss/infinispan/container/monitor") private EmbeddedCacheManager cacheManager; private Cache<String, String> cache; @PostConstruct public void init() { cache = cacheManager.getCache(); LOG.info("Cache name: " + cache.getName()); } @Schedule(hour = "*", minute = "*", second = "10", persistent = false) public void readDateString() { LOG.info("Cache size: " + cache.keySet().size()); if (cache.containsKey("date")) { LOG.info("The date value is: " + cache.get("date")); } else { LOG.warn("No date value found"); } } }
The values on the writer are inserted but there are no cache modifications on the reader node and the cache size is always 0. What am I missing? Can you help me.
Thanks in advance.
Regards, Dieter