You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2016/07/13 15:55:12 UTC

[1/2] brooklyn-server git commit: Convert versions to OSGi format before passing them to the OSGi runtime.

Repository: brooklyn-server
Updated Branches:
  refs/heads/master d90299005 -> a4131586f


Convert versions to OSGi format before passing them to the OSGi runtime.


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

Branch: refs/heads/master
Commit: 72787ab39a05cad3f0045b4182ee073ad70f81df
Parents: be1b513
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Wed Jul 13 17:50:16 2016 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Wed Jul 13 17:50:16 2016 +0300

----------------------------------------------------------------------
 .../brooklyn/util/core/ClassLoaderUtils.java    | 12 +--
 .../util/core/ClassLoaderUtilsTest.java         | 24 +++++
 .../apache/brooklyn/util/osgi/OsgiUtils.java    | 96 ++++++++++++++++++++
 3 files changed, 123 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/72787ab3/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 5423ba9..9f24b47 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
@@ -38,6 +38,7 @@ import org.apache.brooklyn.util.core.LoaderDispatcher.ResourceLoaderDispatcher;
 import org.apache.brooklyn.util.core.osgi.Osgis;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.guava.Maybe;
+import org.apache.brooklyn.util.osgi.OsgiUtils;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkUtil;
@@ -61,7 +62,7 @@ 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\\..*:" + BrooklynVersion.get().replaceFirst("-", ".");
+    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.
@@ -268,15 +269,8 @@ public class ClassLoaderUtils {
         if (framework != null) {
             Maybe<Bundle> bundle = Osgis.bundleFinder(framework)
                 .symbolicName(symbolicName)
-                .version(version)
+                .version(OsgiUtils.toOsgiVersion(version))
                 .find();
-            if (bundle.isAbsent() && version != null) {
-                bundle = Osgis.bundleFinder(framework)
-                    .symbolicName(symbolicName)
-                    // Convert X.X.X-SNAPSHOT to X.X.X.SNAPSHOT. Any better way to do it?
-                    .version(version.replace("-", "."))
-                    .find();
-            }
             if (bundle.isAbsent()) {
                 throw new IllegalStateException("Bundle " + toBundleString(symbolicName, version) + " not found to load " + name);
             }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/72787ab3/core/src/test/java/org/apache/brooklyn/util/core/ClassLoaderUtilsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/ClassLoaderUtilsTest.java b/core/src/test/java/org/apache/brooklyn/util/core/ClassLoaderUtilsTest.java
index b0cce9e..7ede563 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/ClassLoaderUtilsTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/ClassLoaderUtilsTest.java
@@ -32,6 +32,7 @@ import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.EntitySpec;
 import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.core.BrooklynVersion;
 import org.apache.brooklyn.core.catalog.internal.CatalogBundleDto;
 import org.apache.brooklyn.core.catalog.internal.CatalogEntityItemDto;
 import org.apache.brooklyn.core.catalog.internal.CatalogItemBuilder;
@@ -52,7 +53,9 @@ import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.maven.MavenArtifact;
 import org.apache.brooklyn.util.maven.MavenRetriever;
 import org.apache.brooklyn.util.osgi.OsgiTestResources;
+import org.apache.brooklyn.util.osgi.OsgiUtils;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.Version;
 import org.osgi.framework.launch.Framework;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
@@ -205,6 +208,27 @@ public class ClassLoaderUtilsTest {
         assertLoadSucceeds(clu, classname, ImmutableList.class);
     }
     
+    @Test
+    public void testLoadBrooklynClass() throws Exception {
+        mgmt = LocalManagementContextForTests.builder(true).disableOsgi(false).build();
+        new ClassLoaderUtils(this, mgmt).loadClass(
+                "org.apache.brooklyn.api",
+                BrooklynVersion.get(),
+                Entity.class.getName());
+        new ClassLoaderUtils(this, mgmt).loadClass(
+                "org.apache.brooklyn.api",
+                OsgiUtils.toOsgiVersion(BrooklynVersion.get()),
+                Entity.class.getName());
+        new ClassLoaderUtils(this, mgmt).loadClass(
+                "org.apache.brooklyn.api",
+                "0.10.0-SNAPSHOT",
+                Entity.class.getName());
+        new ClassLoaderUtils(this, mgmt).loadClass(
+                "org.apache.brooklyn.api",
+                "0.10.0.SNAPSHOT",
+                Entity.class.getName());
+    }
+    
     private Bundle installBundle(ManagementContext mgmt, String bundleUrl) throws Exception {
         OsgiManager osgiManager = ((ManagementContextInternal)mgmt).getOsgiManager().get();
         Framework framework = osgiManager.getFramework();

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/72787ab3/utils/common/src/main/java/org/apache/brooklyn/util/osgi/OsgiUtils.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/osgi/OsgiUtils.java b/utils/common/src/main/java/org/apache/brooklyn/util/osgi/OsgiUtils.java
index 4e28720..df41686 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/osgi/OsgiUtils.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/osgi/OsgiUtils.java
@@ -21,6 +21,9 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.text.Strings;
 import org.osgi.framework.Bundle;
@@ -98,4 +101,97 @@ public class OsgiUtils {
         return Maybe.of(new VersionedName(parts[0], v));
     }
 
+    public static String toOsgiVersion(String version) {
+        if (version != null) {
+            return DefaultMaven2OsgiConverter.cleanupVersion(version);
+        } else {
+            return null;
+        }
+    }
+
+    // Maven to OSGi version converter
+    // Source: https://github.com/apache/felix/blob/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/maven/shared/osgi/DefaultMaven2OsgiConverter.java
+    private static class DefaultMaven2OsgiConverter {
+        /**
+         * Clean up version parameters. Other builders use more fuzzy definitions of
+         * the version syntax. This method cleans up such a version to match an OSGi
+         * version.
+         *
+         * @param VERSION_STRING
+         * @return
+         */
+        static final Pattern FUZZY_VERSION = Pattern.compile( "(\\d+)(\\.(\\d+)(\\.(\\d+))?)?([^a-zA-Z0-9](.*))?",
+            Pattern.DOTALL );
+    
+    
+        static public String cleanupVersion( String version )
+        {
+            StringBuffer result = new StringBuffer();
+            Matcher m = FUZZY_VERSION.matcher( version );
+            if ( m.matches() )
+            {
+                String major = m.group( 1 );
+                String minor = m.group( 3 );
+                String micro = m.group( 5 );
+                String qualifier = m.group( 7 );
+    
+                if ( major != null )
+                {
+                    result.append( major );
+                    if ( minor != null )
+                    {
+                        result.append( "." );
+                        result.append( minor );
+                        if ( micro != null )
+                        {
+                            result.append( "." );
+                            result.append( micro );
+                            if ( qualifier != null )
+                            {
+                                result.append( "." );
+                                cleanupModifier( result, qualifier );
+                            }
+                        }
+                        else if ( qualifier != null )
+                        {
+                            result.append( ".0." );
+                            cleanupModifier( result, qualifier );
+                        }
+                        else
+                        {
+                            result.append( ".0" );
+                        }
+                    }
+                    else if ( qualifier != null )
+                    {
+                        result.append( ".0.0." );
+                        cleanupModifier( result, qualifier );
+                    }
+                    else
+                    {
+                        result.append( ".0.0" );
+                    }
+                }
+            }
+            else
+            {
+                result.append( "0.0.0." );
+                cleanupModifier( result, version );
+            }
+            return result.toString();
+        }
+    
+        static void cleanupModifier( StringBuffer result, String modifier )
+        {
+            for ( int i = 0; i < modifier.length(); i++ )
+            {
+                char c = modifier.charAt( i );
+                if ( ( c >= '0' && c <= '9' ) || ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) || c == '_'
+                    || c == '-' )
+                    result.append( c );
+                else
+                    result.append( '_' );
+            }
+        }
+    }
 }


[2/2] brooklyn-server git commit: This closes #256

Posted by al...@apache.org.
This closes #256


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

Branch: refs/heads/master
Commit: a4131586f785957afa9695450628c4a565d3311d
Parents: d902990 72787ab
Author: Aled Sage <al...@gmail.com>
Authored: Wed Jul 13 16:54:38 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Jul 13 16:54:38 2016 +0100

----------------------------------------------------------------------
 .../brooklyn/util/core/ClassLoaderUtils.java    | 12 +--
 .../util/core/ClassLoaderUtilsTest.java         | 24 +++++
 .../apache/brooklyn/util/osgi/OsgiUtils.java    | 96 ++++++++++++++++++++
 3 files changed, 123 insertions(+), 9 deletions(-)
----------------------------------------------------------------------