Explanatory notes on scanning and OSGi
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/9cc7293e Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/9cc7293e Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/9cc7293e Branch: refs/heads/master Commit: 9cc7293eb45efd045edd81793db31fa8b6f64110 Parents: d6ae051 Author: Alex Heneveld <[email protected]> Authored: Wed May 20 15:07:07 2015 +0100 Committer: Alex Heneveld <[email protected]> Committed: Wed May 20 15:07:24 2015 +0100 ---------------------------------------------------------------------- .../catalog/internal/BasicBrooklynCatalog.java | 25 ++++++++++++++------ .../catalog/internal/CatalogClasspathDo.java | 1 + docs/guide/ops/catalog/index.md | 5 ++-- .../brooklyn/cli/lister/ItemDescriptors.java | 1 - 4 files changed, 22 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cc7293e/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java index 88e5818..8c88974 100644 --- a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java +++ b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java @@ -786,19 +786,30 @@ public class BasicBrooklynCatalog implements BrooklynCatalog { } private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsFromBundles(ManagementContext mgmt, Collection<CatalogBundle> libraries) { - String[] urls = null; CatalogDto dto = CatalogDto.newNamedInstance("Bundles Scanned Catalog", "All annotated Brooklyn entities detected in the classpath", "scanning-bundles-classpath-"+libraries.hashCode()); - urls = new String[libraries.size()]; - int i=0; - for (CatalogBundle b: libraries) - urls[i++] = b.getUrl(); - + List<String> urls = MutableList.of(); + for (CatalogBundle b: libraries) { + // TODO currently does not support pre-installed bundles identified by name:version + // (ie where URL not supplied) + if (Strings.isNonBlank(b.getUrl())) { + urls.add(b.getUrl()); + } + } + + if (urls.isEmpty()) { + log.warn("No bundles to scan: scanJavaAnnotations currently only applies to OSGi bundles provided by URL"); + return MutableList.of(); + } + CatalogDo subCatalog = new CatalogDo(dto); - subCatalog.addToClasspath(urls); + subCatalog.addToClasspath(urls.toArray(new String[0])); return scanAnnotationsInternal(mgmt, subCatalog); } private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsInternal(ManagementContext mgmt, CatalogDo subCatalog) { + // TODO this does java-scanning only; + // the call when scanning bundles should use the CatalogItem instead and use OSGi when loading for scanning + // (or another scanning mechanism). see comments on CatalogClasspathDo.load subCatalog.mgmt = mgmt; subCatalog.setClasspathScanForEntities(CatalogScanningModes.ANNOTATIONS); subCatalog.load(); http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cc7293e/core/src/main/java/brooklyn/catalog/internal/CatalogClasspathDo.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogClasspathDo.java b/core/src/main/java/brooklyn/catalog/internal/CatalogClasspathDo.java index 095ebfd..c0716c8 100644 --- a/core/src/main/java/brooklyn/catalog/internal/CatalogClasspathDo.java +++ b/core/src/main/java/brooklyn/catalog/internal/CatalogClasspathDo.java @@ -105,6 +105,7 @@ public class CatalogClasspathDo { /** causes all scanning-based classpaths to scan the classpaths * (but does _not_ load all JARs) */ + // TODO this does a Java scan; we also need an OSGi scan which uses the OSGi classloaders when loading for scanning and resolving dependencies synchronized void load() { if (classpath == null || isLoaded) return; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cc7293e/docs/guide/ops/catalog/index.md ---------------------------------------------------------------------- diff --git a/docs/guide/ops/catalog/index.md b/docs/guide/ops/catalog/index.md index 7cb0e84..a16a453 100644 --- a/docs/guide/ops/catalog/index.md +++ b/docs/guide/ops/catalog/index.md @@ -106,10 +106,11 @@ The following optional catalog metadata is supported: Icons are instead typically installed either at the server from which the OSGi bundles or catalog items are supplied or in the `conf` folder of the Brooklyn distro. - `scanJavaAnnotations` [experimental]: if provided (as `true`), this will scan any locally provided - libraries for types annotated `@Catalog` and extract metadata to include them as catalog items. + library URLs for types annotated `@Catalog` and extract metadata to include them as catalog items. If no libraries are specified this will scan the default classpath. This feature is experimental and may change or be removed. - Also note that other metadata (such as versions, etc) may not be applied. + Also note that external OSGi dependencies are not supported + and other metadata (such as versions, etc) may not be applied. - `brooklyn.libraries`: a list of pointers to OSGi bundles required for the catalog item. This can be omitted if blueprints are pure YAML and everything required is included in the classpath and catalog. Where custom Java code or bundled resources is needed, however, OSGi JARs supply http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cc7293e/usage/cli/src/main/java/brooklyn/cli/lister/ItemDescriptors.java ---------------------------------------------------------------------- diff --git a/usage/cli/src/main/java/brooklyn/cli/lister/ItemDescriptors.java b/usage/cli/src/main/java/brooklyn/cli/lister/ItemDescriptors.java index 989a29d..097e3b0 100644 --- a/usage/cli/src/main/java/brooklyn/cli/lister/ItemDescriptors.java +++ b/usage/cli/src/main/java/brooklyn/cli/lister/ItemDescriptors.java @@ -45,7 +45,6 @@ import brooklyn.rest.domain.SummaryComparators; import brooklyn.rest.transform.EffectorTransformer; import brooklyn.rest.transform.EntityTransformer; import brooklyn.rest.transform.SensorTransformer; -import brooklyn.util.exceptions.Exceptions; import brooklyn.util.exceptions.RuntimeInterruptedException; import com.google.common.base.Strings;
