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>>() {