Do resource lookup from nested catalog ids. Fixes testDeepCatalogItemCanLoadResources.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/47c5580e Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/47c5580e Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/47c5580e Branch: refs/heads/master Commit: 47c5580e9ea9b5cfb6a42c84428c641dbe88f244 Parents: 39dc1cc Author: Geoff Macartney <[email protected]> Authored: Wed Sep 21 16:36:49 2016 +0100 Committer: Geoff Macartney <[email protected]> Committed: Thu Apr 20 11:18:42 2017 +0100 ---------------------------------------------------------------------- .../internal/AbstractManagementContext.java | 37 +++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/47c5580e/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 89d5b3c..42c9c14 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 @@ -131,20 +131,18 @@ public abstract class AbstractManagementContext implements ManagementContextInte public BrooklynClassLoadingContext apply(@Nullable Object input) { if (input instanceof EntityInternal) { EntityInternal internal = (EntityInternal)input; - if (internal.getCatalogItemId() != null) { - RegisteredType item = internal.getManagementContext().getTypeRegistry().get(internal.getCatalogItemId()); - - if (item != null) { - BrooklynClassLoadingContext itemLoader = CatalogUtils.newClassLoadingContext(internal.getManagementContext(), item); - // Falls back to the entity's class loader - JavaBrooklynClassLoadingContext entityLoader = JavaBrooklynClassLoadingContext.create(input.getClass().getClassLoader()); - BrooklynClassLoadingContext seqLoader = new BrooklynClassLoadingContextSequential(internal.getManagementContext(), itemLoader, entityLoader); - return seqLoader; - } else { - log.error("Can't find catalog item " + internal.getCatalogItemId() + - " used for instantiating entity " + internal + - ". Falling back to application classpath."); + final List<String> catalogItemSuperIds = internal.getCatalogItemSuperIds(); + if (catalogItemSuperIds.size() > 0) { + BrooklynClassLoadingContextSequential seqLoader = new BrooklynClassLoadingContextSequential(internal.getManagementContext()); + for (String catalogItemId : catalogItemSuperIds) { + addCatalogItemContext(internal, seqLoader, catalogItemId); } + // TODO what if not all items were found? need to consider what the right behaviour is. + // TODO for now take the course of using whatever items we *did* find + if (seqLoader.getPrimaries().size() != catalogItemSuperIds.size()) { + log.error("Couldn't find all catalog items used for instantiating entity " + internal); + } + return seqLoader; } return apply(internal.getManagementSupport()); } @@ -158,6 +156,19 @@ public abstract class AbstractManagementContext implements ManagementContextInte }); } + private static void addCatalogItemContext(EntityInternal entity, BrooklynClassLoadingContextSequential loader, String catalogItemId) { + RegisteredType item = entity.getManagementContext().getTypeRegistry().get(catalogItemId); + + if (item != null) { + BrooklynClassLoadingContext itemLoader = CatalogUtils.newClassLoadingContext(entity.getManagementContext(), item); + loader.add(itemLoader); + } else { + log.error("Can't find catalog item " + catalogItemId + + " used for instantiating entity " + entity + + ". Falling back to application classpath."); + } + } + private final AtomicLong totalEffectorInvocationCount = new AtomicLong(); protected DeferredBrooklynProperties configMap;
