init
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
package com.eactive.eai.rms.common.cache;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public interface CacheCleaner {
|
||||
|
||||
Collection<String> findCacheNames();
|
||||
|
||||
void clear();
|
||||
|
||||
void clear(String cacheName);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.eactive.eai.rms.common.cache;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
|
||||
@Controller
|
||||
public class CacheController {
|
||||
|
||||
private CacheCleaner cacheService;
|
||||
|
||||
@Autowired
|
||||
public CacheController(CacheCleaner cacheService) {
|
||||
this.cacheService = cacheService;
|
||||
}
|
||||
|
||||
@GetMapping("/common/acl/cache/cacheMan.view")
|
||||
public String values(ModelMap model) {
|
||||
model.addAttribute("values", cacheService.findCacheNames());
|
||||
return "/common/acl/cache/cacheMan";
|
||||
}
|
||||
|
||||
@PostMapping(value = "/common/acl/cache/cacheMan.json", params = "cmd=UPDATE")
|
||||
public ResponseEntity<String> clear(String cacheName) {
|
||||
|
||||
if ("CLEAR_ALL".equals(cacheName)) {
|
||||
cacheService.clear();
|
||||
} else {
|
||||
cacheService.clear(cacheName);
|
||||
}
|
||||
|
||||
return ResponseEntity.ok("ok");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.eactive.eai.rms.common.cache.jpa;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.eactive.eai.rms.common.cache.CacheCleaner;
|
||||
|
||||
@Service
|
||||
public class CacheCleanerImpl implements CacheCleaner {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(CacheCleanerImpl.class);
|
||||
|
||||
private NativeCacheCleaner nativeCacheService;
|
||||
|
||||
private JpaCacheCleaner jpaCacheService;
|
||||
|
||||
@Autowired
|
||||
public CacheCleanerImpl(NativeCacheCleaner nativeCacheService, JpaCacheCleaner jpaCacheService) {
|
||||
this.nativeCacheService = nativeCacheService;
|
||||
this.jpaCacheService = jpaCacheService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> findCacheNames() {
|
||||
|
||||
Set<String> cacheNames = new TreeSet<>();
|
||||
cacheNames.addAll(nativeCacheService.findCacheNames());
|
||||
cacheNames.addAll(jpaCacheService.findCacheNames());
|
||||
|
||||
if (logger.isDebugEnabled()) {
|
||||
cacheNames.forEach(s -> logger.debug("cache values : {}", s));
|
||||
}
|
||||
return cacheNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
nativeCacheService.clear();
|
||||
jpaCacheService.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear(String cacheName) {
|
||||
nativeCacheService.clear(cacheName);
|
||||
jpaCacheService.clear();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.eactive.eai.rms.common.cache.jpa;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public interface JpaCacheCleaner {
|
||||
|
||||
Collection<String> findCacheNames();
|
||||
|
||||
void clear();
|
||||
|
||||
void clear(String cacheName);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.eactive.eai.rms.common.cache.jpa;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public interface NativeCacheCleaner {
|
||||
|
||||
Collection<String> findCacheNames();
|
||||
|
||||
void clear();
|
||||
|
||||
void clear(String cacheName);
|
||||
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
package com.eactive.eai.rms.common.cache.jpa.ehcache;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.cache.ehcache.EhCacheCacheManager;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.eactive.eai.rms.common.cache.jpa.NativeCacheCleaner;
|
||||
|
||||
@Service
|
||||
public class EhcacheCacheCleanerImpl implements NativeCacheCleaner {
|
||||
|
||||
private EhCacheCacheManager ehCacheCacheManager;
|
||||
|
||||
@Autowired
|
||||
public EhcacheCacheCleanerImpl(EhCacheCacheManager ehCacheCacheManager) {
|
||||
this.ehCacheCacheManager = ehCacheCacheManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> findCacheNames() {
|
||||
return ehCacheCacheManager.getCacheNames().stream().sorted().collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
net.sf.ehcache.CacheManager nativeCacheManager = ehCacheCacheManager.getCacheManager();
|
||||
if (nativeCacheManager == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
String[] cacheNames = nativeCacheManager.getCacheNames();
|
||||
for (String cacheName : cacheNames) {
|
||||
clear(cacheName);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear(String cacheName) {
|
||||
net.sf.ehcache.CacheManager nativeCacheManager = ehCacheCacheManager.getCacheManager();
|
||||
if (nativeCacheManager != null) {
|
||||
net.sf.ehcache.Cache cache = nativeCacheManager.getCache(cacheName);
|
||||
if (cache != null) {
|
||||
cache.removeAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
package com.eactive.eai.rms.common.cache.jpa.hibernate;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.cache.spi.CacheImplementor;
|
||||
import org.hibernate.internal.SessionFactoryImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.eactive.eai.rms.common.cache.jpa.JpaCacheCleaner;
|
||||
|
||||
@Service
|
||||
public class HibernateCacheCleaner implements JpaCacheCleaner {
|
||||
|
||||
private EntityManagerFactory entityManagerFactory;
|
||||
private EntityManagerFactory entityManagerFactoryForEMS;
|
||||
|
||||
@Autowired
|
||||
public HibernateCacheCleaner(EntityManagerFactory entityManagerFactory,
|
||||
@Qualifier("entityManagerFactoryForEMS") EntityManagerFactory entityManagerFactoryForEMS) {
|
||||
this.entityManagerFactory = entityManagerFactory;
|
||||
this.entityManagerFactoryForEMS = entityManagerFactoryForEMS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> findCacheNames() {
|
||||
|
||||
Set<String> names = new HashSet<>();
|
||||
|
||||
String[] olnNames = entityManagerFactory
|
||||
.unwrap(SessionFactory.class)
|
||||
.getStatistics()
|
||||
.getSecondLevelCacheRegionNames();
|
||||
|
||||
String[] manNames = entityManagerFactoryForEMS
|
||||
.unwrap(SessionFactory.class)
|
||||
.getStatistics()
|
||||
.getSecondLevelCacheRegionNames();
|
||||
|
||||
names.addAll(Arrays.asList(olnNames));
|
||||
names.addAll(Arrays.asList(manNames));
|
||||
|
||||
return names;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
entityManagerFactory.getCache().evictAll();
|
||||
entityManagerFactoryForEMS.getCache().evictAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear(String cacheRegionName) {
|
||||
CacheImplementor cacheImplementor = ((SessionFactoryImpl) entityManagerFactory.unwrap(SessionFactory.class))
|
||||
.getCache();
|
||||
cacheImplementor.evictRegion(cacheRegionName);
|
||||
|
||||
CacheImplementor cacheImplementorForEMS = ((SessionFactoryImpl) entityManagerFactoryForEMS
|
||||
.unwrap(SessionFactory.class)).getCache();
|
||||
cacheImplementorForEMS.evictRegion(cacheRegionName);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user