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;
}