Repository: brooklyn-server Updated Branches: refs/heads/0.5.0 [created] 8ebab0b2f
Override AbstractApplication.init() - AbstractApplication.init() logs warning that the method will be most likely be deprecated in a future release. - Override init() in sub-classes. Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/d2ed034a Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/d2ed034a Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/d2ed034a Branch: refs/heads/0.5.0 Commit: d2ed034adb2b79e2954a5730eee8325c857d4a96 Parents: 320289e Author: Aled Sage <[email protected]> Authored: Thu Mar 28 14:52:48 2013 +0000 Committer: Aled Sage <[email protected]> Committed: Fri Mar 29 09:37:57 2013 +0000 ---------------------------------------------------------------------- .../entity/basic/AbstractApplication.java | 10 ++++++++++ .../brooklyn/entity/basic/AbstractEntity.groovy | 16 +++++++++------ .../entity/basic/BasicApplicationImpl.java | 5 +++++ .../catalog/internal/MyCatalogItems.java | 7 ++++++- .../test/entity/TestApplicationImpl.java | 6 +++++- .../CloudFoundryJavaClusterExample.groovy | 10 +++++++--- ...FoundryJavaClusterFromLocationExample.groovy | 5 +++++ .../OpenshiftExpressJavaWebAppCluster.groovy | 4 ++-- ...penshiftExpressJavaClusterOnlyExample.groovy | 21 ++++++++++++-------- .../rest/testing/mocks/RestMockApp.java | 4 ++++ .../util/BrooklynRestResourceUtilsTest.java | 4 ++++ 11 files changed, 71 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d2ed034a/core/src/main/java/brooklyn/entity/basic/AbstractApplication.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/basic/AbstractApplication.java b/core/src/main/java/brooklyn/entity/basic/AbstractApplication.java index 5923dd9..8cddb6e 100644 --- a/core/src/main/java/brooklyn/entity/basic/AbstractApplication.java +++ b/core/src/main/java/brooklyn/entity/basic/AbstractApplication.java @@ -20,6 +20,11 @@ import brooklyn.util.ResourceUtils; import brooklyn.util.exceptions.Exceptions; import brooklyn.util.flags.SetFromFlag; +/** + * Users can extend this to define the entities in their application, and the relationships between + * those entities. Users should override the {@link #init()} method, and in there should create + * their entities. + */ public abstract class AbstractApplication extends AbstractEntity implements StartableApplication { public static final Logger log = LoggerFactory.getLogger(AbstractApplication.class); @@ -88,6 +93,11 @@ public abstract class AbstractApplication extends AbstractEntity implements Star } @Override + public void init() { + log.warn("Deprecated: AbstractApplication.init() will be declared abstract in a future release; please override for code instantiating child entities"); + } + + @Override public Application getApplication() { if (application!=null) { if (application.getId().equals(getId())) http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d2ed034a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.groovy ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.groovy b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.groovy index f8ce84b..7d1e51d 100644 --- a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.groovy +++ b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.groovy @@ -57,13 +57,18 @@ import com.google.common.collect.Maps /** * Default {@link Entity} implementation, which should be extended whenever implementing an entity. - * + * <p> * Provides several common fields ({@link #name}, {@link #id}), and supports the core features of * an entity such as configuration keys, attributes, subscriptions and effector invocation. - * + * <p> + * If a sub-class is creating other entities, this should be done in an overridden {@link #init()} + * method. + * <p> + * Note that config is typically inherited by children, whereas the fields and attributes are not. + * <p> * Though currently Groovy code, this is very likely to change to pure Java in a future release of * Brooklyn so Groovy'isms should not be relied on. - * + * <p> * Sub-classes should have a no-argument constructor. When brooklyn creates an entity, it will: * <ol> * <li>Construct the entity via the no-argument constructor @@ -74,11 +79,9 @@ import com.google.common.collect.Maps * <li>Configure the entity, first via the "flags" map and then via configuration keys * <li>Set the parent * </ol> - * + * <p> * The legacy (pre 0.5) mechanism for creating entities is for others to call the constructor directly. * This is now deprecated. - * - * Note that config is typically inherited by children, whereas the fields and attributes are not. */ public abstract class AbstractEntity extends GroovyObjectSupport implements EntityLocal, EntityInternal, GroovyInterceptable { @@ -403,6 +406,7 @@ public abstract class AbstractEntity extends GroovyObjectSupport implements Enti * </pre> */ public void init() { + // no-op } /** http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d2ed034a/core/src/main/java/brooklyn/entity/basic/BasicApplicationImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/basic/BasicApplicationImpl.java b/core/src/main/java/brooklyn/entity/basic/BasicApplicationImpl.java index d68d14e..6237b10 100644 --- a/core/src/main/java/brooklyn/entity/basic/BasicApplicationImpl.java +++ b/core/src/main/java/brooklyn/entity/basic/BasicApplicationImpl.java @@ -3,4 +3,9 @@ package brooklyn.entity.basic; public class BasicApplicationImpl extends AbstractApplication implements BasicApplication { public BasicApplicationImpl() { } + + @Override + public void init() { + // no-op + } } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d2ed034a/core/src/test/java/brooklyn/catalog/internal/MyCatalogItems.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/catalog/internal/MyCatalogItems.java b/core/src/test/java/brooklyn/catalog/internal/MyCatalogItems.java index 70b6ba1..9914c40 100644 --- a/core/src/test/java/brooklyn/catalog/internal/MyCatalogItems.java +++ b/core/src/test/java/brooklyn/catalog/internal/MyCatalogItems.java @@ -8,7 +8,12 @@ import brooklyn.entity.basic.ApplicationBuilder; public class MyCatalogItems { @Catalog(description="Some silly app test") - public static class MySillyAppTemplate extends AbstractApplication {} + public static class MySillyAppTemplate extends AbstractApplication { + @Override + public void init() { + // no-op + } + } @Catalog(description="Some silly app builder test") public static class MySillyAppBuilderTemplate extends ApplicationBuilder { http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d2ed034a/core/src/test/java/brooklyn/test/entity/TestApplicationImpl.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/test/entity/TestApplicationImpl.java b/core/src/test/java/brooklyn/test/entity/TestApplicationImpl.java index 9d07706..1cc983c 100644 --- a/core/src/test/java/brooklyn/test/entity/TestApplicationImpl.java +++ b/core/src/test/java/brooklyn/test/entity/TestApplicationImpl.java @@ -9,7 +9,6 @@ import org.testng.Assert; import brooklyn.entity.Entity; import brooklyn.entity.Group; import brooklyn.entity.basic.AbstractApplication; -import brooklyn.entity.basic.AbstractEntity; import brooklyn.entity.basic.Entities; import brooklyn.entity.proxying.EntitySpec; import brooklyn.event.Sensor; @@ -29,6 +28,11 @@ public class TestApplicationImpl extends AbstractApplication implements TestAppl super(properties); } + @Override + public void init() { + // no-op + } + /** * @deprecated Use {@link #addChild(EntitySpec)} */ http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d2ed034a/systems/paas/cloudfoundry/src/test/java/brooklyn/extras/cloudfoundry/CloudFoundryJavaClusterExample.groovy ---------------------------------------------------------------------- diff --git a/systems/paas/cloudfoundry/src/test/java/brooklyn/extras/cloudfoundry/CloudFoundryJavaClusterExample.groovy b/systems/paas/cloudfoundry/src/test/java/brooklyn/extras/cloudfoundry/CloudFoundryJavaClusterExample.groovy index ec73603..89db1bd 100644 --- a/systems/paas/cloudfoundry/src/test/java/brooklyn/extras/cloudfoundry/CloudFoundryJavaClusterExample.groovy +++ b/systems/paas/cloudfoundry/src/test/java/brooklyn/extras/cloudfoundry/CloudFoundryJavaClusterExample.groovy @@ -33,9 +33,13 @@ public class CloudFoundryJavaClusterExample extends AbstractApplication { private static final Logger log = LoggerFactory.getLogger(CloudFoundryJavaClusterExample.class) public static final String WAR_FILE_URL = "classpath://hello-world.war"; - - CloudFoundryJavaWebAppCluster cloudfoundry = - new CloudFoundryJavaWebAppCluster(this, war: WAR_FILE_URL); + + CloudFoundryJavaWebAppCluster cloudfoundry; + + @Override + public void init() { + cloudfoundry = new CloudFoundryJavaWebAppCluster(this, war: WAR_FILE_URL); + } // TODO a richer example which starts CloudFoundry alongside Tomcats in EC2 with geoscaling http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d2ed034a/systems/paas/cloudfoundry/src/test/java/brooklyn/extras/cloudfoundry/CloudFoundryJavaClusterFromLocationExample.groovy ---------------------------------------------------------------------- diff --git a/systems/paas/cloudfoundry/src/test/java/brooklyn/extras/cloudfoundry/CloudFoundryJavaClusterFromLocationExample.groovy b/systems/paas/cloudfoundry/src/test/java/brooklyn/extras/cloudfoundry/CloudFoundryJavaClusterFromLocationExample.groovy index 0eb66a9..4f21441 100644 --- a/systems/paas/cloudfoundry/src/test/java/brooklyn/extras/cloudfoundry/CloudFoundryJavaClusterFromLocationExample.groovy +++ b/systems/paas/cloudfoundry/src/test/java/brooklyn/extras/cloudfoundry/CloudFoundryJavaClusterFromLocationExample.groovy @@ -41,6 +41,11 @@ class CloudFoundryJavaClusterFromLocationExample extends AbstractApplication { ElasticJavaWebAppService svc; @Override + public void init() { + // no-op; see preStart + } + + @Override public void preStart(Collection<? extends Location> locations) { svc = new ElasticJavaWebAppService.Factory().newFactoryForLocation( Iterables.getOnlyElement(locations) ). newEntity(this, war: WAR_FILE_URL); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d2ed034a/systems/paas/openshift/src/main/java/brooklyn/extras/openshift/OpenshiftExpressJavaWebAppCluster.groovy ---------------------------------------------------------------------- diff --git a/systems/paas/openshift/src/main/java/brooklyn/extras/openshift/OpenshiftExpressJavaWebAppCluster.groovy b/systems/paas/openshift/src/main/java/brooklyn/extras/openshift/OpenshiftExpressJavaWebAppCluster.groovy index 7e6acd6..d1911d4 100644 --- a/systems/paas/openshift/src/main/java/brooklyn/extras/openshift/OpenshiftExpressJavaWebAppCluster.groovy +++ b/systems/paas/openshift/src/main/java/brooklyn/extras/openshift/OpenshiftExpressJavaWebAppCluster.groovy @@ -21,6 +21,8 @@ class OpenshiftExpressJavaWebAppCluster extends AbstractEntity implements Starta private static final Logger log = LoggerFactory.getLogger(OpenshiftExpressJavaWebAppCluster.class) + public static final BasicConfigKey<String> APP_NAME = [ String, "appName", "System name for uniquely referring to application; defaults to Brooklyn999999 " ] + public OpenshiftExpressJavaWebAppCluster(Map flags=[:], Entity parent=null) { super(flags, parent) setConfigIfValNonNull(ROOT_WAR, flags.war) @@ -28,8 +30,6 @@ class OpenshiftExpressJavaWebAppCluster extends AbstractEntity implements Starta setAttribute(AbstractService.SERVICE_STATUS, "uninitialized") } - public static final BasicConfigKey<String> APP_NAME = [ String, "appName", "System name for uniquely referring to application; defaults to Brooklyn999999 " ] - public String getAppName() { def appName = getConfig(APP_NAME); if (appName) return appName; http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d2ed034a/systems/paas/openshift/src/test/java/brooklyn/extras/openshift/OpenshiftExpressJavaClusterOnlyExample.groovy ---------------------------------------------------------------------- diff --git a/systems/paas/openshift/src/test/java/brooklyn/extras/openshift/OpenshiftExpressJavaClusterOnlyExample.groovy b/systems/paas/openshift/src/test/java/brooklyn/extras/openshift/OpenshiftExpressJavaClusterOnlyExample.groovy index 0d2faa9..50d79f5 100644 --- a/systems/paas/openshift/src/test/java/brooklyn/extras/openshift/OpenshiftExpressJavaClusterOnlyExample.groovy +++ b/systems/paas/openshift/src/test/java/brooklyn/extras/openshift/OpenshiftExpressJavaClusterOnlyExample.groovy @@ -56,23 +56,28 @@ class OpenshiftExpressJavaClusterOnlyExample extends AbstractApplication { private static final Logger log = LoggerFactory.getLogger(OpenshiftExpressJavaClusterOnlyExample.class) File warFile = TestUtils.getResource("hello-world.war", getClass().getClassLoader()) - - OpenshiftExpressJavaWebAppCluster openshift = - new OpenshiftExpressJavaWebAppCluster(this, war: warFile.getAbsolutePath()); + + OpenshiftExpressJavaWebAppCluster openshift; + + @Override + public void init() { + openshift = new OpenshiftExpressJavaWebAppCluster(this, war: warFile.getAbsolutePath()); + } + // TODO a richer example which starts Openshift alongside JBosses in EC2 with geoscaling // TODO (shouldn't use the tomcat-branded hello world for this :) // ---- the code above is your app descriptor; code below runs it ---- - OpenshiftLocation loc = new OpenshiftLocation( - username: OpenshiftExpressAccessIntegrationTest.TEST_USER, - password: OpenshiftExpressAccessIntegrationTest.TEST_PASSWORD) - public static void main(String[] args) { + OpenshiftLocation loc = new OpenshiftLocation( + username: OpenshiftExpressAccessIntegrationTest.TEST_USER, + password: OpenshiftExpressAccessIntegrationTest.TEST_PASSWORD) + def app = new OpenshiftExpressJavaClusterOnlyExample(); - app.start([app.loc]); + app.start([loc]); log.info "should now be able to visit site (for 60s): {}", app.openshift.getWebAppAddress() //should now be able to visit (assert?) http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d2ed034a/usage/rest/src/test/java/brooklyn/rest/testing/mocks/RestMockApp.java ---------------------------------------------------------------------- diff --git a/usage/rest/src/test/java/brooklyn/rest/testing/mocks/RestMockApp.java b/usage/rest/src/test/java/brooklyn/rest/testing/mocks/RestMockApp.java index 249082b..f1575a8 100644 --- a/usage/rest/src/test/java/brooklyn/rest/testing/mocks/RestMockApp.java +++ b/usage/rest/src/test/java/brooklyn/rest/testing/mocks/RestMockApp.java @@ -15,4 +15,8 @@ public class RestMockApp extends AbstractApplication { super(properties); } + @Override + public void init() { + // no-op + } } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d2ed034a/usage/rest/src/test/java/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java ---------------------------------------------------------------------- diff --git a/usage/rest/src/test/java/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java b/usage/rest/src/test/java/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java index 319e87d..1e705de 100644 --- a/usage/rest/src/test/java/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java +++ b/usage/rest/src/test/java/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java @@ -95,6 +95,10 @@ public class BrooklynRestResourceUtilsTest { @Catalog public static class MyApplicationImpl extends AbstractApplication implements MyInterface { + @Override + public void init() { + // no-op + } } public static class MyPolicy extends AbstractPolicy {
