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/06/02 19:17:56 UTC

[1/6] incubator-brooklyn git commit: Upgrade freemarker, latest version fixes Jython loading errors

Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 9595ddc94 -> 54af9935f


Upgrade freemarker, latest version fixes Jython loading errors

See http://sourceforge.net/p/freemarker/bugs/394/, https://github.com/freemarker/freemarker/commit/1bc3291c98f8fe80fa211b880366f2bba90f7187


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

Branch: refs/heads/master
Commit: 288961187a8ad6614bc6971dac2a2cab59cf8530
Parents: 9595ddc
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Mon Jun 1 17:11:37 2015 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Mon Jun 1 17:11:37 2015 +0300

----------------------------------------------------------------------
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/28896118/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 0f8e075..7b3af40 100644
--- a/pom.xml
+++ b/pom.xml
@@ -155,7 +155,7 @@
         <jetty.version>8.1.17.v20150415</jetty.version>
         <airline.version>0.6</airline.version>
         <mockwebserver.version>20121111</mockwebserver.version>
-        <freemarker.version>2.3.19</freemarker.version>
+        <freemarker.version>2.3.22</freemarker.version>
         <commons-io.version>2.4</commons-io.version>
         <hazelcast.version>3.0</hazelcast.version>
         <jsonPath.version>0.9.1</jsonPath.version>


[5/6] incubator-brooklyn git commit: This closes #669

Posted by he...@apache.org.
This closes #669


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

Branch: refs/heads/master
Commit: 1dc48c8bb935b7db5917529d9294698d9a9b8970
Parents: df3c2d8 47c6f4e
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Jun 2 19:15:22 2015 +0200
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Tue Jun 2 19:15:22 2015 +0200

----------------------------------------------------------------------
 .../basic/AbstractSoftwareProcessDriver.java    | 38 ++++++++++----------
 1 file changed, 20 insertions(+), 18 deletions(-)
----------------------------------------------------------------------



[2/6] incubator-brooklyn git commit: Don't create install dir in copy-pre-install-resources unless there are resources to install.

Posted by he...@apache.org.
Don't create install dir in copy-pre-install-resources unless there are resources to install.

Lots of unit tests assume that no ssh connection will be established when testing localhot entities. The addition of copy-pre-install-resources breaks the tests if local ssh is not configured properly. Create install dir only if there are resources to copy (and therefore the test expects it will try to ssh).


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

Branch: refs/heads/master
Commit: 47c6f4e74f31a521e7cb0c4ff35f5f00ba489732
Parents: 2889611
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Mon Jun 1 17:50:43 2015 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Tue Jun 2 19:48:40 2015 +0300

----------------------------------------------------------------------
 .../basic/AbstractSoftwareProcessDriver.java    | 38 ++++++++++----------
 1 file changed, 20 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/47c6f4e7/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java b/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java
index a5a4cde..9fa6950 100644
--- a/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java
+++ b/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java
@@ -31,7 +31,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import brooklyn.config.ConfigKey;
-import brooklyn.entity.software.SshEffectorTasks;
 import brooklyn.location.Location;
 import brooklyn.util.ResourceUtils;
 import brooklyn.util.collections.MutableMap;
@@ -296,27 +295,30 @@ public abstract class AbstractSoftwareProcessDriver implements SoftwareProcessDr
         // Ensure environment variables are not looked up here, otherwise sub-classes might
         // lookup port numbers and fail with ugly error if port is not set; better to wait
         // until in Entity's code (e.g. customize) where such checks are done explicitly.
-        createDirectory(getInstallDir(), "create install directory");
 
-        // TODO see comment in copyResource, that should be queued as a task like the above
-        // (better reporting in activities console)
-
-        if (files != null && files.size() > 0) {
-            for (String source : files.keySet()) {
-                String target = files.get(source);
-                String destination = Os.isAbsolutish(target) ? target : Os.mergePathsUnix(getInstallDir(), target);
-                copyResource(source, destination, true);
+        boolean hasAnythingToCopy = ((files != null && files.size() > 0) || (templates != null && templates.size() > 0));
+        if (hasAnythingToCopy) {
+            createDirectory(getInstallDir(), "create install directory");
+    
+            // TODO see comment in copyResource, that should be queued as a task like the above
+            // (better reporting in activities console)
+    
+            if (files != null && files.size() > 0) {
+                for (String source : files.keySet()) {
+                    String target = files.get(source);
+                    String destination = Os.isAbsolutish(target) ? target : Os.mergePathsUnix(getInstallDir(), target);
+                    copyResource(source, destination, true);
+                }
             }
-        }
-
-        if (templates != null && templates.size() > 0) {
-            for (String source : templates.keySet()) {
-                String target = templates.get(source);
-                String destination = Os.isAbsolutish(target) ? target : Os.mergePathsUnix(getInstallDir(), target);
-                copyTemplate(source, destination, true, MutableMap.<String, Object>of());
+    
+            if (templates != null && templates.size() > 0) {
+                for (String source : templates.keySet()) {
+                    String target = templates.get(source);
+                    String destination = Os.isAbsolutish(target) ? target : Os.mergePathsUnix(getInstallDir(), target);
+                    copyTemplate(source, destination, true, MutableMap.<String, Object>of());
+                }
             }
         }
-
     }
 
     protected abstract void createDirectory(String directoryName, String summaryForLogging);


[6/6] incubator-brooklyn git commit: This closes #670

Posted by he...@apache.org.
This closes #670


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

Branch: refs/heads/master
Commit: 54af9935f1717a96ff0c2f0b2ff13ff03badffb7
Parents: 1dc48c8 524f702
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Jun 2 19:15:26 2015 +0200
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Tue Jun 2 19:15:26 2015 +0200

----------------------------------------------------------------------
 .../catalog/internal/BasicBrooklynCatalog.java  |  60 ++++++++++++++---
 .../brooklyn/osgi/tests/more/MoreLocation.java  |  25 +++++++
 .../brooklyn/osgi/tests/more/MorePolicy.java    |  27 ++++++++
 .../brooklyn/osgi/tests/more/MoreTemplate.java  |  30 +++++++++
 .../brooklyn/osgi/tests/more/MoreLocation.java  |  27 ++++++++
 .../brooklyn/osgi/tests/more/MorePolicy.java    |  30 +++++++++
 .../brooklyn/osgi/tests/more/MoreTemplate.java  |  32 +++++++++
 .../osgi/OsgiVersionMoreEntityTest.java         |   5 +-
 .../brooklyn-test-osgi-more-entities_0.1.0.jar  | Bin 12428 -> 14164 bytes
 .../brooklyn-test-osgi-more-entities_0.2.0.jar  | Bin 13078 -> 14799 bytes
 .../CatalogOsgiVersionMoreEntityTest.java       |  67 +++++++++++++++++++
 .../more-policies-osgi-catalog-scan.yaml        |  32 +++++++++
 12 files changed, 322 insertions(+), 13 deletions(-)
----------------------------------------------------------------------



[3/6] incubator-brooklyn git commit: Improve policy support for catalog items

Posted by he...@apache.org.
Improve policy support for catalog items

  * policies found through scanning the classpath will be added with the correct yaml markup
  * support for nested catalog item loading for policies, plus infinite recursion avoidance check
  * fix catalog item type detection for non-entities


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

Branch: refs/heads/master
Commit: 524f702359f1d3a7f776bcd457641b55d5446940
Parents: 47c6f4e
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Tue Jun 2 13:30:39 2015 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Tue Jun 2 19:50:05 2015 +0300

----------------------------------------------------------------------
 .../catalog/internal/BasicBrooklynCatalog.java  |  60 ++++++++++++++---
 .../brooklyn/osgi/tests/more/MoreLocation.java  |  25 +++++++
 .../brooklyn/osgi/tests/more/MorePolicy.java    |  27 ++++++++
 .../brooklyn/osgi/tests/more/MoreTemplate.java  |  30 +++++++++
 .../brooklyn/osgi/tests/more/MoreLocation.java  |  27 ++++++++
 .../brooklyn/osgi/tests/more/MorePolicy.java    |  30 +++++++++
 .../brooklyn/osgi/tests/more/MoreTemplate.java  |  32 +++++++++
 .../osgi/OsgiVersionMoreEntityTest.java         |   5 +-
 .../brooklyn-test-osgi-more-entities_0.1.0.jar  | Bin 12428 -> 14164 bytes
 .../brooklyn-test-osgi-more-entities_0.2.0.jar  | Bin 13078 -> 14799 bytes
 .../CatalogOsgiVersionMoreEntityTest.java       |  67 +++++++++++++++++++
 .../more-policies-osgi-catalog-scan.yaml        |  32 +++++++++
 12 files changed, 322 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/524f7023/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 b3cdda7..421794c 100644
--- a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
@@ -347,7 +347,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
                     spec = createEntitySpec(loadedItem.getSymbolicName(), plan, loader);
                     break;
                 case POLICY:
-                    spec = createPolicySpec(plan, loader);
+                    spec = createPolicySpec(loadedItem.getSymbolicName(), plan, loader);
                     break;
                 case LOCATION:
                     spec = createLocationSpec(plan, loader);
@@ -390,7 +390,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
         case ENTITY: 
             return createEntitySpec(optionalId, plan, loader);
         case LOCATION: return createLocationSpec(plan, loader);
-        case POLICY: return createPolicySpec(plan, loader);
+        case POLICY: return createPolicySpec(optionalId, plan, loader);
         }
         throw new IllegalStateException("Unknown CI Type "+ciType+" for "+plan);
     }
@@ -412,7 +412,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
             AssemblyTemplateInstantiator instantiator = at.getInstantiator().newInstance();
             if (instantiator instanceof AssemblyTemplateSpecInstantiator) {
                 return (SpecT) ((AssemblyTemplateSpecInstantiator)instantiator).createNestedSpec(at, camp, loader, 
-                    symbolicName==null ? MutableSet.<String>of() : MutableSet.of(symbolicName));
+                    getInitialEncounteredSymbol(symbolicName));
             }
             throw new IllegalStateException("Unable to instantiate YAML; incompatible instantiator "+instantiator+" for "+at);
         } catch (Exception e) {
@@ -420,7 +420,15 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
         }
     }
 
-    private <T, SpecT> SpecT createPolicySpec(DeploymentPlan plan, BrooklynClassLoadingContext loader) {
+    private MutableSet<String> getInitialEncounteredSymbol(String symbolicName) {
+        return symbolicName==null ? MutableSet.<String>of() : MutableSet.of(symbolicName);
+    }
+
+    private <T, SpecT> SpecT createPolicySpec(String symbolicName, DeploymentPlan plan, BrooklynClassLoadingContext loader) {
+        return createPolicySpec(plan, loader, getInitialEncounteredSymbol(symbolicName));
+    }
+
+    private <T, SpecT> SpecT createPolicySpec(DeploymentPlan plan, BrooklynClassLoadingContext loader, Set<String> encounteredCatalogTypes) {
         //Would ideally re-use io.brooklyn.camp.brooklyn.spi.creation.BrooklynEntityDecorationResolver.PolicySpecResolver
         //but it is CAMP specific and there is no easy way to get hold of it.
         Object policies = checkNotNull(plan.getCustomAttributes().get(POLICIES_KEY), "policy config");
@@ -430,12 +438,11 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
 
         Object policy = Iterables.getOnlyElement((Iterable<?>)policies);
 
-        return createPolicySpec(loader, policy);
+        return createPolicySpec(loader, policy, encounteredCatalogTypes);
     }
 
     @SuppressWarnings("unchecked")
-    private <T, SpecT> SpecT createPolicySpec(BrooklynClassLoadingContext loader, Object policy) {
-        // TODO this (and LocationSpec) lack the loop-prevention which createEntitySpec has (hence different signature)
+    private <T, SpecT> SpecT createPolicySpec(BrooklynClassLoadingContext loader, Object policy, Set<String> encounteredCatalogTypes) {
         Map<String, Object> itemMap;
         if (policy instanceof String) {
             itemMap = ImmutableMap.<String, Object>of("type", policy);
@@ -445,9 +452,28 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
             throw new IllegalStateException("Policy expected to be string or map. Unsupported object type " + policy.getClass().getName() + " (" + policy.toString() + ")");
         }
 
-        String type = (String) checkNotNull(Yamls.getMultinameAttribute(itemMap, "policy_type", "policyType", "type"), "policy type");
+        String versionedId = (String) checkNotNull(Yamls.getMultinameAttribute(itemMap, "policy_type", "policyType", "type"), "policy type");
+        PolicySpec<? extends Policy> spec;
+        CatalogItem<?, ?> policyItem = CatalogUtils.getCatalogItemOptionalVersion(mgmt, versionedId);
+        if (policyItem != null && !encounteredCatalogTypes.contains(policyItem.getSymbolicName())) {
+            if (policyItem.getCatalogItemType() != CatalogItemType.POLICY) {
+                throw new IllegalStateException("Non-policy catalog item in policy context: " + policyItem);
+            }
+            //TODO re-use createSpec
+            BrooklynClassLoadingContext itemLoader = CatalogUtils.newClassLoadingContext(mgmt, policyItem);
+            if (policyItem.getPlanYaml() != null) {
+                DeploymentPlan plan = makePlanFromYaml(policyItem.getPlanYaml());
+                encounteredCatalogTypes.add(policyItem.getSymbolicName());
+                return createPolicySpec(plan, itemLoader, encounteredCatalogTypes);
+            } else if (policyItem.getJavaType() != null) {
+                spec = PolicySpec.create((Class<Policy>)itemLoader.loadClass(policyItem.getJavaType()));
+            } else {
+                throw new IllegalStateException("Invalid policy item - neither yaml nor javaType: " + policyItem);
+            }
+        } else {
+            spec = PolicySpec.create(loader.loadClass(versionedId, Policy.class));
+        }
         Map<String, Object> brooklynConfig = (Map<String, Object>) itemMap.get("brooklyn.config");
-        PolicySpec<? extends Policy> spec = PolicySpec.create(loader.loadClass(type, Policy.class));
         if (brooklynConfig != null) {
             spec.configure(brooklynConfig);
         }
@@ -919,7 +945,8 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
             }
             if (type!=null && key!=null) {
                 for (CatalogItemDtoAbstract<?,?> candidate: itemsDefinedSoFar) {
-                    if (type.equals(candidate.getSymbolicName()) || type.equals(candidate.getId())) {
+                    if (candidateCiType == candidate.getCatalogItemType() &&
+                            (type.equals(candidate.getSymbolicName()) || type.equals(candidate.getId()))) {
                         if (version==null || version.equals(candidate.getVersion())) {
                             // matched - exit
                             catalogItemType = candidateCiType;
@@ -1203,7 +1230,18 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
                 // replace java type with plan yaml -- needed for libraries / catalog item to be picked up,
                 // but probably useful to transition away from javaType altogether
                 dto.setSymbolicName(dto.getJavaType());
-                dto.setPlanYaml("services: [{ type: "+dto.getJavaType()+" }]");
+                switch (dto.getCatalogItemType()) {
+                    case TEMPLATE:
+                    case ENTITY:
+                        dto.setPlanYaml("services: [{ type: "+dto.getJavaType()+" }]");
+                        break;
+                    case POLICY:
+                        dto.setPlanYaml(POLICIES_KEY + ": [{ type: "+dto.getJavaType()+" }]");
+                        break;
+                    case LOCATION:
+                        dto.setPlanYaml(LOCATIONS_KEY + ": [{ type: "+dto.getJavaType()+" }]");
+                        break;
+                }
                 dto.setJavaType(null);
 
                 return dto;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/524f7023/core/src/test/dependencies/osgi/more-entities-v1/src/main/java/brooklyn/osgi/tests/more/MoreLocation.java
----------------------------------------------------------------------
diff --git a/core/src/test/dependencies/osgi/more-entities-v1/src/main/java/brooklyn/osgi/tests/more/MoreLocation.java b/core/src/test/dependencies/osgi/more-entities-v1/src/main/java/brooklyn/osgi/tests/more/MoreLocation.java
new file mode 100644
index 0000000..75a9ff4
--- /dev/null
+++ b/core/src/test/dependencies/osgi/more-entities-v1/src/main/java/brooklyn/osgi/tests/more/MoreLocation.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package brooklyn.osgi.tests.more;
+
+
+import brooklyn.location.basic.AbstractLocation;
+
+public class MoreLocation extends AbstractLocation {
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/524f7023/core/src/test/dependencies/osgi/more-entities-v1/src/main/java/brooklyn/osgi/tests/more/MorePolicy.java
----------------------------------------------------------------------
diff --git a/core/src/test/dependencies/osgi/more-entities-v1/src/main/java/brooklyn/osgi/tests/more/MorePolicy.java b/core/src/test/dependencies/osgi/more-entities-v1/src/main/java/brooklyn/osgi/tests/more/MorePolicy.java
new file mode 100644
index 0000000..082c234
--- /dev/null
+++ b/core/src/test/dependencies/osgi/more-entities-v1/src/main/java/brooklyn/osgi/tests/more/MorePolicy.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package brooklyn.osgi.tests.more;
+
+
+import brooklyn.catalog.Catalog;
+import brooklyn.policy.basic.AbstractPolicy;
+
+public class MorePolicy extends AbstractPolicy {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/524f7023/core/src/test/dependencies/osgi/more-entities-v1/src/main/java/brooklyn/osgi/tests/more/MoreTemplate.java
----------------------------------------------------------------------
diff --git a/core/src/test/dependencies/osgi/more-entities-v1/src/main/java/brooklyn/osgi/tests/more/MoreTemplate.java b/core/src/test/dependencies/osgi/more-entities-v1/src/main/java/brooklyn/osgi/tests/more/MoreTemplate.java
new file mode 100644
index 0000000..283e5da
--- /dev/null
+++ b/core/src/test/dependencies/osgi/more-entities-v1/src/main/java/brooklyn/osgi/tests/more/MoreTemplate.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package brooklyn.osgi.tests.more;
+
+
+import brooklyn.entity.Application;
+import brooklyn.entity.Effector;
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.AbstractApplication;
+import brooklyn.entity.effector.Effectors;
+import brooklyn.entity.proxying.ImplementedBy;
+
+public class MoreTemplate extends AbstractApplication {
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/524f7023/core/src/test/dependencies/osgi/more-entities-v2/src/main/java/brooklyn/osgi/tests/more/MoreLocation.java
----------------------------------------------------------------------
diff --git a/core/src/test/dependencies/osgi/more-entities-v2/src/main/java/brooklyn/osgi/tests/more/MoreLocation.java b/core/src/test/dependencies/osgi/more-entities-v2/src/main/java/brooklyn/osgi/tests/more/MoreLocation.java
new file mode 100644
index 0000000..9f2b9b5
--- /dev/null
+++ b/core/src/test/dependencies/osgi/more-entities-v2/src/main/java/brooklyn/osgi/tests/more/MoreLocation.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package brooklyn.osgi.tests.more;
+
+
+import brooklyn.catalog.Catalog;
+import brooklyn.location.basic.AbstractLocation;
+
+@Catalog(name="More Location", description="Cataliog item OSGi test location")
+public class MoreLocation extends AbstractLocation {
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/524f7023/core/src/test/dependencies/osgi/more-entities-v2/src/main/java/brooklyn/osgi/tests/more/MorePolicy.java
----------------------------------------------------------------------
diff --git a/core/src/test/dependencies/osgi/more-entities-v2/src/main/java/brooklyn/osgi/tests/more/MorePolicy.java b/core/src/test/dependencies/osgi/more-entities-v2/src/main/java/brooklyn/osgi/tests/more/MorePolicy.java
new file mode 100644
index 0000000..06d7fb3
--- /dev/null
+++ b/core/src/test/dependencies/osgi/more-entities-v2/src/main/java/brooklyn/osgi/tests/more/MorePolicy.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package brooklyn.osgi.tests.more;
+
+
+import brooklyn.catalog.Catalog;
+import brooklyn.policy.basic.AbstractPolicy;
+
+@Catalog(name="More Policy", description="Cataliog item OSGi test policy")
+public class MorePolicy extends AbstractPolicy {
+    public String sayHI(String name) {
+        return "HI "+name.toUpperCase()+" FROM V2";
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/524f7023/core/src/test/dependencies/osgi/more-entities-v2/src/main/java/brooklyn/osgi/tests/more/MoreTemplate.java
----------------------------------------------------------------------
diff --git a/core/src/test/dependencies/osgi/more-entities-v2/src/main/java/brooklyn/osgi/tests/more/MoreTemplate.java b/core/src/test/dependencies/osgi/more-entities-v2/src/main/java/brooklyn/osgi/tests/more/MoreTemplate.java
new file mode 100644
index 0000000..3fa86f9
--- /dev/null
+++ b/core/src/test/dependencies/osgi/more-entities-v2/src/main/java/brooklyn/osgi/tests/more/MoreTemplate.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package brooklyn.osgi.tests.more;
+
+
+import brooklyn.catalog.Catalog;
+import brooklyn.entity.Application;
+import brooklyn.entity.Effector;
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.AbstractApplication;
+import brooklyn.entity.effector.Effectors;
+import brooklyn.entity.proxying.ImplementedBy;
+
+@Catalog(name="More Template", description="Cataliog item OSGi test template")
+public class MoreTemplate extends AbstractApplication {
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/524f7023/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java b/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java
index 7f4009d..78cebd2 100644
--- a/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java
+++ b/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java
@@ -32,6 +32,7 @@ import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import brooklyn.basic.BrooklynObject;
 import brooklyn.catalog.CatalogItem;
 import brooklyn.catalog.internal.CatalogEntityItemDto;
 import brooklyn.catalog.internal.CatalogItemBuilder;
@@ -171,14 +172,14 @@ public class OsgiVersionMoreEntityTest {
     public static void assertV1MethodCall(Entity me) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
         Assert.assertEquals(doMethodCallBrooklyn(me), EXPECTED_SAY_HI_BROOKLYN_RESPONSE_FROM_V1);
     }
-    public static void assertV2MethodCall(Entity me) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+    public static void assertV2MethodCall(BrooklynObject me) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
         Assert.assertEquals(doMethodCallBrooklyn(me), EXPECTED_SAY_HI_BROOKLYN_RESPONSE_FROM_V2);
     }
     public static void assertV2EvilTwinMethodCall(Entity me) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
         Assert.assertEquals(doMethodCallBrooklyn(me), EXPECTED_SAY_HI_BROOKLYN_RESPONSE_FROM_V2_EVIL_TWIN);
     }
 
-    public static Object doMethodCallBrooklyn(Entity me) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+    public static Object doMethodCallBrooklyn(BrooklynObject me) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
         return me.getClass().getMethod("sayHI", String.class).invoke(me, "Brooklyn");
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/524f7023/core/src/test/resources/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.1.0.jar
----------------------------------------------------------------------
diff --git a/core/src/test/resources/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.1.0.jar b/core/src/test/resources/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.1.0.jar
index 9958cf1..8d52a7f 100644
Binary files a/core/src/test/resources/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.1.0.jar and b/core/src/test/resources/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.1.0.jar differ

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/524f7023/core/src/test/resources/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.2.0.jar
----------------------------------------------------------------------
diff --git a/core/src/test/resources/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.2.0.jar b/core/src/test/resources/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.2.0.jar
index 91cc1e8..8d7ee62 100644
Binary files a/core/src/test/resources/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.2.0.jar and b/core/src/test/resources/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.2.0.jar differ

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/524f7023/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
index 5c52c39..412de82 100644
--- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
+++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
@@ -18,6 +18,7 @@
  */
 package io.brooklyn.camp.brooklyn.catalog;
 
+import static org.testng.Assert.assertTrue;
 import io.brooklyn.camp.brooklyn.AbstractYamlTest;
 import io.brooklyn.camp.brooklyn.spi.creation.BrooklynEntityMatcher;
 
@@ -26,12 +27,17 @@ import org.slf4j.LoggerFactory;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import brooklyn.basic.BrooklynTypes;
+import brooklyn.catalog.BrooklynCatalog;
 import brooklyn.catalog.CatalogItem;
 import brooklyn.catalog.CatalogItem.CatalogItemType;
 import brooklyn.catalog.internal.CatalogUtils;
 import brooklyn.entity.Entity;
+import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.location.LocationSpec;
 import brooklyn.management.osgi.OsgiVersionMoreEntityTest;
 import brooklyn.policy.Policy;
+import brooklyn.policy.PolicySpec;
 import brooklyn.test.TestResourceUnavailableException;
 import brooklyn.util.ResourceUtils;
 import brooklyn.util.text.Strings;
@@ -190,5 +196,66 @@ public class CatalogOsgiVersionMoreEntityTest extends AbstractYamlTest {
         OsgiVersionMoreEntityTest.assertV2MethodCall(moreEntity);
     }
 
+    @Test
+    public void testMorePolicyV2AutoscanWithClasspath() throws Exception {
+        TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), "/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.2.0.jar");
+        TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), "/brooklyn/osgi/brooklyn-test-osgi-entities.jar");
+        
+        addCatalogItems(getLocalResource("more-policies-osgi-catalog-scan.yaml"));
+        
+        log.info("autoscan for osgi found catalog items: "+Strings.join(mgmt().getCatalog().getCatalogItems(), ", "));
+
+        CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), "more-policy");
+        Assert.assertNotNull(item);
+        Assert.assertEquals(item.getVersion(), "2.0.test");
+        Assert.assertEquals(item.getCatalogItemType(), CatalogItemType.POLICY);
+        
+        // this refers to the java item, where the libraries are defined
+        item = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), "brooklyn.osgi.tests.more.MorePolicy");
+        Assert.assertEquals(item.getVersion(), "2.0.test_java");
+        Assert.assertEquals(item.getLibraries().size(), 2);
+        
+        Entity app = createAndStartApplication(
+                "services: ",
+                "- type: brooklyn.entity.basic.BasicEntity",
+                "  brooklyn.policies:",
+                "  - type: more-policy:2.0.test");
+        Entity basicEntity = Iterables.getOnlyElement(app.getChildren());
+        Policy morePolicy = Iterables.getOnlyElement(basicEntity.getPolicies());
+        
+        Assert.assertEquals(morePolicy.getCatalogItemId(), "more-policy:2.0.test");
+        OsgiVersionMoreEntityTest.assertV2MethodCall(morePolicy);
+    }
+
+    @Test
+    public void testAutoscanWithClasspathCanCreateSpecs() throws Exception {
+        TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), "/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.2.0.jar");
+        TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), "/brooklyn/osgi/brooklyn-test-osgi-entities.jar");
+
+        addCatalogItems(getLocalResource("more-entities-osgi-catalog-scan.yaml"));
+
+        log.info("autoscan for osgi found catalog items: "+Strings.join(mgmt().getCatalog().getCatalogItems(), ", "));
+
+        BrooklynCatalog catalog = mgmt().getCatalog();
+        Iterable<CatalogItem<Object, Object>> items = catalog.getCatalogItems();
+        for (CatalogItem<Object, Object> item: items) {
+            Object spec = catalog.createSpec(item);
+            switch (item.getCatalogItemType()) {
+                case TEMPLATE:
+                case ENTITY:
+                    assertTrue(spec instanceof EntitySpec, "Not an EntitySpec: " + spec);
+                    BrooklynTypes.getDefinedEntityType(((EntitySpec<?>)spec).getType());
+                    break;
+                case POLICY:
+                    assertTrue(spec instanceof PolicySpec, "Not a PolicySpec: " + spec);
+                    BrooklynTypes.getDefinedBrooklynType(((PolicySpec<?>)spec).getType());
+                    break;
+                case LOCATION:
+                    assertTrue(spec instanceof LocationSpec, "Not a LocationSpec: " + spec);
+                    BrooklynTypes.getDefinedBrooklynType(((LocationSpec<?>)spec).getType());
+                    break;
+            }
+        }
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/524f7023/usage/camp/src/test/resources/io/brooklyn/camp/brooklyn/catalog/more-policies-osgi-catalog-scan.yaml
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/resources/io/brooklyn/camp/brooklyn/catalog/more-policies-osgi-catalog-scan.yaml b/usage/camp/src/test/resources/io/brooklyn/camp/brooklyn/catalog/more-policies-osgi-catalog-scan.yaml
new file mode 100644
index 0000000..47f344d
--- /dev/null
+++ b/usage/camp/src/test/resources/io/brooklyn/camp/brooklyn/catalog/more-policies-osgi-catalog-scan.yaml
@@ -0,0 +1,32 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# test case which demonstrates osgi bundles can be scanned, *if* expand classpath is true
+
+brooklyn.catalog:
+  items:
+  - scanJavaAnnotations: true
+    version: 2.0.test_java
+    libraries:
+    - classpath:/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.2.0.jar
+    - classpath:/brooklyn/osgi/brooklyn-test-osgi-entities.jar
+  - item:
+      id: more-policy
+      type: brooklyn.osgi.tests.more.MorePolicy
+      version: 2.0.test


[4/6] incubator-brooklyn git commit: This closes #668

Posted by he...@apache.org.
This closes #668


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

Branch: refs/heads/master
Commit: df3c2d8874978584983f8a17e51b970667182e41
Parents: 9595ddc 2889611
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Jun 2 19:15:19 2015 +0200
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Tue Jun 2 19:15:19 2015 +0200

----------------------------------------------------------------------
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------