Bundle-Name: Jackrabbit Local Repository
Bundle-SymbolicName: org.argeo.jackrabbit.localrepo
Bundle-Version: 0.2.3.SNAPSHOT
-Import-Package: javax.jcr,
- org.apache.jackrabbit.core,
- org.apache.jackrabbit.core.config,
- org.apache.lucene.util;version="2.4.1",
+Import-Package: com.mysql.jdbc;version="[5.0.0,6.0.0)";resolution:=optional,
+ javax.jcr;version="[2.0.0,3.0.0)",
+ org.apache.jackrabbit.core;version="[2.0.0,3.0.0)",
+ org.apache.jackrabbit.core.config;version="[2.0.0,3.0.0)",
org.apache.xalan.processor,
org.argeo.jackrabbit,
+ org.argeo.jcr,
+ org.h2;version="[1.0.0,2.0.0)";resolution:=optional,
+ org.postgresql;version="[8.0.0,9.0.0)";resolution:=optional,
org.springframework.beans.factory.config
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<beans:beans xmlns="http://www.springframework.org/schema/osgi"\r
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"\r
- xsi:schemaLocation="http://www.springframework.org/schema/osgi \r
- http://www.springframework.org/schema/osgi/spring-osgi-1.1.xsd\r
- http://www.springframework.org/schema/beans \r
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
-\r
- <service ref="remoteJcrRepository" interface="javax.jcr.Repository">\r
- <service-properties>\r
- <beans:entry key="argeo.jcr.repository.name" value="local" />\r
- </service-properties>\r
- </service>\r
-\r
-\r
-</beans:beans>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
-
- <bean
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
- <property name="ignoreUnresolvablePlaceholders" value="true" />
- <property name="locations">
- <value>osgibundle:jackrabbit.properties</value>
- </property>
- </bean>
-
- <bean id="localJcrRepository" class="org.argeo.jackrabbit.JackrabbitContainer">
- <property name="uri"
- value="http://localhost:7070/org.argeo.server.jcr.webapp/remoting/repo" />
- <property name="homeDirectory" value="${slc.jackrabbit.home}" />
- <property name="configuration" value="${slc.jackrabbit.configuration}" />
- <property name="variables" value="osgibundle:/jackrabbit.properties" />
- <property name="namespaces">
- <map>
- <entry key="argeo" value="http://www.argeo.org/argeo" />
- </map>
- </property>
- <property name="cndFiles">
- <list>
- <value>classpath:/org/argeo/jcr/argeo.cnd</value>
- </list>
- </property>
- </bean>
-</beans>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<beans:beans xmlns="http://www.springframework.org/schema/osgi"\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"\r
+ xmlns:util="http://www.springframework.org/schema/util"\r
+ xsi:schemaLocation="http://www.springframework.org/schema/osgi \r
+ http://www.springframework.org/schema/osgi/spring-osgi-1.1.xsd\r
+ http://www.springframework.org/schema/beans \r
+ http://www.springframework.org/schema/beans/spring-beans-2.5.xsd\r
+ http://www.springframework.org/schema/util\r
+ http://www.springframework.org/schema/util/spring-util-2.5.xsd">\r
+\r
+ <service ref="localJcrRepository" interface="javax.jcr.Repository">\r
+ <service-properties>\r
+ <beans:entry value="local">\r
+ <beans:key>\r
+ <util:constant\r
+ static-field="org.argeo.jcr.ArgeoJcrConstants.JCR_REPOSITORY_ALIAS" />\r
+ </beans:key>\r
+ </beans:entry>\r
+ </service-properties>\r
+ </service>\r
+\r
+\r
+</beans:beans>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
+
+ <bean
+ class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+ <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
+ <property name="locations">
+ <value>osgibundle:localrepo.properties</value>
+ </property>
+ </bean>
+
+ <bean id="localJcrRepository" class="org.argeo.jackrabbit.JackrabbitContainer">
+ <property name="uri" value="${argeo.localrepo.uri}" />
+ <property name="homeDirectory" value="${argeo.localrepo.home}" />
+ <property name="configuration" value="${argeo.localrepo.configuration}" />
+ <property name="variables" value="osgibundle:/localrepo.properties" />
+ <property name="namespaces">
+ <map>
+ <entry key="argeo" value="http://www.argeo.org/argeo" />
+ </map>
+ </property>
+ <property name="cndFiles">
+ <list>
+ <value>classpath:/org/argeo/jcr/argeo.cnd</value>
+ </list>
+ </property>
+ </bean>
+</beans>
\ No newline at end of file
-argeo.localrepo.configuration=osgibundle:repository.xml
\ No newline at end of file
+argeo.localrepo.home=${user.home}/.argeo/localrepo
+
+## H2 Embedded (DEFAULT)
+argeo.localrepo.configuration=osgibundle:repository-h2.xml
+argeo.localrepo.dburl=jdbc:h2:file:${rep.home}/h2/localrepo_db
+argeo.localrepo.dbuser=sa
+argeo.localrepo.dbpassword=
+
+## Remote
+# Remote repository URI (overrides other configurations if not empty)
+argeo.localrepo.uri=
+
+# ADVANCED
+argeo.localrepo.maxPoolSize=10
\ No newline at end of file
<!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 1.6//EN"
"http://jackrabbit.apache.org/dtd/repository-2.0.dtd">
<Repository>
- <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
- <param name="path" value="${rep.home}/repository" />
- </FileSystem>
+ <!-- Shared datasource -->
+ <DataSources>
+ <DataSource name="dataSource">
+ <param name="driver" value="org.h2.Driver" />
+ <param name="url" value="${argeo.localrepo.dburl}" />
+ <param name="user" value="${argeo.localrepo.dbuser}" />
+ <param name="password" value="${argeo.localrepo.dbpassword}" />
+ <param name="databaseType" value="h2" />
+ <param name="maxPoolSize" value="${argeo.localrepo.maxPoolSize}" />
+ </DataSource>
+ </DataSources>
- <Security appName="Jackrabbit">
- <SecurityManager
- class="org.apache.jackrabbit.core.security.simple.SimpleSecurityManager"
- workspaceName="security">
- </SecurityManager>
- <AccessManager
- class="org.apache.jackrabbit.core.security.simple.SimpleAccessManager">
- <!-- <param name="config" value="${rep.home}/access.xml"/> -->
- </AccessManager>
-
- <LoginModule
- class="org.springframework.security.providers.jaas.SecurityContextLoginModule">
- </LoginModule>
-<!-- <LoginModule-->
-<!-- class="org.apache.jackrabbit.core.security.simple.SimpleLoginModule">-->
-<!-- <param name="anonymousId" value="anonymous" />-->
-<!-- <param name="adminId" value="admin" />-->
-<!-- </LoginModule>-->
- </Security>
+ <!-- File system and datastore -->
+ <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
+ <param name="dataSourceName" value="dataSource" />
+ <param name="schema" value="default" />
+ <param name="schemaObjectPrefix" value="fs_" />
+ </FileSystem>
+ <DataStore class="org.apache.jackrabbit.core.data.db.DbDataStore">
+ <param name="dataSourceName" value="dataSource" />
+ <param name="schemaObjectPrefix" value="ds_" />
+ </DataStore>
+ <!-- Workspace templates -->
<Workspaces rootPath="${rep.home}/workspaces"
- defaultWorkspace="default" />
-
+ defaultWorkspace="prod" />
<Workspace name="${wsp.name}">
- <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
- <param name="path" value="${wsp.home}" />
+ <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
+ <param name="dataSourceName" value="dataSource" />
+ <param name="schema" value="default" />
+ <param name="schemaObjectPrefix" value="${wsp.name}_fs_" />
</FileSystem>
<PersistenceManager
class="org.apache.jackrabbit.core.persistence.pool.H2PersistenceManager">
- <param name="url" value="jdbc:h2:file:${rep.home}/h2/sebi_db" />
- <param name="schemaObjectPrefix" value="${wsp.name}_" />
+ <param name="dataSourceName" value="dataSource" />
+ <param name="schemaObjectPrefix" value="${wsp.name}_pm_" />
</PersistenceManager>
<SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
<param name="path" value="${wsp.home}/index" />
- <param name="extractorPoolSize" value="2" />
- <param name="supportHighlighting" value="true" />
</SearchIndex>
</Workspace>
+ <!-- Versioning -->
<Versioning rootPath="${rep.home}/version">
- <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
- <param name="path" value="${rep.home}/version" />
+ <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
+ <param name="dataSourceName" value="dataSource" />
+ <param name="schema" value="default" />
+ <param name="schemaObjectPrefix" value="fs_ver_" />
</FileSystem>
<PersistenceManager
class="org.apache.jackrabbit.core.persistence.pool.H2PersistenceManager">
- <param name="url" value="jdbc:h2:file:${rep.home}/h2/sebi_version" />
- <param name="schemaObjectPrefix" value="version_" />
+ <param name="dataSourceName" value="dataSource" />
+ <param name="schemaObjectPrefix" value="pm_ver_" />
</PersistenceManager>
</Versioning>
+ <!-- Indexing -->
<SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
<param name="path" value="${rep.home}/repository/index" />
<param name="extractorPoolSize" value="2" />
<param name="supportHighlighting" value="true" />
</SearchIndex>
-</Repository>
+
+ <!-- Security -->
+ <Security appName="Jackrabbit">
+ <SecurityManager
+ class="org.apache.jackrabbit.core.security.simple.SimpleSecurityManager"
+ workspaceName="security">
+ </SecurityManager>
+ <AccessManager
+ class="org.apache.jackrabbit.core.security.simple.SimpleAccessManager">
+ </AccessManager>
+ <LoginModule
+ class="org.springframework.security.providers.jaas.SecurityContextLoginModule">
+ </LoginModule>
+ </Security>
+</Repository>
\ No newline at end of file
<DataSources>
<DataSource name="dataSource">
<param name="driver" value="org.postgresql.Driver" />
- <param name="url" value="${slc.jackrabbit.dburl}" />
- <param name="user" value="${slc.jackrabbit.dbuser}" />
- <param name="password" value="${slc.jackrabbit.dbpassword}" />
+ <param name="url" value="${argeo.localrepo.dburl}" />
+ <param name="user" value="${argeo.localrepo.dbuser}" />
+ <param name="password" value="${argeo.localrepo.dbpassword}" />
<param name="databaseType" value="postgresql" />
- <param name="maxPoolSize" value="10" />
+ <param name="maxPoolSize" value="${argeo.localrepo.maxPoolSize}" />
</DataSource>
</DataSources>
<AccessManager
class="org.apache.jackrabbit.core.security.simple.SimpleAccessManager">
</AccessManager>
-<!-- <LoginModule -->
-<!-- class="org.springframework.security.providers.jaas.SecurityContextLoginModule"> -->
-<!-- </LoginModule> -->
<LoginModule
- class="org.apache.jackrabbit.core.security.simple.SimpleLoginModule">
- <param name="anonymousId" value="anonymous" />
- <param name="adminId" value="admin" />
+ class="org.springframework.security.providers.jaas.SecurityContextLoginModule">
</LoginModule>
</Security>
</Repository>
\ No newline at end of file
--- /dev/null
+package org.argeo.jcr;
+
+/** JCR related constants*/
+public interface ArgeoJcrConstants {
+
+ public final static String JCR_REPOSITORY_ALIAS = "argeo.jcr.repository.alias";
+
+}
package org.argeo.jcr;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Map;
import java.util.Observable;
-import java.util.SortedMap;
import java.util.TreeMap;
import javax.jcr.Repository;
@SuppressWarnings("rawtypes")
public synchronized Repository getRepository(Map parameters)
throws RepositoryException {
- if (!parameters.containsKey(JCR_REPOSITORY_NAME))
- throw new RepositoryException("Parameter " + JCR_REPOSITORY_NAME
+ if (!parameters.containsKey(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS))
+ throw new RepositoryException("Parameter " + ArgeoJcrConstants.JCR_REPOSITORY_ALIAS
+ " has to be defined.");
- String name = parameters.get(JCR_REPOSITORY_NAME).toString();
- if (!repositories.containsKey(name))
- throw new RepositoryException("No repository registered with name "
- + name);
+ String alias = parameters.get(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS).toString();
+ if (!repositories.containsKey(alias))
+ throw new RepositoryException(
+ "No repository registered with alias " + alias);
- return repositories.get(name);
+ return repositories.get(alias);
}
/** Access to the read-only map */
@SuppressWarnings("rawtypes")
public synchronized void register(Repository repository, Map properties) {
// TODO: also check bean name?
- if (properties == null || !properties.containsKey(JCR_REPOSITORY_NAME)) {
+ if (properties == null || !properties.containsKey(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS)) {
log.warn("Cannot register a repository without property "
- + JCR_REPOSITORY_NAME);
+ + ArgeoJcrConstants.JCR_REPOSITORY_ALIAS);
return;
}
- String name = properties.get(JCR_REPOSITORY_NAME).toString();
+ String alias = properties.get(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS).toString();
Map<String, Repository> map = new TreeMap<String, Repository>(
repositories);
- map.put(name, repository);
+ map.put(alias, repository);
repositories = Collections.unmodifiableMap(map);
setChanged();
- notifyObservers(repository);
+ notifyObservers(alias);
}
/** Unregisters a service, typically called when OSGi services are unbound. */
@SuppressWarnings("rawtypes")
public synchronized void unregister(Repository repository, Map properties) {
// TODO: also check bean name?
- if (properties == null || !properties.containsKey(JCR_REPOSITORY_NAME)) {
+ if (properties == null || !properties.containsKey(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS)) {
log.warn("Cannot unregister a repository without property "
- + JCR_REPOSITORY_NAME);
+ + ArgeoJcrConstants.JCR_REPOSITORY_ALIAS);
return;
}
- String name = properties.get(JCR_REPOSITORY_NAME).toString();
+ String alias = properties.get(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS).toString();
Map<String, Repository> map = new TreeMap<String, Repository>(
repositories);
- map.put(name, repository);
+ map.put(alias, repository);
repositories = Collections.unmodifiableMap(map);
setChanged();
- notifyObservers(repository);
+ notifyObservers(alias);
}
}
/** Allows to register repositories by name. */
public interface RepositoryRegister extends RepositoryFactory {
- public final static String JCR_REPOSITORY_NAME = "argeo.jcr.repository.name";
-
/**
* The registered {@link Repository} as a read-only map. Note that this
* method should be called for each access in order to be sure to be up to