0 Replies Latest reply on Mar 13, 2016 9:28 AM by discger

    How to use replicated Infinispan cache in Wildfly standalone-full-ha

    discger

      Hello,

       

      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