This commit is contained in:
Rinjae
2025-09-05 17:16:26 +09:00
commit c54ef1903f
4947 changed files with 817291 additions and 0 deletions
@@ -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);
}
@@ -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();
}
}
}
}
@@ -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);
}
}