[
https://issues.apache.org/jira/browse/CAMEL-12987?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16713911#comment-16713911
]
ASF GitHub Bot commented on CAMEL-12987:
----------------------------------------
davsclaus closed pull request #2660: CAMEL-12987: Ensure onContextStop is
called on the OsgiServiceRegistry.
URL: https://github.com/apache/camel/pull/2660
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git
a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiCamelContextHelper.java
b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiCamelContextHelper.java
index 08ff669c59f..2b9b1fc4e60 100644
---
a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiCamelContextHelper.java
+++
b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiCamelContextHelper.java
@@ -56,14 +56,23 @@ public static void osgiUpdate(DefaultCamelContext
camelContext, BundleContext bu
public static Registry wrapRegistry(CamelContext camelContext, Registry
registry, BundleContext bundleContext) {
ObjectHelper.notNull(bundleContext, "BundleContext");
- LOG.debug("Setting up OSGi ServiceRegistry");
- OsgiServiceRegistry osgiServiceRegistry = new
OsgiServiceRegistry(bundleContext);
+ OsgiServiceRegistry osgiServiceRegistry = null;
+ Registry resultingRegistry = registry;
+ if(registry instanceof OsgiServiceRegistry) {
+ osgiServiceRegistry = (OsgiServiceRegistry)registry;
+ } else {
+ LOG.debug("Wrapping Registry in OsgiServiceRegistry");
+ osgiServiceRegistry = new OsgiServiceRegistry(bundleContext);
+ CompositeRegistry compositeRegistry = new CompositeRegistry();
+ compositeRegistry.addRegistry(osgiServiceRegistry);
+ compositeRegistry.addRegistry(registry);
+ resultingRegistry = compositeRegistry;
+ }
+
// Need to clean up the OSGi service when camel context is closed.
camelContext.addLifecycleStrategy(osgiServiceRegistry);
- CompositeRegistry compositeRegistry = new CompositeRegistry();
- compositeRegistry.addRegistry(osgiServiceRegistry);
- compositeRegistry.addRegistry(registry);
- return compositeRegistry;
+
+ return resultingRegistry;
}
}
diff --git
a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDefaultCamelContext.java
b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDefaultCamelContext.java
index 20e3a21eca0..821ef5d7978 100644
---
a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDefaultCamelContext.java
+++
b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDefaultCamelContext.java
@@ -32,7 +32,6 @@
public class OsgiDefaultCamelContext extends DefaultCamelContext {
private final BundleContext bundleContext;
- private final Registry registry;
public OsgiDefaultCamelContext(BundleContext bundleContext) {
this(bundleContext, new OsgiServiceRegistry(bundleContext));
@@ -41,7 +40,7 @@ public OsgiDefaultCamelContext(BundleContext bundleContext) {
public OsgiDefaultCamelContext(BundleContext bundleContext, Registry
registry) {
super(registry);
this.bundleContext = bundleContext;
- this.registry = registry;
+ setRegistry(OsgiCamelContextHelper.wrapRegistry(this, registry,
bundleContext));
OsgiCamelContextHelper.osgiUpdate(this, bundleContext);
// setup the application context classloader with the bundle
classloader
setApplicationContextClassLoader(new
BundleDelegatingClassLoader(bundleContext.getBundle()));
@@ -52,15 +51,6 @@ public OsgiDefaultCamelContext(BundleContext bundleContext,
Registry registry) {
return BundleContextUtils.findComponents(bundleContext, this);
}
- @Override
- protected Registry createRegistry() {
- if (registry != null) {
- return OsgiCamelContextHelper.wrapRegistry(this, registry,
bundleContext);
- } else {
- return OsgiCamelContextHelper.wrapRegistry(this,
super.createRegistry(), bundleContext);
- }
- }
-
@Override
protected TypeConverter createTypeConverter() {
// CAMEL-3614: make sure we use a bundle context which imports
org.apache.camel.impl.converter package
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> camel-core-osgi: OsgiServiceRegistry.onContextStop never gets called.
> ---------------------------------------------------------------------
>
> Key: CAMEL-12987
> URL: https://issues.apache.org/jira/browse/CAMEL-12987
> Project: Camel
> Issue Type: Bug
> Components: camel-osgi
> Affects Versions: 2.18.0, 2.19.0, 2.20.0, 2.21.0, 2.22.0, 2.23.0, 2.24.0
> Environment: Java 10
> Karaf 4.2.1
> Camel 2.22.0
> Reporter: Bob Paulin
> Priority: Major
>
> There is also a second problem with how the registry is being managed within
> the OsgiDefaultCamelContext. OsgiServiceRegistry is currently extends
> LifecycleStrategySupport which is suppose to unload the serviceReferenceQueue
> onContextStop. However the registry is never getting added to the
> CamelContext to manage the Lifecycle because the overridden createRegistry
> method in OsgiDefaultCamelContext is not being called. This is because the
> registry is being set in the constructor of OsgiDefaultCamelContext with
> {code:java}
> super(registry);{code}
> this calls the DefaultCamelContext implementation of createRegistry which
> does not add the registry to lifecyclemanagement since
> {code:java}
> OsgiCamelContextHelper.wrapRegistry(this, registry, bundleContext);{code}
> is never called.
> See CAMEL-12969 for screen captures.
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)