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}",