Repository: incubator-brooklyn Updated Branches: refs/heads/master c9445a286 -> cfa0aa3cd
Adds BrooklynClassLoadingContext.getResources(String) As ClassLoader.getResources but returning an Iterable<URL> rather than an Enumeration<URL>. Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/7a3a1f8c Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/7a3a1f8c Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/7a3a1f8c Branch: refs/heads/master Commit: 7a3a1f8cd225b2aaf995d9f501185de28d5a39dd Parents: 9595ddc Author: Sam Corbett <[email protected]> Authored: Tue May 5 17:12:56 2015 +0100 Committer: Sam Corbett <[email protected]> Committed: Mon Jun 1 10:39:55 2015 +0100 ---------------------------------------------------------------------- .../BrooklynClassLoadingContext.java | 14 +++++++---- .../BrooklynClassLoadingContextSequential.java | 15 +++++++++++- .../JavaBrooklynClassLoadingContext.java | 15 +++++++++++- .../OsgiBrooklynClassLoadingContext.java | 14 ++++++++++- .../brooklyn/management/ha/OsgiManager.java | 25 ++++++++++++++++++++ 5 files changed, 76 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7a3a1f8c/api/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContext.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContext.java b/api/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContext.java index 2e79f57..cf4c320 100644 --- a/api/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContext.java +++ b/api/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContext.java @@ -34,11 +34,17 @@ public interface BrooklynClassLoadingContext { public ManagementContext getManagementContext(); public Class<?> loadClass(String className); public <T> Class<? extends T> loadClass(String className, @Nullable Class<T> supertype); - + public Maybe<Class<?>> tryLoadClass(String className); public <T> Maybe<Class<? extends T>> tryLoadClass(String className, @Nullable Class<T> supertype); - - /** as {@link ClassLoader#getResource(String)} */ + + /** As {@link ClassLoader#getResource(String)} */ public URL getResource(String name); - + + /** + * As {@link ClassLoader#getResources(String)} but returning an {@link Iterable} rather than + * an {@link java.util.Enumeration}. + */ + public Iterable<URL> getResources(String name); + } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7a3a1f8c/core/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContextSequential.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContextSequential.java b/core/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContextSequential.java index 551168b..e1b43b6 100644 --- a/core/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContextSequential.java +++ b/core/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContextSequential.java @@ -32,6 +32,8 @@ import brooklyn.util.exceptions.Exceptions; import brooklyn.util.guava.Maybe; import com.google.common.base.Objects; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; public final class BrooklynClassLoadingContextSequential extends AbstractBrooklynClassLoadingContext { @@ -86,7 +88,6 @@ public final class BrooklynClassLoadingContextSequential extends AbstractBrookly return Maybe.absent(Exceptions.create("Unable to load "+className+" from "+primaries, errors)); } - @Override public URL getResource(String resourceInThatDir) { for (BrooklynClassLoadingContext target: primaries) { @@ -101,6 +102,18 @@ public final class BrooklynClassLoadingContextSequential extends AbstractBrookly } @Override + public Iterable<URL> getResources(String name) { + List<Iterable<URL>> resources = Lists.newArrayList(); + for (BrooklynClassLoadingContext target : primaries) { + resources.add(target.getResources(name)); + } + for (BrooklynClassLoadingContext target : secondaries) { + resources.add(target.getResources(name)); + } + return Iterables.concat(resources); + } + + @Override public String toString() { return "classload:"+primaries+";"+secondaries; } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7a3a1f8c/core/src/main/java/brooklyn/management/classloading/JavaBrooklynClassLoadingContext.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/management/classloading/JavaBrooklynClassLoadingContext.java b/core/src/main/java/brooklyn/management/classloading/JavaBrooklynClassLoadingContext.java index ebc2329..7365596 100644 --- a/core/src/main/java/brooklyn/management/classloading/JavaBrooklynClassLoadingContext.java +++ b/core/src/main/java/brooklyn/management/classloading/JavaBrooklynClassLoadingContext.java @@ -21,7 +21,10 @@ package brooklyn.management.classloading; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; +import java.io.IOException; import java.net.URL; +import java.util.Collections; +import java.util.Enumeration; import brooklyn.management.ManagementContext; import brooklyn.util.exceptions.Exceptions; @@ -105,5 +108,15 @@ public class JavaBrooklynClassLoadingContext extends AbstractBrooklynClassLoadin public URL getResource(String name) { return getClassLoader().getResource(name); } - + + @Override + public Iterable<URL> getResources(String name) { + Enumeration<URL> resources; + try { + resources = getClassLoader().getResources(name); + } catch (IOException e) { + throw Exceptions.propagate(e); + } + return Collections.list(resources); + } } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7a3a1f8c/core/src/main/java/brooklyn/management/classloading/OsgiBrooklynClassLoadingContext.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/management/classloading/OsgiBrooklynClassLoadingContext.java b/core/src/main/java/brooklyn/management/classloading/OsgiBrooklynClassLoadingContext.java index 12c1a54..91e692f 100644 --- a/core/src/main/java/brooklyn/management/classloading/OsgiBrooklynClassLoadingContext.java +++ b/core/src/main/java/brooklyn/management/classloading/OsgiBrooklynClassLoadingContext.java @@ -20,6 +20,7 @@ package brooklyn.management.classloading; import java.net.URL; import java.util.Collection; +import java.util.Collections; import brooklyn.catalog.CatalogItem; import brooklyn.catalog.CatalogItem.CatalogBundle; @@ -114,7 +115,18 @@ public class OsgiBrooklynClassLoadingContext extends AbstractBrooklynClassLoadin } return null; } - + + @Override + public Iterable<URL> getResources(String name) { + if (mgmt != null) { + Maybe<OsgiManager> osgi = ((ManagementContextInternal) mgmt).getOsgiManager(); + if (osgi.isPresent() && hasBundles) { + return osgi.get().getResources(name, getBundles()); + } + } + return Collections.emptyList(); + } + public String getCatalogItemId() { return catalogItemId; } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7a3a1f8c/core/src/main/java/brooklyn/management/ha/OsgiManager.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/management/ha/OsgiManager.java b/core/src/main/java/brooklyn/management/ha/OsgiManager.java index 6444439..f3c050c 100644 --- a/core/src/main/java/brooklyn/management/ha/OsgiManager.java +++ b/core/src/main/java/brooklyn/management/ha/OsgiManager.java @@ -21,6 +21,8 @@ package brooklyn.management.ha; import java.io.File; import java.net.URL; import java.util.Arrays; +import java.util.Collections; +import java.util.Enumeration; import java.util.List; import java.util.Map; import java.util.Set; @@ -53,6 +55,7 @@ import brooklyn.util.time.Duration; import com.google.common.base.Throwables; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; public class OsgiManager { @@ -263,6 +266,9 @@ public class OsgiManager { return bundleFinder.find(); } + /** + * Iterates through catalogBundles until one contains a resource with the given name. + */ public URL getResource(String name, Iterable<CatalogBundle> catalogBundles) { for (CatalogBundle catalogBundle: catalogBundles) { try { @@ -278,6 +284,25 @@ public class OsgiManager { return null; } + /** + * @return An iterable of all resources matching name in catalogBundles. + */ + public Iterable<URL> getResources(String name, Iterable<CatalogBundle> catalogBundles) { + List<URL> resources = Lists.newArrayList(); + for (CatalogBundle catalogBundle : catalogBundles) { + try { + Maybe<Bundle> bundle = findBundle(catalogBundle); + if (bundle.isPresent()) { + Enumeration<URL> result = bundle.get().getResources(name); + resources.addAll(Collections.list(result)); + } + } catch (Exception e) { + Exceptions.propagateIfFatal(e); + } + } + return resources; + } + public Framework getFramework() { return framework; }
