Introduce Jackrabbit clustering
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 4 Jan 2017 13:58:31 +0000 (14:58 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 4 Jan 2017 13:58:31 +0000 (14:58 +0100)
demo/argeo_node_cluster_0.properties [new file with mode: 0644]
demo/argeo_node_cluster_1.properties [new file with mode: 0644]
dep/org.argeo.dep.cms.sdk/pom.xml
org.argeo.cms/src/org/argeo/cms/internal/kernel/JackrabbitType.java
org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeDeployConfig.java
org.argeo.cms/src/org/argeo/cms/internal/kernel/RepoConf.java
org.argeo.cms/src/org/argeo/cms/internal/kernel/RepositoryBuilder.java
org.argeo.cms/src/org/argeo/cms/internal/kernel/repository-postgresql-ds.xml [deleted file]
org.argeo.cms/src/org/argeo/cms/internal/kernel/repository-postgresql_cluster.xml [new file with mode: 0644]
org.argeo.cms/src/org/argeo/cms/internal/kernel/repository-postgresql_ds.xml [new file with mode: 0644]

diff --git a/demo/argeo_node_cluster_0.properties b/demo/argeo_node_cluster_0.properties
new file mode 100644 (file)
index 0000000..f5e3344
--- /dev/null
@@ -0,0 +1,39 @@
+argeo.osgi.start.2.node=\
+org.eclipse.equinox.http.servlet,\
+org.eclipse.equinox.http.jetty,\
+org.eclipse.equinox.metatype,\
+org.eclipse.equinox.cm,\
+org.eclipse.rap.rwt.osgi
+
+argeo.osgi.start.3.node=\
+org.argeo.cms
+
+argeo.osgi.start.4.apps=\
+org.eclipse.gemini.blueprint.extender
+
+argeo.osgi.start.4.workbench=\
+org.eclipse.equinox.http.registry,\
+
+org.osgi.framework.security=osgi
+java.security.policy=file:../../all.policy
+
+argeo.node.repo.type=postgresql_cluster
+argeo.node.repo.clusterId=03233754-16c3-49a1-8a00-58bf89a65182
+argeo.node.repo.dburl=jdbc:postgresql://localhost/argeo_node_cluster
+argeo.node.repo.dbuser=argeo
+argeo.node.repo.dbpassword=argeo
+
+# HTTP
+org.osgi.service.http.port=7070
+
+# i18n
+argeo.i18n.locales=en,fr,ru
+eclipse.registry.MultiLanguage=true
+#argeo.i18n.defaultLocale=en
+
+# Logging
+log4j.configuration=file:../../log4j.properties
+
+# DON'T CHANGE BELOW
+org.eclipse.rap.workbenchAutostart=false
+org.eclipse.equinox.http.jetty.autostart=false
\ No newline at end of file
diff --git a/demo/argeo_node_cluster_1.properties b/demo/argeo_node_cluster_1.properties
new file mode 100644 (file)
index 0000000..89c76fe
--- /dev/null
@@ -0,0 +1,39 @@
+argeo.osgi.start.2.node=\
+org.eclipse.equinox.http.servlet,\
+org.eclipse.equinox.http.jetty,\
+org.eclipse.equinox.metatype,\
+org.eclipse.equinox.cm,\
+org.eclipse.rap.rwt.osgi
+
+argeo.osgi.start.3.node=\
+org.argeo.cms
+
+argeo.osgi.start.4.apps=\
+org.eclipse.gemini.blueprint.extender
+
+argeo.osgi.start.4.workbench=\
+org.eclipse.equinox.http.registry,\
+
+org.osgi.framework.security=osgi
+java.security.policy=file:../../all.policy
+
+argeo.node.repo.type=postgresql_cluster
+argeo.node.repo.clusterId=52463fa3-2917-4814-9ff7-685c41cbc7c7
+argeo.node.repo.dburl=jdbc:postgresql://localhost/argeo_node_cluster
+argeo.node.repo.dbuser=argeo
+argeo.node.repo.dbpassword=argeo
+
+# HTTP
+org.osgi.service.http.port=7071
+
+# i18n
+argeo.i18n.locales=en,fr,ru
+eclipse.registry.MultiLanguage=true
+#argeo.i18n.defaultLocale=en
+
+# Logging
+log4j.configuration=file:../../log4j.properties
+
+# DON'T CHANGE BELOW
+org.eclipse.rap.workbenchAutostart=false
+org.eclipse.equinox.http.jetty.autostart=false
\ No newline at end of file
index d21ce0b3a8c0fdfc099ee6500680e6bd9977b9b6..b699c835a7a88b106a3eb4ca6f756f41fb56f53e 100644 (file)
                        <groupId>org.argeo.tp.sdk</groupId>
                        <artifactId>org.tmatesoft.svnkit</artifactId>
                </dependency>
+               
+               <!-- Database drivers -->
+               <dependency>
+                       <groupId>org.argeo.tp.misc</groupId>
+                       <artifactId>org.postgresql.postgresql</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.argeo.tp.misc</groupId>
+                       <artifactId>org.h2</artifactId>
+               </dependency>
        </dependencies>
 
        <profiles>
index b10fd4e4987f55f7632db5d6c7e64e8379629aaa..2e0c371e09ee69e1b0201494ae679ed9876cf2c8 100644 (file)
@@ -2,5 +2,5 @@ package org.argeo.cms.internal.kernel;
 
 /** The available Jackrabbit node types */
 public enum JackrabbitType {
-       localfs, h2, postgresql, postgresql_ds, memory;
+       localfs, h2, postgresql, postgresql_ds,postgresql_cluster, memory;
 }
index 2f4af2eae3b5a90cdace69df52489acc2ac87a6e..39ca0b34cd246141e40cf183a03517bbed4caf9a 100644 (file)
@@ -23,6 +23,7 @@ import org.argeo.naming.LdifParser;
 import org.argeo.naming.LdifWriter;
 import org.argeo.node.NodeConstants;
 
+@Deprecated
 class NodeDeployConfig {
        private final String BASE = "ou=deploy,ou=node";
        private final Path path;
index b039db5905614138674fedf3967297f114ce0746..111c86c4abe1613d752347713ae748e2df07c264 100644 (file)
@@ -32,7 +32,9 @@ enum RepoConf implements EnumAD {
        /** Search cache size */
        searchCacheSize(1000),
        /** Max volatile index size */
-       maxVolatileIndexSize(1048576);
+       maxVolatileIndexSize(1048576),
+       /** Cluster id (if appropriate configuration) */
+       clusterId("default");
 
        /** The default value. */
        private Object def;
index 9bd81211e3134ecc2f59d4558e5267937519a7ef..f866c2b99a346c7884a72193d2eeaa5dd17db349 100644 (file)
@@ -55,25 +55,26 @@ class RepositoryBuilder {
                InputStream in = null;
                try {
                        final String base = "/org/argeo/cms/internal/kernel";
-                       switch (type) {
-                       case h2:
-                               in = cl.getResourceAsStream(base + "/repository-h2.xml");
-                               break;
-                       case postgresql:
-                               in = cl.getResourceAsStream(base + "/repository-postgresql.xml");
-                               break;
-                       case postgresql_ds:
-                               in = cl.getResourceAsStream(base + "/repository-postgresql-ds.xml");
-                               break;
-                       case memory:
-                               in = cl.getResourceAsStream(base + "/repository-memory.xml");
-                               break;
-                       case localfs:
-                               in = cl.getResourceAsStream(base + "/repository-localfs.xml");
-                               break;
-                       default:
-                               throw new ArgeoJcrException("Unsupported node type " + type);
-                       }
+//                     switch (type) {
+//                     case h2:
+//                             in = cl.getResourceAsStream(base + "/repository-h2.xml");
+//                             break;
+//                     case postgresql:
+//                             in = cl.getResourceAsStream(base + "/repository-postgresql.xml");
+//                             break;
+//                     case postgresql_ds:
+//                             in = cl.getResourceAsStream(base + "/repository-postgresql-ds.xml");
+//                             break;
+//                     case memory:
+//                             in = cl.getResourceAsStream(base + "/repository-memory.xml");
+//                             break;
+//                     case localfs:
+//                             in = cl.getResourceAsStream(base + "/repository-localfs.xml");
+//                             break;
+//                     default:
+//                             throw new ArgeoJcrException("Unsupported node type " + type);
+//                     }
+                       in = cl.getResourceAsStream(base + "/repository-"+type.name()+".xml");
 
                        if (in == null)
                                throw new ArgeoJcrException("Repository configuration not found");
@@ -152,6 +153,8 @@ class RepositoryBuilder {
                        setProp(props, RepoConf.dbpassword, "");
                        break;
                case postgresql:
+               case postgresql_ds:
+               case postgresql_cluster:
                        dburl = "jdbc:postgresql://localhost/demo";
                        setProp(props, RepoConf.dburl, dburl);
                        setProp(props, RepoConf.dbuser, "argeo");
diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/repository-postgresql-ds.xml b/org.argeo.cms/src/org/argeo/cms/internal/kernel/repository-postgresql-ds.xml
deleted file mode 100644 (file)
index 07a0d04..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE Repository PUBLIC "Jackrabbit 2.6" "http://jackrabbit.apache.org/dtd/repository-2.6.dtd">
-<Repository>
-       <!-- Shared datasource -->
-       <DataSources>
-               <DataSource name="dataSource">
-                       <param name="driver" value="org.postgresql.Driver" />
-                       <param name="url" value="${dburl}" />
-                       <param name="user" value="${dbuser}" />
-                       <param name="password" value="${dbpassword}" />
-                       <param name="databaseType" value="postgresql" />
-                       <param name="maxPoolSize" value="${maxPoolSize}" />
-               </DataSource>
-       </DataSources>
-
-       <!-- File system and datastore -->
-       <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
-               <param name="dataSourceName" value="dataSource" />
-               <param name="schema" value="postgresql" />
-               <param name="schemaObjectPrefix" value="fs_" />
-       </FileSystem>
-       <DataStore class="org.apache.jackrabbit.core.data.FileDataStore">
-               <param name="path" value="${rep.home}/datastore" />
-       </DataStore>
-
-       <!-- Workspace templates -->
-       <Workspaces rootPath="${rep.home}/workspaces"
-               defaultWorkspace="${defaultWorkspace}" />
-       <Workspace name="${wsp.name}">
-               <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
-                       <param name="dataSourceName" value="dataSource" />
-                       <param name="schema" value="postgresql" />
-                       <param name="schemaObjectPrefix" value="${wsp.name}_fs_" />
-               </FileSystem>
-               <PersistenceManager
-                       class="org.apache.jackrabbit.core.persistence.pool.PostgreSQLPersistenceManager">
-                       <param name="dataSourceName" value="dataSource" />
-                       <param name="schemaObjectPrefix" value="${wsp.name}_pm_" />
-                       <param name="bundleCacheSize" value="${bundleCacheMB}" />
-               </PersistenceManager>
-               <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-                       <param name="path" value="${wsp.home}/index" />
-                       <param name="extractorPoolSize" value="${extractorPoolSize}" />
-                       <param name="cacheSize" value="${searchCacheSize}" />
-                       <param name="maxVolatileIndexSize" value="${maxVolatileIndexSize}" />
-               </SearchIndex>
-               <WorkspaceSecurity>
-                       <AccessControlProvider
-                               class="org.argeo.security.jackrabbit.ArgeoAccessControlProvider" />
-               </WorkspaceSecurity>
-       </Workspace>
-
-       <!-- Versioning -->
-       <Versioning rootPath="${rep.home}/version">
-               <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
-                       <param name="dataSourceName" value="dataSource" />
-                       <param name="schema" value="postgresql" />
-                       <param name="schemaObjectPrefix" value="fs_ver_" />
-               </FileSystem>
-               <PersistenceManager
-                       class="org.apache.jackrabbit.core.persistence.pool.PostgreSQLPersistenceManager">
-                       <param name="dataSourceName" value="dataSource" />
-                       <param name="schemaObjectPrefix" value="pm_ver_" />
-                       <param name="bundleCacheSize" value="${bundleCacheMB}" />
-               </PersistenceManager>
-       </Versioning>
-
-       <!-- Indexing -->
-       <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-               <param name="path" value="${rep.home}/index" />
-               <param name="extractorPoolSize" value="${extractorPoolSize}" />
-               <param name="cacheSize" value="${searchCacheSize}" />
-               <param name="maxVolatileIndexSize" value="${maxVolatileIndexSize}" />
-       </SearchIndex>
-
-       <!-- Security -->
-       <Security appName="Jackrabbit">
-               <SecurityManager class="org.argeo.security.jackrabbit.ArgeoSecurityManager"
-                       workspaceName="security" />
-               <AccessManager class="org.argeo.security.jackrabbit.ArgeoAccessManager" />
-       </Security>
-</Repository>
\ No newline at end of file
diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/repository-postgresql_cluster.xml b/org.argeo.cms/src/org/argeo/cms/internal/kernel/repository-postgresql_cluster.xml
new file mode 100644 (file)
index 0000000..d8c23e7
--- /dev/null
@@ -0,0 +1,87 @@
+<?xml version="1.0"?>
+<!DOCTYPE Repository PUBLIC "Jackrabbit 2.6" "http://jackrabbit.apache.org/dtd/repository-2.6.dtd">
+<Repository>
+       <!-- Shared datasource -->
+       <DataSources>
+               <DataSource name="dataSource">
+                       <param name="driver" value="org.postgresql.Driver" />
+                       <param name="url" value="${dburl}" />
+                       <param name="user" value="${dbuser}" />
+                       <param name="password" value="${dbpassword}" />
+                       <param name="databaseType" value="postgresql" />
+                       <param name="maxPoolSize" value="${maxPoolSize}" />
+               </DataSource>
+       </DataSources>
+
+       <!-- File system and datastore -->
+       <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
+               <param name="dataSourceName" value="dataSource" />
+               <param name="schema" value="postgresql" />
+               <param name="schemaObjectPrefix" value="fs_" />
+       </FileSystem>
+
+       <!-- Workspace templates -->
+       <Workspaces rootPath="${rep.home}/workspaces"
+               defaultWorkspace="${defaultWorkspace}" />
+       <Workspace name="${wsp.name}">
+               <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
+                       <param name="dataSourceName" value="dataSource" />
+                       <param name="schema" value="postgresql" />
+                       <param name="schemaObjectPrefix" value="${wsp.name}_fs_" />
+               </FileSystem>
+               <PersistenceManager
+                       class="org.apache.jackrabbit.core.persistence.pool.PostgreSQLPersistenceManager">
+                       <param name="dataSourceName" value="dataSource" />
+                       <param name="schemaObjectPrefix" value="${wsp.name}_pm_" />
+                       <param name="bundleCacheSize" value="${bundleCacheMB}" />
+               </PersistenceManager>
+               <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
+                       <param name="path" value="${wsp.home}/index" />
+                       <param name="extractorPoolSize" value="${extractorPoolSize}" />
+                       <param name="cacheSize" value="${searchCacheSize}" />
+                       <param name="maxVolatileIndexSize" value="${maxVolatileIndexSize}" />
+               </SearchIndex>
+               <WorkspaceSecurity>
+                       <AccessControlProvider
+                               class="org.argeo.security.jackrabbit.ArgeoAccessControlProvider" />
+               </WorkspaceSecurity>
+       </Workspace>
+
+       <!-- Versioning -->
+       <Versioning rootPath="${rep.home}/version">
+               <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
+                       <param name="dataSourceName" value="dataSource" />
+                       <param name="schema" value="postgresql" />
+                       <param name="schemaObjectPrefix" value="fs_ver_" />
+               </FileSystem>
+               <PersistenceManager
+                       class="org.apache.jackrabbit.core.persistence.pool.PostgreSQLPersistenceManager">
+                       <param name="dataSourceName" value="dataSource" />
+                       <param name="schemaObjectPrefix" value="pm_ver_" />
+                       <param name="bundleCacheSize" value="${bundleCacheMB}" />
+               </PersistenceManager>
+       </Versioning>
+
+       <!-- Indexing -->
+       <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
+               <param name="path" value="${rep.home}/index" />
+               <param name="extractorPoolSize" value="${extractorPoolSize}" />
+               <param name="cacheSize" value="${searchCacheSize}" />
+               <param name="maxVolatileIndexSize" value="${maxVolatileIndexSize}" />
+       </SearchIndex>
+
+       <!-- Security -->
+       <Security appName="Jackrabbit">
+               <SecurityManager class="org.argeo.security.jackrabbit.ArgeoSecurityManager"
+                       workspaceName="security" />
+               <AccessManager class="org.argeo.security.jackrabbit.ArgeoAccessManager" />
+       </Security>
+
+       <!-- Clustering -->
+       <Cluster id="${clusterId}">
+               <Journal class="org.apache.jackrabbit.core.journal.DatabaseJournal">
+                       <param name="dataSourceName" value="dataSource" />
+                       <param name="schemaObjectPrefix" value="journal_" />
+               </Journal>
+       </Cluster>
+</Repository>
\ No newline at end of file
diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/repository-postgresql_ds.xml b/org.argeo.cms/src/org/argeo/cms/internal/kernel/repository-postgresql_ds.xml
new file mode 100644 (file)
index 0000000..07a0d04
--- /dev/null
@@ -0,0 +1,82 @@
+<?xml version="1.0"?>
+<!DOCTYPE Repository PUBLIC "Jackrabbit 2.6" "http://jackrabbit.apache.org/dtd/repository-2.6.dtd">
+<Repository>
+       <!-- Shared datasource -->
+       <DataSources>
+               <DataSource name="dataSource">
+                       <param name="driver" value="org.postgresql.Driver" />
+                       <param name="url" value="${dburl}" />
+                       <param name="user" value="${dbuser}" />
+                       <param name="password" value="${dbpassword}" />
+                       <param name="databaseType" value="postgresql" />
+                       <param name="maxPoolSize" value="${maxPoolSize}" />
+               </DataSource>
+       </DataSources>
+
+       <!-- File system and datastore -->
+       <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
+               <param name="dataSourceName" value="dataSource" />
+               <param name="schema" value="postgresql" />
+               <param name="schemaObjectPrefix" value="fs_" />
+       </FileSystem>
+       <DataStore class="org.apache.jackrabbit.core.data.FileDataStore">
+               <param name="path" value="${rep.home}/datastore" />
+       </DataStore>
+
+       <!-- Workspace templates -->
+       <Workspaces rootPath="${rep.home}/workspaces"
+               defaultWorkspace="${defaultWorkspace}" />
+       <Workspace name="${wsp.name}">
+               <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
+                       <param name="dataSourceName" value="dataSource" />
+                       <param name="schema" value="postgresql" />
+                       <param name="schemaObjectPrefix" value="${wsp.name}_fs_" />
+               </FileSystem>
+               <PersistenceManager
+                       class="org.apache.jackrabbit.core.persistence.pool.PostgreSQLPersistenceManager">
+                       <param name="dataSourceName" value="dataSource" />
+                       <param name="schemaObjectPrefix" value="${wsp.name}_pm_" />
+                       <param name="bundleCacheSize" value="${bundleCacheMB}" />
+               </PersistenceManager>
+               <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
+                       <param name="path" value="${wsp.home}/index" />
+                       <param name="extractorPoolSize" value="${extractorPoolSize}" />
+                       <param name="cacheSize" value="${searchCacheSize}" />
+                       <param name="maxVolatileIndexSize" value="${maxVolatileIndexSize}" />
+               </SearchIndex>
+               <WorkspaceSecurity>
+                       <AccessControlProvider
+                               class="org.argeo.security.jackrabbit.ArgeoAccessControlProvider" />
+               </WorkspaceSecurity>
+       </Workspace>
+
+       <!-- Versioning -->
+       <Versioning rootPath="${rep.home}/version">
+               <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
+                       <param name="dataSourceName" value="dataSource" />
+                       <param name="schema" value="postgresql" />
+                       <param name="schemaObjectPrefix" value="fs_ver_" />
+               </FileSystem>
+               <PersistenceManager
+                       class="org.apache.jackrabbit.core.persistence.pool.PostgreSQLPersistenceManager">
+                       <param name="dataSourceName" value="dataSource" />
+                       <param name="schemaObjectPrefix" value="pm_ver_" />
+                       <param name="bundleCacheSize" value="${bundleCacheMB}" />
+               </PersistenceManager>
+       </Versioning>
+
+       <!-- Indexing -->
+       <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
+               <param name="path" value="${rep.home}/index" />
+               <param name="extractorPoolSize" value="${extractorPoolSize}" />
+               <param name="cacheSize" value="${searchCacheSize}" />
+               <param name="maxVolatileIndexSize" value="${maxVolatileIndexSize}" />
+       </SearchIndex>
+
+       <!-- Security -->
+       <Security appName="Jackrabbit">
+               <SecurityManager class="org.argeo.security.jackrabbit.ArgeoSecurityManager"
+                       workspaceName="security" />
+               <AccessManager class="org.argeo.security.jackrabbit.ArgeoAccessManager" />
+       </Security>
+</Repository>
\ No newline at end of file