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;

Reply via email to