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();
+    }
 }