1 package org.apache.commons.jcs.auxiliary.lateral;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Map;
23 import java.util.concurrent.ConcurrentHashMap;
24
25 import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheMonitor;
26 import org.apache.commons.jcs.auxiliary.lateral.socket.tcp.LateralTCPCacheFactory;
27 import org.apache.commons.jcs.auxiliary.lateral.socket.tcp.behavior.ITCPLateralCacheAttributes;
28 import org.apache.commons.jcs.engine.CacheStatus;
29 import org.apache.commons.jcs.engine.ZombieCacheServiceNonLocal;
30 import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
31
32
33
34
35
36
37
38
39 public class LateralCacheMonitor extends AbstractAuxiliaryCacheMonitor
40 {
41
42
43
44 private ConcurrentHashMap<String, LateralCacheNoWait<?, ?>> caches;
45
46
47
48
49 private LateralTCPCacheFactory factory;
50
51
52
53
54
55
56 protected static void forceShortIdlePeriod( long idlePeriod )
57 {
58 LateralCacheMonitor.idlePeriod = idlePeriod;
59 }
60
61
62
63
64
65
66
67
68 public LateralCacheMonitor(LateralTCPCacheFactory factory)
69 {
70 super("JCS-LateralCacheMonitor");
71 this.factory = factory;
72 this.caches = new ConcurrentHashMap<String, LateralCacheNoWait<?,?>>();
73 setIdlePeriod(20000L);
74 }
75
76
77
78
79
80
81 public void addCache(LateralCacheNoWait<?, ?> cache)
82 {
83 this.caches.put(cache.getCacheName(), cache);
84
85
86 if (this.getState() == Thread.State.NEW)
87 {
88 this.start();
89 }
90 }
91
92
93
94
95 @Override
96 public void dispose()
97 {
98 this.caches.clear();
99 }
100
101
102
103
104 @Override
105 public void doWork()
106 {
107
108 log.info( "Number of caches to monitor = " + caches.size() );
109
110 for (Map.Entry<String, LateralCacheNoWait<?, ?>> entry : caches.entrySet())
111 {
112 String cacheName = entry.getKey();
113
114 @SuppressWarnings("unchecked")
115 LateralCacheNoWait<Object, Object> c = (LateralCacheNoWait<Object, Object>) entry.getValue();
116 if ( c.getStatus() == CacheStatus.ERROR )
117 {
118 log.info( "Found LateralCacheNoWait in error, " + cacheName );
119
120 ITCPLateralCacheAttributes lca = (ITCPLateralCacheAttributes)c.getAuxiliaryCacheAttributes();
121
122
123 ICacheServiceNonLocal<Object, Object> cacheService = factory.getCSNLInstance(lca);
124
125
126
127 if (cacheService instanceof ZombieCacheServiceNonLocal)
128 {
129 continue;
130 }
131
132 c.fixCache(cacheService);
133 }
134 }
135 }
136 }