MG_7
MG_7

Reputation: 61

JCS LTCP AUX cache configuration and usage

Background:

We have 4 physical servers (4 IPS), each one running in JBOSS 6 EAP running on port 80.All requests are redirected to any one of these servers via Load balancer. Now I tried to implement Java cache system for such distributed env so that our properties gets updated in each servers cache.

POC: For that we did a small POC on our local systems implementing JCS v1.3 lateral caching. Enabled it in our maven project. The following config is used in .ccf file :

  jcs.default=
  jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
  jcs.default.cacheattributes.MaxObjects=1000
  jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
 # PRE-DEFINED CACHE REGION

##############################################################
##### AUXILIARY CACHES
# LTCP AUX CACHE
   jcs.auxiliary.LTCP=org.apache.commons.jcs.auxiliary.lateral.socket.tcp.LateralTCPCacheFactory
   jcs.auxiliary.LTCP.attributes=org.apache.commons.jcs.auxiliary.lateral.socket.tcp.TCPLateralCacheAttributes
  #jcs.auxiliary.LTCP.attributes.TcpServers=152.144.219.209:8080
   jcs.auxiliary.LTCP.attributes.TcpListenerPort=1118
   jcs.auxiliary.LTCP.attributes.UdpDiscoveryAddr=228.5.6.8
   jcs.auxiliary.LTCP.attributes.UdpDiscoveryPort=6780
   jcs.auxiliary.LTCP.attributes.UdpDiscoveryEnabled=true
   jcs.auxiliary.LTCP.attributes.Receive=true
   jcs.auxiliary.LTCP.attributes.AllowGet=true
   jcs.auxiliary.LTCP.attributes.IssueRemoveOnPut=false
   jcs.auxiliary.LTCP.attributes.FilterRemoveByHashCode=false
   jcs.auxiliary.LTCP.attributes.SocketTimeoOt=1001
   jcs.auxiliary.LTCP.attributes.OpenTimeOut=2002
   jcs.auxiliary.LTCP.attributes.ZombieQueueMaxSize=2000

And implementing the getter and setter methods for saving a string attribute in cache and getting it from cache

public void addProp(String propId)
        throws PimsAppException {
    try {
        configMSCache.put(propId, propId);
    } catch (CacheException e) {
        e.printStackTrace();
    }       

}

@Override
public String testProp(String propId) throws PimsAppException {
    if(configMSCache!=null){
        return (String) configMSCache.get(propId);
    }else{
    return "It dint work";
    }
} 

The application is deployed fine no error in getting it up.

TEST METHOD: deployed the project.war in my local server and in a remote server with different IP. Both machines are in same network, so no firewall issue in accessing each others IP. Have saved a property in my server and get it. (Worked fine) Tried to get the saved property via my local by the remote machine. (It returns blank response). Means the distributed cache feature is NOT achieved.

Doubts : 1. Does the auxiliary caches set up properly? I mean the configurations 2. Am I testing it properly or how can I test it in dev environment. 3. As JCS UDP Discovery,lets us support the same config on multiple machines, then why it dint work on remote machine? 4. Or is there any caching mechanism, with good examples and documentation can suffice my application needs(as mentioned in background section).

Thanks in advance.

Upvotes: 0

Views: 902

Answers (1)

SE_007
SE_007

Reputation: 11

This reply might be too late. But I will suggest in case, to log the stats on both servers and see. As could be possible that it is propagating the cache but just in the processing time, there is an issue reading it. For example:

JCSAdminBean admin = new JCSAdminBean();
LinkedList linkedList = admin.buildCacheInfo();
ListIterator iterator = linkedList.listIterator();
while (iterator.hasNext()) {
    CacheRegionInfo info = (CacheRegionInfo)iterator.next();
    CompositeCache compCache = info.getCache();
    System.out.println("Cache Name: " + compCache.getCacheName());
    System.out.println("Cache Type: " + compCache.getCacheType());
    System.out.println("Cache Misses (not found): " + compCache.getMissCountNotFound());
    System.out.println("Cache Misses (expired): " + compCache.getMissCountExpired());
    System.out.println("Cache Hits (memory): " + compCache.getHitCountRam());
    System.out.println("Cache value: " + compCache.get(propId));

}

Upvotes: 1

Related Questions