Ard Schrijvers pushed to branch jackrabbit-2.10.1-patched at cms-community / 
hippo-jackrabbit-patches


Commits:
4b8cb2af by Ard Schrijvers at 2016-07-21T20:44:08+02:00
REPO-1408 Register new cluster node as up to date with the current global 
revision

- - - - -


2 changed files:

- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
- 
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java


Changes:

=====================================
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
=====================================
--- 
a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
+++ 
b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
@@ -37,6 +37,8 @@ import java.util.concurrent.TimeUnit;
 import javax.jcr.AccessDeniedException;
 import javax.jcr.Credentials;
 import javax.jcr.LoginException;
+import javax.jcr.NamespaceException;
+import javax.jcr.NamespaceRegistry;
 import javax.jcr.NoSuchWorkspaceException;
 import javax.jcr.PropertyType;
 import javax.jcr.Repository;
@@ -240,6 +242,32 @@ public class RepositoryImpl extends AbstractRepository
      */
     private WorkspaceEventChannel createWorkspaceEventChannel;
 
+    private class DelegatingClusterContext extends ExternalEventListener 
implements ClusterContext {
+
+        private NamespaceResolver namespaceResolver;
+
+        private final NamespaceResolver delegatingNamespaceResolver = new 
NamespaceResolver() {
+            @Override
+            public String getURI(final String prefix) throws 
NamespaceException {
+                return namespaceResolver != null ? 
namespaceResolver.getURI(prefix) : null;
+            }
+
+            @Override
+            public String getPrefix(final String uri) throws 
NamespaceException {
+                return namespaceResolver != null ? 
namespaceResolver.getPrefix(uri) : null;
+            }
+        };
+
+        public void setNamespaceRegistry(NamespaceRegistry namespaceRegistry) {
+            namespaceResolver = new 
RegistryNamespaceResolver(namespaceRegistry);
+        }
+
+        @Override
+        public NamespaceResolver getNamespaceResolver() {
+            return delegatingNamespaceResolver;
+        }
+    }
+
     /**
      * Protected constructor.
      *
@@ -270,6 +298,20 @@ public class RepositoryImpl extends AbstractRepository
             initRepositoryDescriptors();
 
             // create registries
+            // initialize optional clustering before setting up any other
+            // external event source that a cluster node will be interested in
+            ClusterNode clusterNode = null;
+            DelegatingClusterContext clusterContext = null;
+            if (repConfig.getClusterConfig() != null) {
+                clusterNode = new ClusterNode();
+                clusterContext = new DelegatingClusterContext();
+                try {
+                    clusterNode.init(clusterContext);
+                }
+                catch (Exception e) {
+                    throw new RepositoryException(e);
+                }
+            }
             context.setNamespaceRegistry(createNamespaceRegistry());
             context.setNodeTypeRegistry(createNodeTypeRegistry());
             context.setPrivilegeRegistry(new 
PrivilegeRegistry(context.getNamespaceRegistry(), context.getFileSystem()));
@@ -295,11 +337,8 @@ public class RepositoryImpl extends AbstractRepository
                 wspInfos.put(config.getName(), info);
             }
 
-            // initialize optional clustering before setting up any other
-            // external event source that a cluster node will be interested in
-            ClusterNode clusterNode = null;
-            if (repConfig.getClusterConfig() != null) {
-                clusterNode = createClusterNode();
+            if (clusterNode != null) {
+                
clusterContext.setNamespaceRegistry(context.getNamespaceRegistry());
                 context.setClusterNode(clusterNode);
                 context.getNamespaceRegistry().setEventChannel(clusterNode);
                 context.getNodeTypeRegistry().setEventChannel(clusterNode);


=====================================
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java
=====================================
--- 
a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java
+++ 
b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java
@@ -790,6 +790,13 @@ public class DatabaseJournal extends AbstractJournal 
implements DatabaseAware {
 
                 // Insert the given revision in the database
                 if (!exists) {
+                    if (revision == 0l) {
+                        // cluster node is new, start revision is current 
journal head
+                        rs = conHelper.exec(selectGlobalStmtSQL, null, false, 
0);
+                        if (rs.next()) {
+                            revision = rs.getLong(1);
+                        }
+                    }
                     conHelper.exec(insertLocalRevisionStmtSQL, revision, 
getId());
                 }
 



View it on GitLab: 
https://code.onehippo.org/cms-community/hippo-jackrabbit-patches/commit/4b8cb2aff7aa6c1628121fd837c1bdfc49a74c2e
_______________________________________________
Hippocms-svn mailing list
Hippocms-svn@lists.onehippo.org
https://lists.onehippo.org/mailman/listinfo/hippocms-svn

Reply via email to