Reintroduce ResourceLoader
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 3 Apr 2012 10:48:43 +0000 (10:48 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 3 Apr 2012 10:48:43 +0000 (10:48 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@5282 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java
server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitWrapper.java

index c8d18698f9c2ddbc546299edf8d1eb473ed25c7c..ee8b5e5d8344759dbd23d34adcf1e9fa1d765400 100644 (file)
@@ -57,7 +57,9 @@ import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.packageadmin.ExportedPackage;
 import org.osgi.service.packageadmin.PackageAdmin;
+import org.springframework.context.ResourceLoaderAware;
 import org.springframework.core.io.Resource;
+import org.springframework.core.io.ResourceLoader;
 import org.springframework.security.Authentication;
 import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
@@ -67,7 +69,8 @@ import org.springframework.util.SystemPropertyUtils;
  * Wrapper around a Jackrabbit repository which allows to configure it in Spring
  * and expose it as a {@link Repository}.
  */
-public class JackrabbitContainer extends JackrabbitWrapper {
+public class JackrabbitContainer extends JackrabbitWrapper implements
+               ResourceLoaderAware {
        private Log log = LogFactory.getLog(JackrabbitContainer.class);
 
        // remote
@@ -76,6 +79,7 @@ public class JackrabbitContainer extends JackrabbitWrapper {
        // local
        private Resource configuration;
        private Resource variables;
+       private ResourceLoader resourceLoader;
 
        // data model
        /** Node type definitions in CND format */
@@ -142,7 +146,10 @@ public class JackrabbitContainer extends JackrabbitWrapper {
 
                Session session = null;
                try {
-                       session = login();
+                       if (remoteSystemCredentials == null)
+                               session = login();
+                       else
+                               session = login(remoteSystemCredentials);
                        // register namespaces
                        if (namespaces.size() > 0) {
                                NamespaceHelper namespaceHelper = new NamespaceHelper(session);
@@ -177,13 +184,11 @@ public class JackrabbitContainer extends JackrabbitWrapper {
                                                }
                                        } else {
                                                url = getClass().getClassLoader().getResource(resUrl);
+                                               // if (url == null)
+                                               // url = Thread.currentThread()
+                                               // .getContextClassLoader()
+                                               // .getResource(resUrl);
                                        }
-                                       if (url == null)
-                                               throw new ArgeoException("No " + resUrl
-                                                               + " in the classpath,"
-                                                               + " make sure the containing"
-                                                               + " package is visible.");
-
                                } else {
                                        url = new URL(resUrl);
                                }
@@ -227,9 +232,23 @@ public class JackrabbitContainer extends JackrabbitWrapper {
                                        return;
                                }
 
+                               InputStream in = null;
                                Reader reader = null;
                                try {
-                                       reader = new InputStreamReader(url.openStream());
+                                       if (url != null) {
+                                               in = url.openStream();
+                                       } else if (resourceLoader != null) {
+                                               Resource res = resourceLoader.getResource(resUrl);
+                                               in = res.getInputStream();
+                                               url = res.getURL();
+                                       } else {
+                                               throw new ArgeoException("No " + resUrl
+                                                               + " in the classpath,"
+                                                               + " make sure the containing"
+                                                               + " package is visible.");
+                                       }
+
+                                       reader = new InputStreamReader(in);
                                        // actually imports the CND
                                        CndImporter.registerNodeTypes(reader, session, true);
 
@@ -256,6 +275,7 @@ public class JackrabbitContainer extends JackrabbitWrapper {
                                        session.getWorkspace().getVersionManager()
                                                        .checkin(dataModel.getPath());
                                } finally {
+                                       IOUtils.closeQuietly(in);
                                        IOUtils.closeQuietly(reader);
                                }
 
@@ -476,4 +496,8 @@ public class JackrabbitContainer extends JackrabbitWrapper {
                this.forceCndImport = forceCndUpdate;
        }
 
+       public void setResourceLoader(ResourceLoader resourceLoader) {
+               this.resourceLoader = resourceLoader;
+       }
+
 }
index ad8f5f8a0fac1a5be89da3def497692fe9afd554..9e25f03bcf16c46f9671cb47fedc4bcc020fcc94 100644 (file)
@@ -327,10 +327,10 @@ public abstract class JackrabbitWrapper implements Repository {
        /** Wraps access to the repository, making sure it is available. */
        protected Repository getRepository() {
                if (repository == null) {
-                       throw new ArgeoException(
-                                       "No repository initialized."
-                                                       + " Was the init() method called?"
-                                                       + " The dispose() method should also be called on shutdown.");
+                       throw new ArgeoException("No repository initialized."
+                                       + " Was the init() method called?"
+                                       + " The destroy() method should also"
+                                       + " be called on shutdown.");
                }
                return repository;
        }