You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sj...@apache.org on 2014/08/29 18:54:05 UTC

[2/4] git commit: Fix BrooklyCatalog.createSpec, was creating the spec as if a regular app, not catalog item.

Fix BrooklyCatalog.createSpec, was creating the spec as if a regular app, not catalog item.

BrooklynAssemblyTemplateInstantiator.createSpec couldn't realize that the passed in plan was created from a catalog item - it was checking with the wrong id (plan name instead of catalog id). Fix the problem by passing a loader explicitly, making it the caller's responsibility to decide if it is a catalog item plan or a regular plan.


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

Branch: refs/heads/master
Commit: 4fdbecee81e0c91c0a067727b740b67cc23ae051
Parents: 187216b
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Fri Aug 29 18:41:01 2014 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Fri Aug 29 19:28:38 2014 +0300

----------------------------------------------------------------------
 .../api/AssemblyTemplateSpecInstantiator.java   |  3 +-
 .../catalog/internal/BasicBrooklynCatalog.java  |  2 +-
 .../camp/lite/TestAppAssemblyInstantiator.java  |  3 +-
 .../BrooklynAssemblyTemplateInstantiator.java   | 24 +++------------
 .../rest/resources/CatalogResourceTest.java     | 32 ++++++++++++++++++--
 5 files changed, 40 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4fdbecee/core/src/main/java/brooklyn/camp/brooklyn/api/AssemblyTemplateSpecInstantiator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/camp/brooklyn/api/AssemblyTemplateSpecInstantiator.java b/core/src/main/java/brooklyn/camp/brooklyn/api/AssemblyTemplateSpecInstantiator.java
index 70c9a71..40bd089 100644
--- a/core/src/main/java/brooklyn/camp/brooklyn/api/AssemblyTemplateSpecInstantiator.java
+++ b/core/src/main/java/brooklyn/camp/brooklyn/api/AssemblyTemplateSpecInstantiator.java
@@ -22,9 +22,10 @@ import io.brooklyn.camp.CampPlatform;
 import io.brooklyn.camp.spi.AssemblyTemplate;
 import io.brooklyn.camp.spi.instantiate.AssemblyTemplateInstantiator;
 import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.management.classloading.BrooklynClassLoadingContext;
 
 public interface AssemblyTemplateSpecInstantiator extends AssemblyTemplateInstantiator {
 
-    EntitySpec<?> createSpec(AssemblyTemplate template, CampPlatform platform);
+    EntitySpec<?> createSpec(AssemblyTemplate template, CampPlatform platform, BrooklynClassLoadingContext loader);
     
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4fdbecee/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 f3c3f40..7ff14bc 100644
--- a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
@@ -224,7 +224,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
         try {
             AssemblyTemplateInstantiator instantiator = at.getInstantiator().newInstance();
             if (instantiator instanceof AssemblyTemplateSpecInstantiator) {
-                return (SpecT) ((AssemblyTemplateSpecInstantiator)instantiator).createSpec(at, camp);
+                return (SpecT) ((AssemblyTemplateSpecInstantiator)instantiator).createSpec(at, camp, loader);
             }
             throw new IllegalStateException("Unable to instantiate YAML; incompatible instantiator "+instantiator+" for "+at);
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4fdbecee/core/src/test/java/brooklyn/camp/lite/TestAppAssemblyInstantiator.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/camp/lite/TestAppAssemblyInstantiator.java b/core/src/test/java/brooklyn/camp/lite/TestAppAssemblyInstantiator.java
index 0576716..5a052b4 100644
--- a/core/src/test/java/brooklyn/camp/lite/TestAppAssemblyInstantiator.java
+++ b/core/src/test/java/brooklyn/camp/lite/TestAppAssemblyInstantiator.java
@@ -29,6 +29,7 @@ import brooklyn.camp.brooklyn.api.HasBrooklynManagementContext;
 import brooklyn.entity.basic.ApplicationBuilder;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.management.ManagementContext;
+import brooklyn.management.classloading.BrooklynClassLoadingContext;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.MutableMap;
@@ -66,7 +67,7 @@ public class TestAppAssemblyInstantiator extends BasicAssemblyTemplateInstantiat
     }
 
     @Override
-    public EntitySpec<?> createSpec(AssemblyTemplate template, CampPlatform platform) {
+    public EntitySpec<?> createSpec(AssemblyTemplate template, CampPlatform platform, BrooklynClassLoadingContext loader) {
         EntitySpec<TestApplication> app = EntitySpec.create(TestApplication.class)
             .configure(TestEntity.CONF_NAME, template.getName())
             .configure(TestEntity.CONF_MAP_THING, MutableMap.of("type", template.getType(), "desc", template.getDescription()));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4fdbecee/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
index 53e31e0..de3fd60 100644
--- a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
+++ b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
@@ -41,7 +41,6 @@ import org.slf4j.LoggerFactory;
 
 import brooklyn.camp.brooklyn.api.AssemblyTemplateSpecInstantiator;
 import brooklyn.camp.brooklyn.api.HasBrooklynManagementContext;
-import brooklyn.catalog.BrooklynCatalog;
 import brooklyn.catalog.CatalogItem;
 import brooklyn.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker;
 import brooklyn.config.BrooklynServerConfig;
@@ -86,7 +85,8 @@ public class BrooklynAssemblyTemplateInstantiator implements AssemblyTemplateSpe
     public Application create(AssemblyTemplate template, CampPlatform platform) {
         ManagementContext mgmt = getBrooklynManagementContext(platform);
         
-        EntitySpec<? extends Application> spec = createSpec(template, platform);
+        BrooklynClassLoadingContext loader = JavaBrooklynClassLoadingContext.newDefault(mgmt);
+        EntitySpec<? extends Application> spec = createSpec(template, platform, loader);
         
         Application instance = mgmt.getEntityManager().createEntity(spec);
         log.info("CAMP placing '{}' under management", instance);
@@ -95,22 +95,6 @@ public class BrooklynAssemblyTemplateInstantiator implements AssemblyTemplateSpe
         return instance;
     }
     
-    public EntitySpec<? extends Application> createSpec(AssemblyTemplate template, CampPlatform platform) {
-        log.debug("CAMP creating application instance for {} ({})", template.getId(), template);
-        
-        ManagementContext mgmt = getBrooklynManagementContext(platform);
-        BrooklynCatalog catalog = mgmt.getCatalog();
-        
-        CatalogItem<?,?> item = catalog.getCatalogItem(template.getName());
-        BrooklynClassLoadingContext loader;
-        if (item!=null) {
-            loader = item.newClassLoadingContext(mgmt);
-        } else {
-            loader = JavaBrooklynClassLoadingContext.newDefault(mgmt);
-        }
-        return createApplicationFromCampTemplate(template, platform, loader);
-    }
-    
     private ManagementContext getBrooklynManagementContext(CampPlatform platform) {
         return ((HasBrooklynManagementContext)platform).getBrooklynManagementContext();
     }
@@ -123,7 +107,9 @@ public class BrooklynAssemblyTemplateInstantiator implements AssemblyTemplateSpe
     }
 
     @SuppressWarnings("unchecked")
-    protected EntitySpec<? extends Application> createApplicationFromCampTemplate(AssemblyTemplate template, CampPlatform platform, BrooklynClassLoadingContext loader) {
+    public EntitySpec<? extends Application> createSpec(AssemblyTemplate template, CampPlatform platform, BrooklynClassLoadingContext loader) {
+        log.debug("CAMP creating application instance for {} ({})", template.getId(), template);
+
         // AssemblyTemplates created via PDP, _specifying_ then entities to put in
 
         BrooklynComponentTemplateResolver resolver = BrooklynComponentTemplateResolver.Factory.newInstance(

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4fdbecee/usage/rest-server/src/test/java/brooklyn/rest/resources/CatalogResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/CatalogResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/CatalogResourceTest.java
index dca7a44..efdf001 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/CatalogResourceTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/resources/CatalogResourceTest.java
@@ -43,6 +43,7 @@ import brooklyn.management.osgi.OsgiStandaloneTest;
 import brooklyn.policy.autoscaling.AutoScalerPolicy;
 import brooklyn.rest.domain.CatalogEntitySummary;
 import brooklyn.rest.domain.CatalogItemSummary;
+import brooklyn.rest.domain.CatalogPolicySummary;
 import brooklyn.rest.testing.BrooklynRestResourceTest;
 import brooklyn.util.collections.MutableList;
 
@@ -68,7 +69,7 @@ public class CatalogResourceTest extends BrooklynRestResourceTest {
   @Test
   /** based on CampYamlLiteTest */
   public void testRegisterCustomEntityWithBundleWhereEntityIsFromCoreAndIconFromBundle() {
-    String registeredTypeName = "my.catalog.app.id";
+    String registeredTypeName = "my.catalog.entity.id";
     String bundleUrl = OsgiStandaloneTest.BROOKLYN_TEST_OSGI_ENTITIES_URL;
     String yaml =
         "brooklyn.catalog:\n"+
@@ -109,7 +110,7 @@ public class CatalogResourceTest extends BrooklynRestResourceTest {
     // now let's check other things on the item
     assertEquals(entityItem.getName(), "My Catalog App");
     assertEquals(entityItem.getDescription(), "My description");
-    assertEquals(entityItem.getIconUrl(), "/v1/catalog/icon/my.catalog.app.id");
+    assertEquals(entityItem.getIconUrl(), "/v1/catalog/icon/" + registeredTypeName);
     assertEquals(item.getIconUrl(), "classpath:/brooklyn/osgi/tests/icon.gif");
     
     byte[] iconData = client().resource("/v1/catalog/icon/"+registeredTypeName).get(byte[].class);
@@ -117,6 +118,33 @@ public class CatalogResourceTest extends BrooklynRestResourceTest {
   }
 
   @Test
+  public void testRegisterOSGiPolicy() {
+    String registeredTypeName = "my.catalog.policy.id";
+    String policyType = "brooklyn.osgi.tests.SimplePolicy";
+    String bundleUrl = OsgiStandaloneTest.BROOKLYN_TEST_OSGI_ENTITIES_URL;
+
+    String yaml =
+        "brooklyn.catalog:\n"+
+        "  id: " + registeredTypeName + "\n"+
+        "  name: My Catalog App\n"+
+        "  description: My description\n"+
+        "  version: 0.1.2\n"+
+        "  libraries:\n"+
+        "  - url: " + bundleUrl + "\n"+
+        "\n"+
+        "brooklyn.policies:\n"+
+        "- type: " + policyType;
+
+    CatalogPolicySummary entityItem = client().resource("/v1/catalog")
+        .post(CatalogPolicySummary.class, yaml);
+
+    assertEquals(entityItem.getRegisteredType(), registeredTypeName);
+    Assert.assertNotNull(entityItem.getPlanYaml());
+    Assert.assertTrue(entityItem.getPlanYaml().contains(policyType));
+    assertEquals(entityItem.getId(), registeredTypeName);
+  }
+
+  @Test
   public void testListAllEntities() {
     List<CatalogItemSummary> entities = client().resource("/v1/catalog/entities")
         .get(new GenericType<List<CatalogItemSummary>>() {