@Override public void dispose() { for (Map.Entry<String, Object> entry : cache.entrySet()) { if (entry.getValue() instanceof Cacheable) { ((Cacheable) entry.getValue()).close(); } } cache.clear(); }
@Test public void testDispose() throws Exception { CacheManager cacheManager = new CacheManagerImpl(); Cacheable cacheable = mock(Cacheable.class); Cacheable otherCacheable = mock(Cacheable.class); Object cached = new Object(); cacheManager.add("cacheable", cacheable); cacheManager.add("other_cacheable", otherCacheable); cacheManager.add("cached", cached); // verify that objects have been added correctly assertEquals(cacheable, cacheManager.get("cacheable")); assertEquals(otherCacheable, cacheManager.get("other_cacheable")); assertEquals(cached, cacheManager.get("cached")); cacheManager.dispose(); // cache should be empty after dispose assertNull(cacheManager.get("cacheable")); assertNull(cacheManager.get("other_cacheable")); assertNull(cacheManager.get("cached")); // close() method has been called on cached objects which implement Cacheable verify(cacheable).close(); verify(otherCacheable).close(); }
@Override public void dispose() { for (Map.Entry<String, Object> entry : cache.entrySet()) { if (entry.getValue() instanceof Cacheable) { ((Cacheable) entry.getValue()).close(); } } cache.clear(); }
protected void closeInstance(Object instance) { if (instance == null) { return; } if (instance instanceof Closeable) { ((Closeable) instance).close(); } else if (instance instanceof Cacheable) { ((Cacheable) instance).close(); } }