Hi Claus,

you are right. The problem was caused by my commit. I am currently testing a fix and will shortly do the commit. I also found why I did not see the problem in my own test by hand. It was simply because I used camel-blueprint not camel-spring. So gladly karaf 4 and 2.4 do not work differently here.

Christian

On 19.04.2015 07:50, Claus Ibsen wrote:
Hi

I wonder if this may cause master branch to fail in the
camel-test-blueprint module?

https://builds.apache.org/job/Camel.trunk.fulltest/org.apache.camel$camel-test-blueprint/2274/testReport/junit/org.apache.camel.test.blueprint/CustomIdIssuesTest/testCustomId/

I get same errors running it locally on my laptop



On Fri, Apr 17, 2015 at 4:52 PM,  <cschnei...@apache.org> wrote:
Repository: camel
Updated Branches:
   refs/heads/master 96cfe14c9 -> a5a0cd7e7


CAMEL-8647: Make Camel OSGI Extender Subsystem-Aware - With thanks to Manuel 
Holzleitner


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

Branch: refs/heads/master
Commit: a5a0cd7e7dcc9b3c41ee96f5da0975f48c98ca7b
Parents: 96cfe14
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Fri Apr 17 15:42:33 2015 +0200
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Fri Apr 17 16:52:16 2015 +0200

----------------------------------------------------------------------
  .../org/apache/camel/impl/osgi/Activator.java   | 48 ++++++++++++++++----
  parent/pom.xml                                  |  3 +-
  2 files changed, 40 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/a5a0cd7e/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java 
b/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java
index d73f6c6..2eddc25 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java
@@ -64,6 +64,8 @@ import org.osgi.framework.BundleContext;
  import org.osgi.framework.BundleEvent;
  import org.osgi.framework.Constants;
  import org.osgi.framework.ServiceRegistration;
+import org.osgi.framework.wiring.BundleWire;
+import org.osgi.framework.wiring.BundleWiring;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;

@@ -75,15 +77,20 @@ public class Activator implements BundleActivator, 
BundleTrackerCustomizer {
      public static final String META_INF_DATAFORMAT = 
"META-INF/services/org/apache/camel/dataformat/";
      public static final String META_INF_TYPE_CONVERTER = 
"META-INF/services/org/apache/camel/TypeConverter";
      public static final String META_INF_FALLBACK_TYPE_CONVERTER = 
"META-INF/services/org/apache/camel/FallbackTypeConverter";
+    public static final String EXTENDER_NAMESPACE = "osgi.extender";
+    public static final String CAMEL_EXTENDER = "org.apache.camel";

      private static final Logger LOG = 
LoggerFactory.getLogger(Activator.class);

      private BundleTracker tracker;
      private Map<Long, List<BaseService>> resolvers = new ConcurrentHashMap<Long, 
List<BaseService>>();
+    private long bundleId;

      public void start(BundleContext context) throws Exception {
          LOG.info("Camel activator starting");
-        tracker = new BundleTracker(context, Bundle.ACTIVE, this);
+        bundleId = context.getBundle().getBundleId();
+        BundleContext systemBundleContext = 
context.getBundle(Constants.SYSTEM_BUNDLE_LOCATION).getBundleContext();
+        tracker = new BundleTracker(systemBundleContext, Bundle.ACTIVE, this);
          tracker.open();
          LOG.info("Camel activator started");
      }
@@ -96,18 +103,38 @@ public class Activator implements BundleActivator, 
BundleTrackerCustomizer {

      public Object addingBundle(Bundle bundle, BundleEvent event) {
          LOG.debug("Bundle started: {}", bundle.getSymbolicName());
-        List<BaseService> r = new ArrayList<BaseService>();
-        registerComponents(bundle, r);
-        registerLanguages(bundle, r);
-        registerDataFormats(bundle, r);
-        registerTypeConverterLoader(bundle, r);
-        for (BaseService service : r) {
-            service.register();
-        }
-        resolvers.put(bundle.getBundleId(), r);
+        if (extenderCapabilityWired(bundle)) {
+            List<BaseService> r = new ArrayList<BaseService>();
+            registerComponents(bundle, r);
+            registerLanguages(bundle, r);
+            registerDataFormats(bundle, r);
+            registerTypeConverterLoader(bundle, r);
+            for (BaseService service : r) {
+                service.register();
+            }
+            resolvers.put(bundle.getBundleId(), r);
+        }
+
          return bundle;
      }

+    private boolean extenderCapabilityWired(Bundle bundle) {
+        BundleWiring wiring = bundle.adapt(BundleWiring.class);
+        List<BundleWire> requiredWires = 
wiring.getRequiredWires(EXTENDER_NAMESPACE);
+        for (BundleWire requiredWire : requiredWires) {
+            if 
(CAMEL_EXTENDER.equals(requiredWire.getCapability().getAttributes().get(EXTENDER_NAMESPACE)))
 {
+                if (this.bundleId == 
requiredWire.getProviderWiring().getBundle().getBundleId()) {
+                    LOG.debug("Camel extender requirement of bundle {} correctly 
wired to this implementation", bundle.getBundleId());
+                    return true;
+                } else {
+                    LOG.info("Not processing bundle {} as it requires a camel 
extender but is not wired to the this implementation", bundle.getBundleId());
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
      public void modifiedBundle(Bundle bundle, BundleEvent event, Object 
object) {
      }

@@ -537,3 +564,4 @@ public class Activator implements BundleActivator, 
BundleTrackerCustomizer {

  }

+

http://git-wip-us.apache.org/repos/asf/camel/blob/a5a0cd7e/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index 530371f..877c6ba 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -521,7 +521,8 @@
      
<camel.osgi.import.strict.version>version="[$(version;===;${camel.osgi.version.clean}),$(version;==+;${camel.osgi.version.clean}))"</camel.osgi.import.strict.version>
      
<camel.osgi.import.default.version>[$(version;==;$(@)),$(version;+;$(@)))</camel.osgi.import.default.version>
      <camel.osgi.import.defaults>
-      org.osgi.framework*;version="[1.5,2)",
+      org.osgi.framework;version="[1.5,2)",
+      org.osgi.framework.wiring;version="[1.0,2)",
        org.springframework.ws.*;version="[2,3)",
        org.springframework.xml.*;version="[2,3)",
        org.springframework.*;version="${spring-version-range}",





--
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com

Reply via email to