From: Mathieu Baudier Date: Tue, 3 Apr 2012 10:48:43 +0000 (+0000) Subject: Reintroduce ResourceLoader X-Git-Tag: argeo-commons-2.1.30~944 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=23ad181c5b68ef15259c881435efa93a6cebcb6a;p=lgpl%2Fargeo-commons.git Reintroduce ResourceLoader git-svn-id: https://svn.argeo.org/commons/trunk@5282 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java index c8d18698f..ee8b5e5d8 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java @@ -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; + } + } diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitWrapper.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitWrapper.java index ad8f5f8a0..9e25f03bc 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitWrapper.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitWrapper.java @@ -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; }