package de.micromata.borgbutler.jcs;
|
|
import de.micromata.borgbutler.config.Configuration;
|
import de.micromata.borgbutler.config.ConfigurationHandler;
|
import org.apache.commons.jcs.JCS;
|
import org.apache.commons.jcs.access.CacheAccess;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
import java.io.File;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.util.Properties;
|
|
public class JCSCache {
|
private static Logger log = LoggerFactory.getLogger(JCSCache.class);
|
private static JCSCache instance = new JCSCache();
|
private static final String CONFIG_FILE = "jcs-basic-config.properties";
|
public static final String CACHE_DIR_NAME = "cache";
|
|
private JCSCache() {
|
Configuration configuration = ConfigurationHandler.getConfiguration();
|
File cacheDir = new File(ConfigurationHandler.getInstance().getWorkingDir(), CACHE_DIR_NAME);
|
if (!cacheDir.exists()) {
|
log.info("Creating cache dir: " + cacheDir.getAbsolutePath());
|
cacheDir.mkdir();
|
}
|
|
Properties props = new Properties();
|
try (InputStream inputStream = ClassLoader.getSystemResourceAsStream(CONFIG_FILE)) {
|
props.load(inputStream);
|
} catch (IOException ex) {
|
log.error("Error while loading jcs config file '" + CONFIG_FILE + "': " + ex.getMessage(), ex);
|
}
|
CacheAccess<String, String> jcs = JCS.getInstance("default");
|
props.setProperty("jcs.auxiliary.DC.attributes.DiskPath", cacheDir.getAbsolutePath());
|
props.setProperty("jcs.auxiliary.DC2.attributes.DiskPath", cacheDir.getAbsolutePath());
|
int cacheMaxDiscSizeMB = configuration.getCacheMaxDiscSizeMB();
|
props.setProperty("jcs.auxiliary.DC2.attributes.MaxKeySize", String.valueOf(cacheMaxDiscSizeMB * 1000));
|
JCS.setConfigProperties(props);
|
}
|
}
|