You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2015/02/06 13:48:14 UTC

[02/11] incubator-brooklyn git commit: Stop OSGi catalog items leaking libraries to parent.

Stop OSGi catalog items leaking libraries to parent.

The loader of the catalog item matching the type was used to load the type itself, while only the loader passed from caller should be used. If the catalog items' symbolicName was matching the java type they expose, they would be leaking their OSGi bundles.


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/3b8e5eb7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/3b8e5eb7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/3b8e5eb7

Branch: refs/heads/master
Commit: 3b8e5eb7060541b61d914476c4ab040ae3d870b6
Parents: fecec16
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Wed Dec 10 16:56:17 2014 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Thu Jan 29 16:41:25 2015 +0200

----------------------------------------------------------------------
 .../BrooklynComponentTemplateResolver.java         | 14 +-------------
 .../brooklyn/catalog/CatalogYamlEntityTest.java    | 17 +++++++++++++++++
 2 files changed, 18 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3b8e5eb7/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
index c1a8e4f..403a40e 100644
--- a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
+++ b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
@@ -217,19 +217,7 @@ public class BrooklynComponentTemplateResolver {
     
     /** tries to load the Java entity class */
     public Maybe<Class<? extends Entity>> tryLoadEntityClass() {
-        CatalogItem<Entity, EntitySpec<?>> item = getCatalogItem();
-        String typeName = getBrooklynType();
-        
-        if (item!=null) {
-            // add additional bundles
-            loader = new BrooklynClassLoadingContextSequential(mgmt, CatalogUtils.newClassLoadingContext(mgmt, item), loader);
-            
-            if (item.getJavaType() != null) {
-                typeName = item.getJavaType();
-            }
-        }
-        
-        return loader.tryLoadClass(typeName, Entity.class);
+        return loader.tryLoadClass(getBrooklynType(), Entity.class);
     }
 
     /** resolves the spec, updating the loader if a catalog item is loaded */

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3b8e5eb7/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
index 5724351..048a75f 100644
--- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
+++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
@@ -421,6 +421,23 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
         }
     }
 
+    @Test
+    public void testOsgiNotLeakingToParent() {
+        addCatalogOSGiEntity(SIMPLE_ENTITY_TYPE);
+        try {
+            addCatalogItem(
+                    "brooklyn.catalog:",
+                    "  id: " + SIMPLE_ENTITY_TYPE,
+                    "  version: " + TEST_VERSION + "-update",
+                    "",
+                    "services:",
+                    "- type: " + SIMPLE_ENTITY_TYPE);
+            fail("Catalog addition expected to fail due to non-existent java type " + SIMPLE_ENTITY_TYPE);
+        } catch (IllegalStateException e) {
+            assertEquals(e.getMessage(), "Recursive reference to " + SIMPLE_ENTITY_TYPE + " (and cannot be resolved as a Java type)");
+        }
+    }
+    
     private void registerAndLaunchAndAssertSimpleEntity(String symbolicName, String serviceType) throws Exception {
         addCatalogOSGiEntity(symbolicName, serviceType);
         String yaml = "name: simple-app-yaml\n" +