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:35 UTC
[16/39] brooklyn-server git commit: Use
newClassLoadingContextForCatalogItems where possible.
Use newClassLoadingContextForCatalogItems where possible.
https://github.com/apache/brooklyn-server/pull/338/files#r94623208
Use in
org.apache.brooklyn.util.core.ClassLoaderUtils#load
org.apache.brooklyn.core.mgmt.persist.BrooklynMementoPersisterToObjectStore#getCustomClassLoaderForBrooklynObject
org.apache.brooklyn.core.catalog.internal.JavaCatalogToSpecTransformer#createCatalogSpec
Not doing XmlMementoSerializer as it is calling
newClassLoadingContext(ManagementContext mgmt, RegisteredType item)
rather than
newClassLoadingContext(ManagementContext mgmt, CatalogItem<?, ?> item),
and the hierarchy is not available on RegisteredType.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/3257c846
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/3257c846
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/3257c846
Branch: refs/heads/master
Commit: 3257c846dd21d1b1dada9c480ef7f6e68f3bd03c
Parents: 584efcc
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Wed Mar 8 12:17:57 2017 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Thu Apr 20 11:20:36 2017 +0100
----------------------------------------------------------------------
.../internal/JavaCatalogToSpecTransformer.java | 2 +-
.../BrooklynMementoPersisterToObjectStore.java | 10 ++++--
.../brooklyn/util/core/ClassLoaderUtils.java | 36 +++++++++++++-------
3 files changed, 32 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3257c846/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 4e15d24..a990c2f 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
@@ -81,7 +81,7 @@ 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.newClassLoadingContext(mgmt, item).loadClass(javaType);
+ type = CatalogUtils.newClassLoadingContextForCatalogItems(mgmt, item.getCatalogItemHierarchy()).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/3257c846/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 1be1c2c..d9cafdc 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
@@ -173,7 +173,8 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
return result;
}
- @Nullable protected ClassLoader getCustomClassLoaderForBrooklynObject(LookupContext lookupContext, BrooklynObjectType type, String objectId) {
+ @Nullable protected ClassLoader getCustomClassLoaderForBrooklynObject(LookupContext lookupContext,
+ BrooklynObjectType type, String objectId) {
BrooklynObject item = lookupContext.peek(type, objectId);
String catalogItemId = (item == null) ? null : item.getCatalogItemId();
// TODO enrichers etc aren't yet known -- would need to backtrack to the entity to get them from bundles
@@ -185,10 +186,13 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
RegisteredType catalogItem = lookupContext.lookupManagementContext().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");
+ 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.newClassLoadingContext(lookupContext.lookupManagementContext(), catalogItem));
+ return ClassLoaderFromBrooklynClassLoadingContext.of(
+ CatalogUtils.newClassLoadingContextForCatalogItems(lookupContext.lookupManagementContext(),
+ item.getCatalogItemHierarchy()));
}
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3257c846/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 afb45ba..d262969 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
@@ -63,7 +63,8 @@ public class ClassLoaderUtils {
*/
static final String WHITE_LIST_KEY = "org.apache.brooklyn.classloader.fallback.bundles";
static final String CLASS_NAME_DELIMITER = ":";
- private static final String WHITE_LIST_DEFAULT = "org\\.apache\\.brooklyn\\..*:" + OsgiUtils.toOsgiVersion(BrooklynVersion.get());
+ private static final String WHITE_LIST_DEFAULT =
+ "org\\.apache\\.brooklyn\\..*:" + OsgiUtils.toOsgiVersion(BrooklynVersion.get());
// Class.forName gets the class loader from the calling class.
// We don't have access to the same reflection API so need to pass it explicitly.
@@ -122,7 +123,8 @@ public class ClassLoaderUtils {
* <ul>
* <li>{@code <classname>}, such as {@code com.google.common.net.HostAndPort}
* <li>{@code <bunde-symbolicName>:<classname>}, such as {@code com.google.guava:com.google.common.net.HostAndPort}
- * <li>{@code <bunde-symbolicName>:<bundle-version>:<classname>}, such as {@code com.google.guava:16.0.1:com.google.common.net.HostAndPort}
+ * <li>{@code <bunde-symbolicName>:<bundle-version>:<classname>}, such as
+ * {@code com.google.guava:16.0.1:com.google.common.net.HostAndPort}
* </ul>
*
* The classloading order is as follows:
@@ -153,7 +155,8 @@ public class ClassLoaderUtils {
if (cls.isPresent()) {
return cls.get();
} else {
- throw new ClassNotFoundException("Class " + name + " not found on the application class path, nor in the bundle white list.", getReturnException(cls));
+ throw new ClassNotFoundException("Class " + name +
+ " not found on the application class path, nor in the bundle white list.", getReturnException(cls));
}
}
@@ -161,7 +164,8 @@ public class ClassLoaderUtils {
try {
return tryLoadFromBundle(ClassLoaderDispatcher.INSTANCE, symbolicName, version, className).get();
} catch (IllegalStateException e) {
- throw new ClassNotFoundException("Class " + className + " could not be loaded from bundle " + toBundleString(symbolicName, version), e);
+ throw new ClassNotFoundException("Class " + className + " could not be loaded from bundle "
+ + toBundleString(symbolicName, version), e);
}
}
@@ -176,7 +180,8 @@ public class ClassLoaderUtils {
}
/**
- * Finds all the resources with the given name. Aborts going through subsequent fallbacks when it finds at least one resource.
+ * Finds all the resources with the given name.
+ * Aborts going through subsequent fallbacks when it finds at least one resource.
* @see {@link #loadClass(String)} for loading order
*
* @return empty {@link Iterable} when no resources find
@@ -198,7 +203,8 @@ public class ClassLoaderUtils {
if (looksLikeBundledClassName(name)) {
String[] arr = name.split(CLASS_NAME_DELIMITER);
if (arr.length > 3) {
- throw new IllegalStateException("'" + name + "' doesn't look like a class name and contains too many colons to be parsed as bundle:version:class triple.");
+ throw new IllegalStateException("'" + name +
+ "' doesn't look like a class name and contains too many colons to be parsed as bundle:version:class triple.");
} else if (arr.length == 3) {
symbolicName = arr[0];
version = arr[1];
@@ -208,7 +214,8 @@ public class ClassLoaderUtils {
version = null;
className = arr[1];
} else {
- throw new IllegalStateException("'" + name + "' contains a bundle:version:class delimiter, but only one of those specified");
+ throw new IllegalStateException("'" + name +
+ "' contains a bundle:version:class delimiter, but only one of those specified");
}
} else {
symbolicName = null;
@@ -247,13 +254,15 @@ public class ClassLoaderUtils {
if (catalogItemId != null) {
CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt, catalogItemId);
if (item != null) {
- BrooklynClassLoadingContext loader = CatalogUtils.newClassLoadingContext(mgmt, item);
+ BrooklynClassLoadingContext loader =
+ CatalogUtils.newClassLoadingContextForCatalogItems(mgmt, item.getCatalogItemHierarchy());
cls = dispatcher.tryLoadFrom(loader, className);
if (cls.isPresent()) {
return cls;
}
} else {
- log.warn("Entity " + entity + " refers to non-existent catalog item " + catalogItemId + ". Trying to load class " + name);
+ log.warn("Entity " + entity + " refers to non-existent catalog item " + catalogItemId +
+ ". Trying to load class " + name);
}
}
}
@@ -278,7 +287,8 @@ public class ClassLoaderUtils {
return Maybe.absentNull();
}
- protected <T> Maybe<T> tryLoadFromBundle(LoaderDispatcher<T> dispatcher, String symbolicName, String version, String name) {
+ protected <T> Maybe<T> tryLoadFromBundle(LoaderDispatcher<T> dispatcher, String symbolicName, String version,
+ String name) {
Framework framework = getFramework();
if (framework != null) {
Maybe<Bundle> bundle = Osgis.bundleFinder(framework)
@@ -286,7 +296,8 @@ public class ClassLoaderUtils {
.version(OsgiUtils.toOsgiVersion(version))
.find();
if (bundle.isAbsent()) {
- throw new IllegalStateException("Bundle " + toBundleString(symbolicName, version) + " not found to load " + name);
+ throw new IllegalStateException("Bundle " + toBundleString(symbolicName, version)
+ + " not found to load " + name);
}
return dispatcher.tryLoadFrom(bundle.get(), name);
} else {
@@ -364,7 +375,8 @@ public class ClassLoaderUtils {
String symbolicName = arr[0];
String version = null;
if (arr.length > 2) {
- throw new IllegalStateException("Class loading fallback bundle white list '" + whiteList + "' not in the expected format <symbolic name regex>[:<version regex>].");
+ throw new IllegalStateException("Class loading fallback bundle white list '" + whiteList +
+ "' not in the expected format <symbolic name regex>[:<version regex>].");
} else if (arr.length == 2) {
version = arr[1];
}