Hi Dan,

Thanks for the review. I polished the code to avoid recalling the shutdown 
method for the same bus and ran the whole unit tests, every thing looks good. I 
will commit the code shortly.

Regards,

--  
Willem Jiang

Red Hat, Inc.
Web: http://www.redhat.com
Blog: http://willemjiang.blogspot.com(http://willemjiang.blogspot.com/) 
(English)
http://jnn.iteye.com(http://jnn.javaeye.com/) (Chinese)
Twitter: willemjiang  
Weibo: 姜宁willem



On January 20, 2014 at 9:18:42 PM, Daniel Kulp ([email protected]) wrote:
>  
>  
> If a user creates a basic application outside of spring but using  
> Spring config and THEY manage the bus via a BusFactory, this MAY  
> result in a loop at shutdown.
>  
> Bus bus = new SpringBusFactory.createBus(“/cxf.xml”);
>  
> .. do stuff with bus …
>  
> bus.shutdown();
>  
> Looking at the code for this, shutdown() would call destroyBeans()  
> which would call ctx.close() which would trigger your ContextClosedEvent  
> which would re-call shutdown….
>  
> The check:
> if (state == BusState.SHUTTING_DOWN)…
>  
> SHOULD prevent any problems with that, but you’d definitely  
> need to check to make sure. That said, it shouldn’t be hard check,  
> we do this type of thing in our system tests all over the place.  
>  
>  
> Dan
>  
>  
>  
>  
>  
> On Jan 20, 2014, at 7:43 AM, Willem Jiang  
> wrote:
>  
> > Hi,
> >
> > I was tracing a CXFBus leak issue recently.
> >
> > Here are the some details about the application bundle:
> >
> > It's Spring application context holds a camel context which  
> has a camel-cxf endpoint to receive the invocation from outside.  
> When the application bundle is uninstalled from Karaf, the SpringBus  
> doesn’t shutdown itself and CXFBusFactory doesn’t clean itself  
> up.
> >
> > If the application bundle is changed to use Blueprint to load  
> the same Camel context, we don’t find any Bus leak by dump the memory  
> of the JVM.
> >
> > I dig the SpringBus code and found it registers an ApplicationListener  
> which handles application context refresh and close event.  
> >
> > My patch is just replacing the 
> > getExtension(BusLifeCycleManager.class).postShutdown();  
> with bus shutdown().
> >
> > --- a/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBus.java  
> > +++ b/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBus.java  
> > @@ -21,7 +21,7 @@ package org.apache.cxf.bus.spring;
> >
> > import org.apache.cxf.bus.BusState;
> > import org.apache.cxf.bus.extension.ExtensionManagerBus;  
> > -import org.apache.cxf.buslifecycle.BusLifeCycleManager;  
> > import org.apache.cxf.configuration.ConfiguredBeanLocator;  
> > import org.apache.cxf.configuration.Configurer;
> > import org.apache.cxf.configuration.spring.ConfigurerImpl;  
> > @@ -110,7 +110,8 @@ public class SpringBus extends ExtensionManagerBus  
> > initialize();
> > }
> > } else if (event instanceof ContextClosedEvent) {
> > - getExtension(BusLifeCycleManager.class).postShutdown();  
> > + shutdown();
> > }
> > }
> > }
> >
> > Is there any thing that I'm missing?
> >
> > --
> > Willem Jiang
> >
> > Red Hat, Inc.
> > Web: http://www.redhat.com
> > Blog: http://willemjiang.blogspot.com(http://willemjiang.blogspot.com/)  
> (English)
> > http://jnn.iteye.com(http://jnn.javaeye.com/) (Chinese)  
> > Twitter: willemjiang
> > Weibo: 姜宁willem
> >
> >
> >
>  
> --
> Daniel Kulp
> [email protected] - http://dankulp.com/blog
> Talend Community Coder - http://coders.talend.com
>  
>  

Reply via email to