You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sv...@apache.org on 2016/11/29 08:21:54 UTC
[5/6] brooklyn-server git commit: BROOKLYN-379: Fix osgi resolveClass
to strip bundle prefix
BROOKLYN-379: Fix osgi resolveClass to strip bundle prefix
Without this, RebindOsgiTest.testUsesCatalogBundleVersion fails
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/6e68d74e
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/6e68d74e
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/6e68d74e
Branch: refs/heads/master
Commit: 6e68d74e043e38fed811bba03a5218b32469dc66
Parents: a72d1f2
Author: Aled Sage <al...@gmail.com>
Authored: Mon Nov 7 18:03:30 2016 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Nov 25 23:28:19 2016 +0000
----------------------------------------------------------------------
.../org/apache/brooklyn/core/mgmt/ha/OsgiManager.java | 13 +++++++++----
.../brooklyn/core/mgmt/persist/OsgiClassPrefixer.java | 8 ++++++++
2 files changed, 17 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6e68d74e/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
index 56d98a0..d58dbad 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
@@ -34,6 +34,7 @@ import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.BrooklynVersion;
+import org.apache.brooklyn.core.mgmt.persist.OsgiClassPrefixer;
import org.apache.brooklyn.core.server.BrooklynServerConfig;
import org.apache.brooklyn.core.server.BrooklynServerPaths;
import org.apache.brooklyn.util.collections.MutableMap;
@@ -53,6 +54,7 @@ import org.osgi.framework.launch.Framework;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.base.Optional;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
@@ -64,12 +66,14 @@ public class OsgiManager {
/* see Osgis for info on starting framework etc */
- protected ManagementContext mgmt;
+ protected final ManagementContext mgmt;
+ protected final OsgiClassPrefixer osgiClassPrefixer;
protected Framework framework;
protected File osgiCacheDir;
-
+
public OsgiManager(ManagementContext mgmt) {
this.mgmt = mgmt;
+ this.osgiClassPrefixer = new OsgiClassPrefixer();
}
public void start() {
@@ -189,10 +193,11 @@ public class OsgiManager {
Maybe<Bundle> bundle = findBundle(osgiBundle);
if (bundle.isPresent()) {
Bundle b = bundle.get();
- Class<T> clazz;
+ Optional<String> strippedType = osgiClassPrefixer.stripMatchingPrefix(b, type);
+ String typeToLoad = strippedType.isPresent() ? strippedType.get() : type;
//Extension bundles don't support loadClass.
//Instead load from the app classpath.
- clazz = SystemFrameworkLoader.get().loadClassFromBundle(type, b);
+ Class<T> clazz = SystemFrameworkLoader.get().loadClassFromBundle(typeToLoad, b);
return Maybe.of(clazz);
} else {
bundleProblems.put(osgiBundle, Maybe.getException(bundle));
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6e68d74e/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/OsgiClassPrefixer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/OsgiClassPrefixer.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/OsgiClassPrefixer.java
index a76c02a..c1650f4 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/OsgiClassPrefixer.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/OsgiClassPrefixer.java
@@ -48,4 +48,12 @@ public class OsgiClassPrefixer {
}
return Optional.absent();
}
+
+ public Optional<String> stripMatchingPrefix(Bundle bundle, String type) {
+ String symbolicName = bundle.getSymbolicName();
+ if (symbolicName != null && type.startsWith(symbolicName + ":")) {
+ return Optional.of(type.substring((symbolicName + ":").length()));
+ }
+ return Optional.absent();
+ }
}