Use internal classloader for reading Jackrabbit configurations.
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 8 Sep 2021 05:14:15 +0000 (07:14 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 8 Sep 2021 05:14:15 +0000 (07:14 +0200)
org.argeo.cms/src/org/argeo/cms/internal/jcr/CustomRepositoryConfigurationParser.java
org.argeo.cms/src/org/argeo/cms/internal/jcr/RepositoryBuilder.java

index 2e703ced844da9138735a6b08034217d7ba3ca7e..c2898577eeccbac0ce21345d8c98a64af35b4ea9 100644 (file)
@@ -2,6 +2,7 @@ package org.argeo.cms.internal.jcr;
 
 import java.util.Properties;
 
+import org.apache.jackrabbit.core.config.BeanConfig;
 import org.apache.jackrabbit.core.config.ConfigurationException;
 import org.apache.jackrabbit.core.config.RepositoryConfigurationParser;
 import org.apache.jackrabbit.core.config.WorkspaceSecurityConfig;
@@ -14,7 +15,7 @@ import org.w3c.dom.Element;
  */
 @SuppressWarnings("restriction")
 class CustomRepositoryConfigurationParser extends RepositoryConfigurationParser {
-       private ClassLoader accessControlProviderClassLoader = null;
+       private ClassLoader classLoader = null;
 
        public CustomRepositoryConfigurationParser(Properties variables) {
                super(variables);
@@ -30,19 +31,28 @@ class CustomRepositoryConfigurationParser extends RepositoryConfigurationParser
                props.putAll(variables);
                CustomRepositoryConfigurationParser subParser = new CustomRepositoryConfigurationParser(props,
                                connectionFactory);
-               subParser.setAccessControlProviderClassLoader(accessControlProviderClassLoader);
+               subParser.setClassLoader(classLoader);
                return subParser;
        }
 
        @Override
        public WorkspaceSecurityConfig parseWorkspaceSecurityConfig(Element parent) throws ConfigurationException {
                WorkspaceSecurityConfig workspaceSecurityConfig = super.parseWorkspaceSecurityConfig(parent);
-               workspaceSecurityConfig.getAccessControlProviderConfig().setClassLoader(accessControlProviderClassLoader);
+               workspaceSecurityConfig.getAccessControlProviderConfig().setClassLoader(classLoader);
                return workspaceSecurityConfig;
        }
 
-       public void setAccessControlProviderClassLoader(ClassLoader accessControlProviderClassLoader) {
-               this.accessControlProviderClassLoader = accessControlProviderClassLoader;
+       @Override
+       protected BeanConfig parseBeanConfig(Element parent, String name) throws ConfigurationException {
+               BeanConfig beanConfig = super.parseBeanConfig(parent, name);
+               if (beanConfig.getClassName().startsWith("org.argeo")) {
+                       beanConfig.setClassLoader(classLoader);
+               }
+               return beanConfig;
+       }
+
+       public void setClassLoader(ClassLoader classLoader) {
+               this.classLoader = classLoader;
        }
 
 }
index 9480a2913d663ce40ba3d43e15859c02a8146bb3..fbb1e4f7a03f1a380f549b07da5fc952498ba84a 100644 (file)
@@ -61,7 +61,7 @@ public class RepositoryBuilder {
 
                        // custom configuration parser
                        CustomRepositoryConfigurationParser parser = new CustomRepositoryConfigurationParser(jackrabbitVars);
-                       parser.setAccessControlProviderClassLoader(cl);
+                       parser.setClassLoader(cl);
                        RepositoryConfig repositoryConfig = parser.parseRepositoryConfig(config);
                        repositoryConfig.init();