X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.server.jcr%2Fsrc%2Forg%2Fargeo%2Fjackrabbit%2FOsgiJackrabbitRepositoryFactory.java;fp=org.argeo.server.jcr%2Fsrc%2Forg%2Fargeo%2Fjackrabbit%2FOsgiJackrabbitRepositoryFactory.java;h=a617ec6e338402a91704d843f1c814ddd6914419;hb=4f3195c9dc273e6e396920c8fa19e9605b9831e2;hp=b28699e60c029fdf35e2cc81e4d421627789e2dd;hpb=05e5c99eb2057d995365362216d775dc121f6113;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.server.jcr/src/org/argeo/jackrabbit/OsgiJackrabbitRepositoryFactory.java b/org.argeo.server.jcr/src/org/argeo/jackrabbit/OsgiJackrabbitRepositoryFactory.java index b28699e60..a617ec6e3 100644 --- a/org.argeo.server.jcr/src/org/argeo/jackrabbit/OsgiJackrabbitRepositoryFactory.java +++ b/org.argeo.server.jcr/src/org/argeo/jackrabbit/OsgiJackrabbitRepositoryFactory.java @@ -15,30 +15,47 @@ */ package org.argeo.jackrabbit; +import java.util.Collection; import java.util.Hashtable; import java.util.Properties; import javax.jcr.Repository; +import org.argeo.jcr.ArgeoJcrException; import org.osgi.framework.BundleContext; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.ServiceReference; /** * OSGi-aware Jackrabbit repository factory which can retrieve/publish * {@link Repository} as OSGi services. */ -public class OsgiJackrabbitRepositoryFactory extends - JackrabbitRepositoryFactory { +public class OsgiJackrabbitRepositoryFactory extends JackrabbitRepositoryFactory { private BundleContext bundleContext; - protected void publish(String alias, Repository repository, - Properties properties) { + @Override + protected Repository getRepositoryByAlias(String alias) { + try { + Collection> srs = bundleContext.getServiceReferences(Repository.class, + "(" + JCR_REPOSITORY_ALIAS + "=" + alias + ")"); + if (srs.size() == 0) + throw new ArgeoJcrException("No repository with alias " + alias + " found in OSGi registry"); + else if (srs.size() > 1) + throw new ArgeoJcrException( + srs.size() + " repositories with alias " + alias + " found in OSGi registry"); + return bundleContext.getService(srs.iterator().next()); + } catch (InvalidSyntaxException e) { + throw new ArgeoJcrException("Cannot find repository with alias " + alias, e); + } + } + + protected void publish(String alias, Repository repository, Properties properties) { if (bundleContext != null) { // do not modify reference Hashtable props = new Hashtable(); props.putAll(props); props.put(JCR_REPOSITORY_ALIAS, alias); - bundleContext.registerService(Repository.class.getName(), - repository, props); + bundleContext.registerService(Repository.class.getName(), repository, props); } }