X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.jackrabbit%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjackrabbit%2FJackrabbitContainer.java;h=ee8b5e5d8344759dbd23d34adcf1e9fa1d765400;hb=2134dd19734711b05710c1250b665c32fbe7263c;hp=9f3fdf1867cafe4442e890abeb3adb2fe2f5ab6f;hpb=562975c6208f47789e4d6d4e062a70dfb77e0cf2;p=lgpl%2Fargeo-commons.git 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 9f3fdf186..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 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 Mathieu Baudier + * Copyright (C) 2007-2012 Mathieu Baudier * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.argeo.jackrabbit; import java.io.IOException; @@ -58,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; @@ -68,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 @@ -77,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 */ @@ -143,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); @@ -178,18 +184,18 @@ 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); } // check existing data model nodes + new NamespaceHelper(session).registerNamespace( + ArgeoNames.ARGEO, ArgeoNames.ARGEO_NAMESPACE); if (!session .itemExists(ArgeoJcrConstants.DATA_MODELS_BASE_PATH)) JcrUtils.mkdirs(session, @@ -226,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); @@ -255,6 +275,7 @@ public class JackrabbitContainer extends JackrabbitWrapper { session.getWorkspace().getVersionManager() .checkin(dataModel.getPath()); } finally { + IOUtils.closeQuietly(in); IOUtils.closeQuietly(reader); } @@ -475,4 +496,8 @@ public class JackrabbitContainer extends JackrabbitWrapper { this.forceCndImport = forceCndUpdate; } + public void setResourceLoader(ResourceLoader resourceLoader) { + this.resourceLoader = resourceLoader; + } + }