From a26f605a973ee078ded2b7e581f17f022acc8405 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 24 Feb 2015 23:52:29 +0000 Subject: [PATCH] Introduce Jackrabbit cache customization git-svn-id: https://svn.argeo.org/commons/trunk@7949 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../cms/internal/kernel/JackrabbitNode.java | 49 ++++++++++++++----- .../cms/internal/kernel/KernelConstants.java | 1 + 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/JackrabbitNode.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/JackrabbitNode.java index 627f26d0b..e31e8af7d 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/JackrabbitNode.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/JackrabbitNode.java @@ -15,7 +15,9 @@ import javax.jcr.RepositoryException; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.jackrabbit.core.RepositoryContext; import org.apache.jackrabbit.core.RepositoryImpl; +import org.apache.jackrabbit.core.cache.CacheManager; import org.apache.jackrabbit.core.config.RepositoryConfig; import org.apache.jackrabbit.core.config.RepositoryConfigurationParser; import org.argeo.ArgeoException; @@ -31,15 +33,17 @@ class JackrabbitNode extends JackrabbitWrapper implements KernelConstants, ArgeoJcrConstants { private static Log log = LogFactory.getLog(JackrabbitNode.class); + @SuppressWarnings("unused") + private RepositoryContext repositoryContext; + private ServiceRegistration repositoryReg; public JackrabbitNode(BundleContext bundleContext) { setBundleContext(bundleContext); - // TODO with OSGi CM - JackrabbitNodeType type = JackrabbitNodeType.valueOf(System - .getProperty(REPO_TYPE, h2.name())); + JackrabbitNodeType type = JackrabbitNodeType.valueOf(prop(REPO_TYPE, + h2.name())); try { - createNode(type); + repositoryContext = createNode(type); setCndFiles(Arrays.asList(DEFAULT_CNDS)); prepareDataModel(); } catch (Exception e) { @@ -139,33 +143,54 @@ class JackrabbitNode extends JackrabbitWrapper implements KernelConstants, private void setProp(Dictionary props, String key, String defaultValue) { - // TODO use OSGi CM instead of System properties - String value = System.getProperty(key, defaultValue); + String value = prop(key, defaultValue); props.put(key, value); } - private void createNode(JackrabbitNodeType type) throws RepositoryException { + private String prop(String key, String defaultValue) { + // TODO use OSGi CM instead of Framework/System properties + return KernelUtils.getFrameworkProp(key, defaultValue); + } + + private RepositoryContext createNode(JackrabbitNodeType type) + throws RepositoryException { Hashtable vars = getConfigurationProperties(type); RepositoryConfig repositoryConfig = getConfiguration(type, vars); - RepositoryImpl repository = createJackrabbitRepository(repositoryConfig); + RepositoryContext repositoryContext = createJackrabbitRepository(repositoryConfig); + RepositoryImpl repository = repositoryContext.getRepository(); + + // cache + String maxCacheMbStr = prop(KernelConstants.REPO_MAX_CACHE_MB, null); + if (maxCacheMbStr != null) { + Integer maxCacheMB = Integer.parseInt(maxCacheMbStr); + CacheManager cacheManager = repository.getCacheManager(); + cacheManager.setMaxMemory(maxCacheMB * 1024l * 1024l); + cacheManager.setMaxMemoryPerCache((maxCacheMB / 4) * 1024l * 1024l); + } + + // wrap the repository setRepository(repository); + return repositoryContext; } - private RepositoryImpl createJackrabbitRepository( + private RepositoryContext createJackrabbitRepository( RepositoryConfig repositoryConfig) throws RepositoryException { File homeDirectory = null; long begin = System.currentTimeMillis(); - RepositoryImpl repository; + // RepositoryImpl repository; // // Actual repository creation // - repository = RepositoryImpl.create(repositoryConfig); + RepositoryContext repositoryContext = RepositoryContext + .create(repositoryConfig); + // repository = repositoryContext.getRepository(); + // repository = RepositoryImpl.create(repositoryConfig); double duration = ((double) (System.currentTimeMillis() - begin)) / 1000; if (log.isTraceEnabled()) log.trace("Created Jackrabbit repository in " + duration + " s, home: " + homeDirectory); - return repository; + return repositoryContext; } } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelConstants.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelConstants.java index 299b912da..b3c0c5196 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelConstants.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelConstants.java @@ -13,6 +13,7 @@ public interface KernelConstants { final static String REPO_DBUSER = "argeo.node.repo.dbuser"; final static String REPO_DBPASSWORD = "argeo.node.repo.dbpassword"; final static String REPO_MAX_POOL_SIZE = "argeo.node.repo.maxPoolSize"; + final static String REPO_MAX_CACHE_MB = "argeo.node.repo.maxCacheMB"; final static String[] DEFAULT_CNDS = { "/org/argeo/jcr/argeo.cnd", "/org/argeo/cms/cms.cnd" }; -- 2.30.2