1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.portal.service.cache;
35
36 import fr.paris.lutece.portal.service.util.AppLogService;
37
38 import net.sf.ehcache.Cache;
39 import net.sf.ehcache.CacheException;
40 import net.sf.ehcache.Ehcache;
41 import net.sf.ehcache.Element;
42 import net.sf.ehcache.event.CacheEventListener;
43
44 import org.apache.log4j.Logger;
45
46 import java.util.ArrayList;
47 import java.util.List;
48
49
50
51
52
53 public abstract class AbstractCacheableService implements CacheableService, CacheEventListener
54 {
55 private Cache _cache;
56 private boolean _bEnable;
57 private Logger _logger = Logger.getLogger( "lutece.cache" );
58
59
60
61
62 public void initCache( )
63 {
64 initCache( getName( ) );
65 }
66
67
68
69
70
71 public void initCache( String strCacheName )
72 {
73 createCache( strCacheName );
74 _bEnable = true;
75 CacheService.registerCacheableService( this );
76 }
77
78
79
80
81
82 private void createCache( String strCacheName )
83 {
84 _cache = CacheService.getInstance( ).createCache( strCacheName );
85 _cache.getCacheEventNotificationService( ).registerListener( this );
86 }
87
88
89
90
91
92
93 public void putInCache( String strKey, Object object )
94 {
95 if ( ( _cache != null ) && isCacheEnable( ) )
96 {
97 Element element = new Element( strKey, object );
98 _cache.put( element );
99 }
100 }
101
102
103
104
105
106
107 public Object getFromCache( String strKey )
108 {
109 Object object = null;
110
111 if ( ( _cache != null ) && isCacheEnable( ) )
112 {
113 Element element = _cache.get( strKey );
114
115 if ( element != null )
116 {
117 object = element.getObjectValue( );
118 }
119 }
120
121 return object;
122 }
123
124
125
126
127
128
129 @Override
130 public boolean isCacheEnable( )
131 {
132 return _bEnable;
133 }
134
135
136
137
138 @Override
139 public void enableCache( boolean bEnable )
140 {
141 _bEnable = bEnable;
142
143 if ( ( !_bEnable ) && ( _cache != null ) )
144 {
145 _cache.removeAll( );
146 }
147
148 if ( ( _bEnable ) && ( _cache == null ) )
149 {
150 createCache( getName( ) );
151 }
152
153 CacheService.updateCacheStatus( this );
154 }
155
156
157
158
159 @Override
160 public void resetCache( )
161 {
162 try
163 {
164 if ( _cache != null )
165 {
166 _cache.removeAll( );
167 }
168 }
169 catch ( IllegalStateException e )
170 {
171 AppLogService.error( e.getMessage( ), e );
172 }
173 catch ( CacheException e )
174 {
175 AppLogService.error( e.getMessage( ), e );
176 }
177 }
178
179
180
181
182
183
184 @Override
185 public int getCacheSize( )
186 {
187 return ( _cache != null ) ? _cache.getSize( ) : 0;
188 }
189
190
191
192
193
194 public Cache getCache( )
195 {
196 return _cache;
197 }
198
199
200
201
202 @Override
203 public List<String> getKeys( )
204 {
205 if ( _cache != null )
206 {
207 return _cache.getKeys( );
208 }
209
210 return new ArrayList<String>( );
211 }
212
213
214
215
216 @Override
217 public int getMaxElements( )
218 {
219 return _cache.getCacheConfiguration( ).getMaxElementsInMemory( );
220 }
221
222
223
224
225 @Override
226 public long getTimeToLive( )
227 {
228 return _cache.getCacheConfiguration( ).getTimeToLiveSeconds( );
229 }
230
231
232
233
234 @Override
235 public long getMemorySize( )
236 {
237 return _cache.calculateInMemorySize( );
238 }
239
240
241
242
243 @Override
244 public String getInfos( )
245 {
246 return CacheService.getInfos( _cache );
247 }
248
249
250
251
252
253
254
255 @Override
256 public Object clone( )
257 {
258 throw new RuntimeException( "This class shouldn't be cloned" );
259 }
260
261
262
263
264 @Override
265 public void notifyElementExpired( Ehcache cache, Element element )
266 {
267
268 _cache.remove( element.getKey( ) );
269 _logger.debug( "Object removed from the cache : " + cache.getName( ) + " - key : " + element.getKey( ) );
270 }
271
272
273
274
275 @Override
276 public void notifyElementRemoved( Ehcache ehch, Element elmnt )
277 throws CacheException
278 {
279
280 }
281
282
283
284
285 @Override
286 public void notifyElementEvicted( Ehcache ehch, Element elmnt )
287 {
288
289 }
290
291
292
293
294 @Override
295 public void notifyRemoveAll( Ehcache ehch )
296 {
297
298 }
299
300
301
302
303 @Override
304 public void notifyElementPut( Ehcache ehch, Element elmnt )
305 throws CacheException
306 {
307
308 }
309
310
311
312
313 @Override
314 public void notifyElementUpdated( Ehcache ehch, Element elmnt )
315 throws CacheException
316 {
317
318 }
319
320
321
322
323 @Override
324 public void dispose( )
325 {
326
327 }
328
329
330
331
332
333 public void removeKey( String strKey )
334 {
335 getCache( ).remove( strKey );
336 }
337 }