You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2019/02/18 13:58:56 UTC

svn commit: r1853798 - in /felix/trunk/connect/src/main/java/org/apache/felix/connect: PojoSR.java launch/PojoServiceRegistry.java launch/PojoServiceRegistryFactory.java

Author: pauls
Date: Mon Feb 18 13:58:56 2019
New Revision: 1853798

URL: http://svn.apache.org/viewvc?rev=1853798&view=rev
Log:
FELIX-6051: Add a registerBundle method and allow to disable autostart of bundles. Patch provided by Tobias Roeser - thanks! (This closes #178)

Modified:
    felix/trunk/connect/src/main/java/org/apache/felix/connect/PojoSR.java
    felix/trunk/connect/src/main/java/org/apache/felix/connect/launch/PojoServiceRegistry.java
    felix/trunk/connect/src/main/java/org/apache/felix/connect/launch/PojoServiceRegistryFactory.java

Modified: felix/trunk/connect/src/main/java/org/apache/felix/connect/PojoSR.java
URL: http://svn.apache.org/viewvc/felix/trunk/connect/src/main/java/org/apache/felix/connect/PojoSR.java?rev=1853798&r1=1853797&r2=1853798&view=diff
==============================================================================
--- felix/trunk/connect/src/main/java/org/apache/felix/connect/PojoSR.java (original)
+++ felix/trunk/connect/src/main/java/org/apache/felix/connect/PojoSR.java Mon Feb 18 13:58:56 2019
@@ -31,6 +31,7 @@ import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -255,59 +256,30 @@ public class PojoSR implements PojoServi
 
         if (scan != null)
         {
-            startBundles(scan);
-        }
-    }
-
-    public void startBundles(Collection<BundleDescriptor> scan) throws Exception
-    {
-        for (BundleDescriptor desc : scan)
-        {
-            Revision revision = desc.getRevision();
-            if (revision == null)
-            {
-                revision = buildRevision(desc);
-            }
-            Map<String, String> bundleHeaders = desc.getHeaders();
-            Version osgiVersion;
-            try
+            Object autoStart = config.get(PojoServiceRegistryFactory.BUNDLES_AUTOSTART);
+            if(autoStart == null || Boolean.TRUE.equals(autoStart))
             {
-                osgiVersion = Version.parseVersion(bundleHeaders.get(Constants.BUNDLE_VERSION));
+                startBundles(scan);
             }
-            catch (Exception ex)
+            else
             {
-                ex.printStackTrace();
-                osgiVersion = Version.emptyVersion;
-            }
-            String sym = bundleHeaders.get(Constants.BUNDLE_SYMBOLICNAME);
-            if (sym != null)
-            {
-                int idx = sym.indexOf(';');
-                if (idx > 0)
-                {
-                    sym = sym.substring(0, idx);
+                for (BundleDescriptor desc : scan) {
+                    registerBundle(desc);
                 }
-                sym = sym.trim();
             }
-
-            Bundle bundle = new PojoSRBundle(
-                    m_registry,
-                    m_dispatcher,
-                    m_bundles,
-                    desc.getUrl(),
-                    m_bundles.size(),
-                    sym,
-                    osgiVersion,
-                    revision,
-                    desc.getClassLoader(),
-                    bundleHeaders,
-                    desc.getServices(),
-                    bundleConfig);
-            m_bundles.put(bundle.getBundleId(), bundle);
         }
+    }
 
+    public void startBundles(Collection<BundleDescriptor> scan) throws Exception {
+        List<Bundle> bundles = new LinkedList<Bundle>();
+
+        for (BundleDescriptor desc : scan)
+        {
+            Bundle bundle = registerBundle(desc);
+            bundles.add(bundle);
+        }
 
-        for (Bundle bundle : m_bundles.values())
+        for (Bundle bundle : bundles)
         {
             try
             {
@@ -319,7 +291,54 @@ public class PojoSR implements PojoServi
                 e.printStackTrace();
             }
         }
+    }
+
+    public Bundle registerBundle(BundleDescriptor desc) throws Exception
+    {
+        Revision revision = desc.getRevision();
+        if (revision == null)
+        {
+            revision = buildRevision(desc);
+        }
+        Map<String, String> bundleHeaders = desc.getHeaders();
+        Version osgiVersion;
+        try
+        {
+            osgiVersion = Version.parseVersion(bundleHeaders.get(Constants.BUNDLE_VERSION));
+        }
+        catch (Exception ex)
+        {
+            ex.printStackTrace();
+            osgiVersion = Version.emptyVersion;
+        }
+        String sym = bundleHeaders.get(Constants.BUNDLE_SYMBOLICNAME);
+        if (sym != null)
+        {
+            int idx = sym.indexOf(';');
+            if (idx > 0)
+            {
+                sym = sym.substring(0, idx);
+            }
+            sym = sym.trim();
+        }
+
+        Bundle bundle = new PojoSRBundle(
+                m_registry,
+                m_dispatcher,
+                m_bundles,
+                desc.getUrl(),
+                m_bundles.size(),
+                sym,
+                osgiVersion,
+                revision,
+                desc.getClassLoader(),
+                bundleHeaders,
+                desc.getServices(),
+                bundleConfig);
+
+        m_bundles.put(bundle.getBundleId(), bundle);
 
+        return bundle;
     }
 
     private Revision buildRevision(BundleDescriptor desc) throws IOException

Modified: felix/trunk/connect/src/main/java/org/apache/felix/connect/launch/PojoServiceRegistry.java
URL: http://svn.apache.org/viewvc/felix/trunk/connect/src/main/java/org/apache/felix/connect/launch/PojoServiceRegistry.java?rev=1853798&r1=1853797&r2=1853798&view=diff
==============================================================================
--- felix/trunk/connect/src/main/java/org/apache/felix/connect/launch/PojoServiceRegistry.java (original)
+++ felix/trunk/connect/src/main/java/org/apache/felix/connect/launch/PojoServiceRegistry.java Mon Feb 18 13:58:56 2019
@@ -20,7 +20,9 @@ package org.apache.felix.connect.launch;
 
 import java.util.Collection;
 import java.util.Dictionary;
+import java.util.List;
 
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceListener;
@@ -33,6 +35,8 @@ public interface PojoServiceRegistry
 
     public void startBundles(Collection<BundleDescriptor> bundles) throws Exception;
 
+    public Bundle registerBundle(BundleDescriptor bundle) throws Exception;
+
     public void addServiceListener(ServiceListener listener, String filter) throws InvalidSyntaxException;
 
     public void addServiceListener(ServiceListener listener);

Modified: felix/trunk/connect/src/main/java/org/apache/felix/connect/launch/PojoServiceRegistryFactory.java
URL: http://svn.apache.org/viewvc/felix/trunk/connect/src/main/java/org/apache/felix/connect/launch/PojoServiceRegistryFactory.java?rev=1853798&r1=1853797&r2=1853798&view=diff
==============================================================================
--- felix/trunk/connect/src/main/java/org/apache/felix/connect/launch/PojoServiceRegistryFactory.java (original)
+++ felix/trunk/connect/src/main/java/org/apache/felix/connect/launch/PojoServiceRegistryFactory.java Mon Feb 18 13:58:56 2019
@@ -25,5 +25,8 @@ public interface PojoServiceRegistryFact
     public static final String BUNDLE_DESCRIPTORS =
             PojoServiceRegistry.class.getName().toLowerCase() + ".bundles";
 
+    public static final String BUNDLES_AUTOSTART =
+            PojoServiceRegistry.class.getName().toLowerCase() + ".bundles.autostart";
+
     public PojoServiceRegistry newPojoServiceRegistry(Map<String, Object> configuration) throws Exception;
 }