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 2017/04/21 22:55:50 UTC

[31/39] brooklyn-server git commit: Return a generic context from newClassLoadingContextForCatalogItems

Return a generic context from newClassLoadingContextForCatalogItems

https://github.com/apache/brooklyn-server/pull/338#discussion_r94751965


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

Branch: refs/heads/master
Commit: b61f972e9f4197c64ebe37a69f1631db9febb220
Parents: 3257c84
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Wed Mar 8 15:41:56 2017 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Thu Apr 20 11:20:36 2017 +0100

----------------------------------------------------------------------
 .../core/catalog/internal/CatalogUtils.java     | 22 ++++++++++----------
 .../internal/JavaCatalogToSpecTransformer.java  |  6 +++++-
 .../internal/AbstractManagementContext.java     |  4 +++-
 .../BrooklynMementoPersisterToObjectStore.java  | 13 ++++++++----
 .../core/mgmt/rebind/RebindIteration.java       |  5 ++++-
 .../brooklyn/util/core/ClassLoaderUtils.java    |  6 ++++--
 6 files changed, 36 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b61f972e/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
index 15aafd7..4bb11fd 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
@@ -141,6 +141,17 @@ public class CatalogUtils {
         return result;
     }
 
+    public static BrooklynClassLoadingContext newClassLoadingContextForCatalogItems(
+        ManagementContext managementContext, List<String> catalogItemIds) {
+
+        BrooklynClassLoadingContextSequential seqLoader =
+            new BrooklynClassLoadingContextSequential(managementContext);
+        for (String catalogItemId : catalogItemIds) {
+            addCatalogItemContext(managementContext, seqLoader, catalogItemId);
+        }
+        return seqLoader;
+    }
+
     /**
      * Registers all bundles with the management context's OSGi framework.
      */
@@ -325,17 +336,6 @@ public class CatalogUtils {
         mgmt.getCatalog().persist(item);
     }
 
-    public static BrooklynClassLoadingContextSequential newClassLoadingContextForCatalogItems(
-        ManagementContext managementContext, List<String> catalogItemIds) {
-
-        BrooklynClassLoadingContextSequential seqLoader =
-            new BrooklynClassLoadingContextSequential(managementContext);
-        for (String catalogItemId : catalogItemIds) {
-            addCatalogItemContext(managementContext, seqLoader, catalogItemId);
-        }
-        return seqLoader;
-    }
-
     private static void addCatalogItemContext(ManagementContext managementContext, BrooklynClassLoadingContextSequential loader, String catalogItemId) {
         RegisteredType item = managementContext.getTypeRegistry().get(catalogItemId);
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b61f972e/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
index a990c2f..bf698e8 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
@@ -26,9 +26,11 @@ import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.EntitySpec;
 import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
 import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.mgmt.classloading.BrooklynClassLoadingContext;
 import org.apache.brooklyn.api.policy.Policy;
 import org.apache.brooklyn.api.policy.PolicySpec;
 import org.apache.brooklyn.api.typereg.RegisteredType;
+import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContextSequential;
 import org.apache.brooklyn.core.objs.BasicSpecParameter;
 import org.apache.brooklyn.core.plan.PlanNotRecognizedException;
 import org.apache.brooklyn.core.plan.PlanToSpecTransformer;
@@ -81,7 +83,9 @@ public class JavaCatalogToSpecTransformer implements PlanToSpecTransformer {
                 // java types were deprecated before we added osgi support so this isn't necessary,
                 // but it doesn't hurt (and if we re-instate a class+bundle approach for RegisteredType 
                 // we will want to do this)
-                type = CatalogUtils.newClassLoadingContextForCatalogItems(mgmt, item.getCatalogItemHierarchy()).loadClass(javaType);
+                final BrooklynClassLoadingContextSequential ctx = new BrooklynClassLoadingContextSequential(mgmt);
+                ctx.add(CatalogUtils.newClassLoadingContextForCatalogItems(mgmt, item.getCatalogItemHierarchy()));
+                type = ctx.loadClass(javaType);
             } catch (Exception e) {
                 Exceptions.propagateIfFatal(e);
                 throw new IllegalStateException("Unable to load old-style java catalog item type " + javaType + " for item " + item, e);

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b61f972e/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
index 1771028..16bb3de 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
@@ -132,8 +132,10 @@ public abstract class AbstractManagementContext implements ManagementContextInte
                     EntityInternal internal = (EntityInternal)input;
                     final List<String> catalogItemHierarchy = internal.getCatalogItemHierarchy();
                     if (catalogItemHierarchy.size() > 0) {
+                        final ManagementContext managementContext = internal.getManagementContext();
                         BrooklynClassLoadingContextSequential seqLoader =
-                            newClassLoadingContextForCatalogItems(internal.getManagementContext(), catalogItemHierarchy);
+                            new BrooklynClassLoadingContextSequential(managementContext);
+                        seqLoader.add(newClassLoadingContextForCatalogItems(managementContext, catalogItemHierarchy));
                         JavaBrooklynClassLoadingContext entityLoader =
                             JavaBrooklynClassLoadingContext.create(input.getClass().getClassLoader());
                         seqLoader.add(entityLoader);

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b61f972e/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterToObjectStore.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterToObjectStore.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterToObjectStore.java
index d9cafdc..a716151 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterToObjectStore.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterToObjectStore.java
@@ -38,6 +38,8 @@ import javax.annotation.Nullable;
 import javax.xml.xpath.XPathConstants;
 
 import com.google.common.collect.ImmutableList;
+
+import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.api.mgmt.rebind.PersistenceExceptionHandler;
 import org.apache.brooklyn.api.mgmt.rebind.RebindExceptionHandler;
 import org.apache.brooklyn.api.mgmt.rebind.mementos.BrooklynMemento;
@@ -53,6 +55,7 @@ import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.config.StringConfigMap;
 import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
 import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContextSequential;
 import org.apache.brooklyn.core.mgmt.classloading.ClassLoaderFromBrooklynClassLoadingContext;
 import org.apache.brooklyn.core.mgmt.persist.PersistenceObjectStore.StoreObjectAccessor;
 import org.apache.brooklyn.core.mgmt.persist.PersistenceObjectStore.StoreObjectAccessorWithLock;
@@ -183,16 +186,18 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
         }
         // See RebindIteration.BrooklynObjectInstantiator.load(), for handling where catalog item is missing;
         // similar logic here.
-        RegisteredType catalogItem = lookupContext.lookupManagementContext().getTypeRegistry().get(catalogItemId);
+        final ManagementContext managementContext = lookupContext.lookupManagementContext();
+        RegisteredType catalogItem = managementContext.getTypeRegistry().get(catalogItemId);
         if (catalogItem == null) {
             // TODO do we need to only log once, rather than risk log.warn too often? I think this only happens on rebind, so ok.
             LOG.warn("Unable to load catalog item "+catalogItemId
                 +" for custom class loader of " + type + " " + objectId + "; will use default class loader");
             return null;
         } else {
-            return ClassLoaderFromBrooklynClassLoadingContext.of(
-                CatalogUtils.newClassLoadingContextForCatalogItems(lookupContext.lookupManagementContext(),
-                    item.getCatalogItemHierarchy()));
+            final BrooklynClassLoadingContextSequential ctx = new BrooklynClassLoadingContextSequential(managementContext);
+            ctx.add(
+                CatalogUtils.newClassLoadingContextForCatalogItems(managementContext, item.getCatalogItemHierarchy()));
+            return ClassLoaderFromBrooklynClassLoadingContext.of(ctx);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b61f972e/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java
index 1f23330..80c5eb2 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java
@@ -19,6 +19,7 @@
 package org.apache.brooklyn.core.mgmt.rebind;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.brooklyn.core.catalog.internal.CatalogUtils.newClassLoadingContextForCatalogItems;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -74,6 +75,7 @@ import org.apache.brooklyn.core.entity.EntityInternal;
 import org.apache.brooklyn.core.feed.AbstractFeed;
 import org.apache.brooklyn.core.location.AbstractLocation;
 import org.apache.brooklyn.core.location.internal.LocationInternal;
+import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContextSequential;
 import org.apache.brooklyn.core.mgmt.classloading.JavaBrooklynClassLoadingContext;
 import org.apache.brooklyn.core.mgmt.internal.BrooklynObjectManagementMode;
 import org.apache.brooklyn.core.mgmt.internal.BrooklynObjectManagerInternal;
@@ -957,7 +959,8 @@ public abstract class RebindIteration {
                         +" for "+contextSuchAsId + " (" + bType.getSimpleName()+"); attempting load nevertheless");
                 }
                 try {
-                    BrooklynClassLoadingContext loader = CatalogUtils.newClassLoadingContextForCatalogItems(managementContext, idsFromReboundCatalog);
+                    BrooklynClassLoadingContextSequential loader = new BrooklynClassLoadingContextSequential(managementContext);
+                    loader.add(newClassLoadingContextForCatalogItems(managementContext, idsFromReboundCatalog));
                     return new LoadedClass<T>(loader.loadClass(jType, bType), idsFromReboundCatalog);
                 } catch (Exception e) {
                     Exceptions.propagateIfFatal(e);

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b61f972e/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java b/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java
index d262969..88eb699 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java
@@ -16,6 +16,7 @@
 package org.apache.brooklyn.util.core;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.brooklyn.core.catalog.internal.CatalogUtils.newClassLoadingContextForCatalogItems;
 
 import java.net.URL;
 import java.util.List;
@@ -30,6 +31,7 @@ import org.apache.brooklyn.api.mgmt.classloading.BrooklynClassLoadingContext;
 import org.apache.brooklyn.core.BrooklynVersion;
 import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
 import org.apache.brooklyn.core.entity.EntityInternal;
+import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContextSequential;
 import org.apache.brooklyn.core.mgmt.ha.OsgiManager;
 import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
 import org.apache.brooklyn.util.core.LoaderDispatcher.ClassLoaderDispatcher;
@@ -254,8 +256,8 @@ public class ClassLoaderUtils {
             if (catalogItemId != null) {
                 CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt, catalogItemId);
                 if (item != null) {
-                    BrooklynClassLoadingContext loader =
-                        CatalogUtils.newClassLoadingContextForCatalogItems(mgmt, item.getCatalogItemHierarchy());
+                    BrooklynClassLoadingContextSequential loader = new BrooklynClassLoadingContextSequential(mgmt);
+                    loader.add(newClassLoadingContextForCatalogItems(mgmt, item.getCatalogItemHierarchy()));
                     cls = dispatcher.tryLoadFrom(loader, className);
                     if (cls.isPresent()) {
                         return cls;