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;
import org.argeo.cms.CmsException;
import org.argeo.jackrabbit.JackrabbitWrapper;
import org.argeo.jcr.ArgeoJcrConstants;
+import org.argeo.jcr.DefaultRepositoryRegister;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.xml.sax.InputSource;
ArgeoJcrConstants {
private static Log log = LogFactory.getLog(JackrabbitNode.class);
+ @SuppressWarnings("unused")
+ private RepositoryContext repositoryContext;
+
private ServiceRegistration<Repository> 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) {
}
}
- public void publish() {
+ void publish(DefaultRepositoryRegister repositoryRegister) {
Hashtable<String, String> regProps = new Hashtable<String, String>();
regProps.put(JCR_REPOSITORY_ALIAS, ALIAS_NODE);
repositoryReg = getBundleContext().registerService(Repository.class,
this, regProps);
+ repositoryRegister.register(this, regProps);
}
public void destroy() {
Hashtable<String, Object> defaults = new Hashtable<String, Object>();
// home
- File osgiInstanceDir = KernelUtils
- .getOsgiInstanceDir(getBundleContext());
+ File osgiInstanceDir = KernelUtils.getOsgiInstanceDir();
File homeDir = new File(osgiInstanceDir, "node");
// home cannot be overridden
defaults.put(RepositoryConfigurationParser.REPOSITORY_HOME_VARIABLE,
private void setProp(Dictionary<String, Object> 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<String, Object> 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;
}
}