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