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(-)
----------------------------------------------------------------------