brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From henev...@apache.org
Subject [26/50] brooklyn-server git commit: Make EmbeddedFelixFramework pluggable
Date Wed, 30 Mar 2016 14:00:03 GMT
Make EmbeddedFelixFramework pluggable

Needs different implementations depending on whether running in Karaf or classical. Can't
have EmbeddedFelixFramework loaded in Karaf because felix bundle doesn't export org.apache.framework
packages, just generic OSGi ones.


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

Branch: refs/heads/master
Commit: 50ece3dee91d0f07f4ac8bd78b462063799580cc
Parents: b2df8dd
Author: Svetoslav Neykov <svetoslav.neykov@cloudsoftcorp.com>
Authored: Wed Mar 16 18:41:52 2016 +0200
Committer: Geoff Macartney <geoff.macartney@cloudsoftcorp.com>
Committed: Thu Mar 24 15:58:27 2016 +0000

----------------------------------------------------------------------
 .../brooklyn/core/mgmt/ha/OsgiManager.java      | 13 ++---
 .../util/core/osgi/ContainerFramework.java      | 47 +++++++++++++++++
 .../apache/brooklyn/util/core/osgi/Osgis.java   | 38 +++-----------
 .../util/core/osgi/SystemFrameworkLoader.java   | 36 +++++++++++++
 .../resources/OSGI-INF/blueprint/blueprint.xml  |  4 ++
 .../core/mgmt/osgi/OsgiStandaloneTest.java      |  4 +-
 .../brooklyn/util/osgi/SystemFramework.java     | 45 ++++++++++++++++
 .../rt/felix/EmbeddedFelixFramework.java        |  5 --
 .../brooklyn/rt/felix/EmbeddedFramework.java    | 54 ++++++++++++++++++++
 ...rg.apache.brooklyn.util.osgi.SystemFramework | 19 +++++++
 10 files changed, 216 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/50ece3de/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 ba56b98..28b20b3 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
@@ -36,15 +36,16 @@ import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.BrooklynVersion;
 import org.apache.brooklyn.core.server.BrooklynServerConfig;
 import org.apache.brooklyn.core.server.BrooklynServerPaths;
-import org.apache.brooklyn.rt.felix.EmbeddedFelixFramework;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.collections.MutableSet;
 import org.apache.brooklyn.util.core.osgi.Osgis;
 import org.apache.brooklyn.util.core.osgi.Osgis.BundleFinder;
+import org.apache.brooklyn.util.core.osgi.SystemFrameworkLoader;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.os.Os;
 import org.apache.brooklyn.util.os.Os.DeletionResult;
+import org.apache.brooklyn.util.osgi.SystemFramework;
 import org.apache.brooklyn.util.repeat.Repeater;
 import org.apache.brooklyn.util.text.Strings;
 import org.apache.brooklyn.util.time.Duration;
@@ -192,15 +193,7 @@ public class OsgiManager {
                     Class<T> clazz;
                     //Extension bundles don't support loadClass.
                     //Instead load from the app classpath.
-                    if (EmbeddedFelixFramework.isExtensionBundle(b)) {
-                        @SuppressWarnings("unchecked")
-                        Class<T> c = (Class<T>)Class.forName(type);
-                        clazz = c;
-                    } else {
-                        @SuppressWarnings("unchecked")
-                        Class<T> c = (Class<T>)b.loadClass(type);
-                        clazz = c;
-                    }
+                    clazz = SystemFrameworkLoader.get().loadClassFromBundle(type, b);
                     return Maybe.of(clazz);
                 } else {
                     bundleProblems.put(osgiBundle, ((Maybe.Absent<?>)bundle).getException());

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/50ece3de/core/src/main/java/org/apache/brooklyn/util/core/osgi/ContainerFramework.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/osgi/ContainerFramework.java
b/core/src/main/java/org/apache/brooklyn/util/core/osgi/ContainerFramework.java
new file mode 100644
index 0000000..874f369
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/util/core/osgi/ContainerFramework.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2015 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.brooklyn.util.core.osgi;
+
+import org.apache.brooklyn.util.osgi.SystemFramework;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.launch.Framework;
+
+public class ContainerFramework implements SystemFramework {
+
+    @Override
+    public Framework getFramework(String felixCacheDir, boolean clean) {
+        final Bundle bundle = FrameworkUtil.getBundle(Osgis.class);
+        return (Framework) bundle.getBundleContext().getBundle(0);
+    }
+
+    @Override
+    public void ungetFramework(Framework framework) {
+    }
+
+    @Override
+    public boolean isSystemBundle(Bundle bundle) {
+        return false;
+    }
+
+    @Override
+    public <T> Class<T> loadClassFromBundle(String type, Bundle b) throws ClassNotFoundException
{
+        @SuppressWarnings("unchecked")
+        Class<T> c = (Class<T>)b.loadClass(type);
+        return c;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/50ece3de/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java b/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
index c2598ad..0a03366 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
@@ -31,7 +31,6 @@ import java.util.jar.JarInputStream;
 import java.util.jar.Manifest;
 
 import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
-import org.apache.brooklyn.rt.felix.EmbeddedFelixFramework;
 import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.core.ResourceUtils;
 import org.apache.brooklyn.util.exceptions.Exceptions;
@@ -42,13 +41,9 @@ import org.apache.brooklyn.util.osgi.OsgiUtils;
 import org.apache.brooklyn.util.stream.Streams;
 import org.apache.brooklyn.util.text.Strings;
 import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleException;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.ServiceReference;
 import org.osgi.framework.Version;
 import org.osgi.framework.launch.Framework;
-import org.osgi.framework.launch.FrameworkFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -291,12 +286,6 @@ public class Osgis {
         return bundleFinder(framework).symbolicName(symbolicName).version(Predicates.equalTo(version)).findUnique();
     }
 
-    /** @deprecated since 0.9.0, replaced by {@link EmbeddedFelixFramework#newFrameworkFactory()
*/
-    @Deprecated
-    public static FrameworkFactory newFrameworkFactory() {
-        return EmbeddedFelixFramework.newFrameworkFactory();
-    }
-
     /** @deprecated since 0.9.0, replaced by {@link #getFramework(java.lang.String, boolean)
} */
     @Deprecated
     public static Framework newFrameworkStarted(String felixCacheDir, boolean clean, Map<?,?>
extraStartupConfig) {
@@ -315,14 +304,7 @@ public class Osgis {
      * @todo Use felixCacheDir ?
      */
     public static Framework getFramework(String felixCacheDir, boolean clean) {
-        final Bundle bundle = FrameworkUtil.getBundle(Osgis.class);
-        if (bundle != null) {
-            // already running inside an OSGi container
-            return (Framework) bundle.getBundleContext().getBundle(0);
-        } else {
-            // not running inside OSGi container
-            return EmbeddedFelixFramework.newFrameworkStarted(felixCacheDir, clean, null);
-        }
+        return SystemFrameworkLoader.get().getFramework(felixCacheDir, clean);
     }
 
     /**
@@ -333,10 +315,7 @@ public class Osgis {
      * @param framework
      */
     public static void ungetFramework(Framework framework) {
-        final Bundle bundle = FrameworkUtil.getBundle(Osgis.class);
-        if (bundle == null) {
-            EmbeddedFelixFramework.stopFramework(framework);
-        }
+        SystemFrameworkLoader.get().ungetFramework(framework);
     }
 
 
@@ -425,7 +404,7 @@ public class Osgis {
         String versionedId = OsgiUtils.getVersionedId(manifest);
         for (Bundle installedBundle : framework.getBundleContext().getBundles()) {
             if (versionedId.equals(OsgiUtils.getVersionedId(installedBundle))) {
-                if (EmbeddedFelixFramework.isSystemBundle(installedBundle)) {
+                if (SystemFrameworkLoader.get().isSystemBundle(installedBundle)) {
                     LOG.debug("Already have system bundle "+versionedId+" from "+installedBundle+"/"+installedBundle.getLocation()+"
when requested "+url+"; not installing");
                     // "System bundles" (ie things on the classpath) cannot be overridden
                     return installedBundle;
@@ -442,11 +421,11 @@ public class Osgis {
     private static InputStream getUrlStream(String url) {
         return ResourceUtils.create(Osgis.class).getResourceFromUrl(url);
     }
-    
-    /** @deprecated since 0.9.0, replaced with {@link EmbeddedFelixFramework#isExtensionBundle(Bundle)}
*/
+
+    /** @deprecated since 0.9.0, replaced with {@code SystemFrameworkLoader.get().isSystemBundle(bundle)}
*/
     @Deprecated
     public static boolean isExtensionBundle(Bundle bundle) {
-        return EmbeddedFelixFramework.isExtensionBundle(bundle);
+        return SystemFrameworkLoader.get().isSystemBundle(bundle);
     }
 
     /** @deprecated since 0.9.0, replaced with {@link OsgiUtils#parseOsgiIdentifier(java.lang.String)
} */
@@ -461,9 +440,4 @@ public class Osgis {
         });
     }
 
-    /** @deprecated since 0.9.0, replaced with {@link org.apache.brooklyn.rt.felix.ManifestHelper}
*/
-    @Deprecated
-    public static class ManifestHelper extends org.apache.brooklyn.rt.felix.ManifestHelper
{
-
-    }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/50ece3de/core/src/main/java/org/apache/brooklyn/util/core/osgi/SystemFrameworkLoader.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/osgi/SystemFrameworkLoader.java
b/core/src/main/java/org/apache/brooklyn/util/core/osgi/SystemFrameworkLoader.java
new file mode 100644
index 0000000..e5a5f89
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/util/core/osgi/SystemFrameworkLoader.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2015 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.brooklyn.util.core.osgi;
+
+import org.apache.brooklyn.api.framework.FrameworkLookup;
+import org.apache.brooklyn.util.osgi.SystemFramework;
+
+public class SystemFrameworkLoader {
+    private static SystemFramework framework;
+    public static SystemFramework get() {
+        if (framework == null) {
+            return createFramework();
+        } else {
+            return framework;
+        }
+    }
+    private synchronized static SystemFramework createFramework() {
+        if (framework == null) {
+            framework = FrameworkLookup.lookup(SystemFramework.class).get();
+        }
+        return framework;
+    }
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/50ece3de/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git a/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index f517f2b..a91e829 100644
--- a/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -30,6 +30,10 @@ limitations under the License.
    <service ref="brooklynVersion"
             interface="org.apache.brooklyn.core.BrooklynVersionService" />
 
+    <bean id="containerFramework"
+          class="org.apache.brooklyn.util.core.osgi.ContainerFramework" />
+    <service ref="containerFramework"
+          interface="org.apache.brooklyn.util.osgi.SystemFramework" />
 
     <bean id="apiObjectsFactoryImpl" class="org.apache.brooklyn.core.internal.ApiObjectsFactoryImpl"
/>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/50ece3de/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiStandaloneTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiStandaloneTest.java
b/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiStandaloneTest.java
index 524e248..9267967 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiStandaloneTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiStandaloneTest.java
@@ -20,11 +20,11 @@ package org.apache.brooklyn.core.mgmt.osgi;
 
 
 import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.rt.felix.EmbeddedFelixFramework;
 import org.apache.brooklyn.test.support.TestResourceUnavailableException;
 import org.apache.brooklyn.util.core.ResourceUtils;
 import org.apache.brooklyn.util.core.osgi.OsgiTestBase;
 import org.apache.brooklyn.util.core.osgi.Osgis;
+import org.apache.brooklyn.util.core.osgi.SystemFrameworkLoader;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.maven.MavenArtifact;
 import org.apache.brooklyn.util.maven.MavenRetriever;
@@ -106,7 +106,7 @@ public class OsgiStandaloneTest extends OsgiTestBase {
         //Make sure that we still get the initially loaded
         //bundle after trying to install the same version.
         Bundle bundle = install(url);
-        Assert.assertTrue(EmbeddedFelixFramework.isExtensionBundle(bundle));
+        Assert.assertTrue(SystemFrameworkLoader.get().isSystemBundle(bundle));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/50ece3de/utils/common/src/main/java/org/apache/brooklyn/util/osgi/SystemFramework.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/osgi/SystemFramework.java
b/utils/common/src/main/java/org/apache/brooklyn/util/osgi/SystemFramework.java
new file mode 100644
index 0000000..7b57a02
--- /dev/null
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/osgi/SystemFramework.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2015 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.brooklyn.util.osgi;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.launch.Framework;
+
+public interface SystemFramework {
+    /** 
+     * Provides an OSGI framework.
+     *
+     * When running inside an OSGi container, the container framework is returned.
+     * When running standalone a new Apache Felix container is created.
+     */
+    public Framework getFramework(String felixCacheDir, boolean clean);
+
+    /**
+     * Stops/ungets the OSGi framework, depending on the environment.
+     */
+    public void ungetFramework(Framework framework);
+
+    /**
+     * Whether the bundle is exporting classes from the application class path.
+     */
+    public boolean isSystemBundle(Bundle bundle);
+
+    /**
+     * Loads a class from the passed bundle. The embedded environment has some special
+     * requirements for loading classes so the implementation will abstract those.
+     */
+    public <T> Class<T> loadClassFromBundle(String type, Bundle b) throws ClassNotFoundException;
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/50ece3de/utils/rt-felix/src/main/java/org/apache/brooklyn/rt/felix/EmbeddedFelixFramework.java
----------------------------------------------------------------------
diff --git a/utils/rt-felix/src/main/java/org/apache/brooklyn/rt/felix/EmbeddedFelixFramework.java
b/utils/rt-felix/src/main/java/org/apache/brooklyn/rt/felix/EmbeddedFelixFramework.java
index 2bc467a..ed6b0a5 100644
--- a/utils/rt-felix/src/main/java/org/apache/brooklyn/rt/felix/EmbeddedFelixFramework.java
+++ b/utils/rt-felix/src/main/java/org/apache/brooklyn/rt/felix/EmbeddedFelixFramework.java
@@ -256,11 +256,6 @@ public class EmbeddedFelixFramework {
         return atts.containsKey(new Attributes.Name(Constants.BUNDLE_MANIFESTVERSION));
     }
 
-    public static boolean isSystemBundle(Bundle bundle) {
-        String versionedId = OsgiUtils.getVersionedId( bundle );
-        return SYSTEM_BUNDLES.contains(versionedId);
-    }
-
     public static boolean isExtensionBundle(Bundle bundle) {
         String location = bundle.getLocation();
         return location != null && 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/50ece3de/utils/rt-felix/src/main/java/org/apache/brooklyn/rt/felix/EmbeddedFramework.java
----------------------------------------------------------------------
diff --git a/utils/rt-felix/src/main/java/org/apache/brooklyn/rt/felix/EmbeddedFramework.java
b/utils/rt-felix/src/main/java/org/apache/brooklyn/rt/felix/EmbeddedFramework.java
new file mode 100644
index 0000000..d12cb80
--- /dev/null
+++ b/utils/rt-felix/src/main/java/org/apache/brooklyn/rt/felix/EmbeddedFramework.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2015 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.brooklyn.rt.felix;
+
+import org.apache.brooklyn.util.osgi.SystemFramework;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.launch.Framework;
+
+public class EmbeddedFramework implements SystemFramework {
+
+    @Override
+    public Framework getFramework(String felixCacheDir, boolean clean) {
+        return EmbeddedFelixFramework.newFrameworkStarted(felixCacheDir, clean, null);
+    }
+
+    @Override
+    public void ungetFramework(Framework framework) {
+        EmbeddedFelixFramework.stopFramework(framework);
+    }
+
+    @Override
+    public boolean isSystemBundle(Bundle bundle) {
+        return EmbeddedFelixFramework.isExtensionBundle(bundle);
+    }
+
+    @Override
+    public <T> Class<T> loadClassFromBundle(String type, Bundle b) throws ClassNotFoundException
{
+        Class<T> clazz;
+        if (EmbeddedFelixFramework.isExtensionBundle(b)) {
+            @SuppressWarnings("unchecked")
+            Class<T> c = (Class<T>)Class.forName(type);
+            clazz = c;
+        } else {
+            @SuppressWarnings("unchecked")
+            Class<T> c = (Class<T>)b.loadClass(type);
+            clazz = c;
+        }
+        return clazz;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/50ece3de/utils/rt-felix/src/main/resources/META-INF/services/org.apache.brooklyn.util.osgi.SystemFramework
----------------------------------------------------------------------
diff --git a/utils/rt-felix/src/main/resources/META-INF/services/org.apache.brooklyn.util.osgi.SystemFramework
b/utils/rt-felix/src/main/resources/META-INF/services/org.apache.brooklyn.util.osgi.SystemFramework
new file mode 100644
index 0000000..8e0a94b
--- /dev/null
+++ b/utils/rt-felix/src/main/resources/META-INF/services/org.apache.brooklyn.util.osgi.SystemFramework
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+org.apache.brooklyn.rt.felix.EmbeddedFramework


Mime
View raw message