[
https://issues.apache.org/jira/browse/CXF-3773?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Aki Yoshida resolved CXF-3773.
------------------------------
Resolution: Fixed
Fix Version/s: 2.5
2.4.3
> CXF unregisters MBeans for JAX-WS endpoints twice
> -------------------------------------------------
>
> Key: CXF-3773
> URL: https://issues.apache.org/jira/browse/CXF-3773
> Project: CXF
> Issue Type: Bug
> Components: JAX-WS Runtime
> Affects Versions: 2.4.2
> Environment: Tomcat 6.0.33 / Spring 3.0.[56] / Java 1.[67]
> Reporter: Dominik Drzewiecki
> Assignee: Aki Yoshida
> Fix For: 2.4.3, 2.5
>
>
> MBeans created for JAX-WS endpoints do get unregistered twice during context
> shutdown.
> I've placed a breakpoint in
> {{org.apache.cxf.management.jmx.InstrumentationManagerImpl.unregister(ObjectName)}}
> and caught following stacks when reaching it. The first line shows the
> ObjectName being unregistered.
> You may notice that the first three stacks are observed during the {{CXFBus}}
> shutdown, and the fourth one during {{JAXWS22SpringEndpointImpl}}.
> The last invocation of
> {{org.apache.cxf.management.jmx.InstrumentationManagerImpl.unregister(ObjectName)}}
> results in {{javax.management.InstanceNotFoundException}} being thrown (the
> full message is {{"WARNING: Unregistering ManagedEndpoint failed.
> javax.management.InstanceNotFoundException:
> org.apache.cxf:bus.id=cxf52615653,type=Bus.Service.Endpoint,service="{http://ws.xxx.xxxxx.com/}Service",port="ServicePort"}})
> which prevents from shutting down the endpoint bean, spring context and web
> application context cleanly.
> {noformat}
> org.apache.cxf:bus.id=cxf52615653,type=Bus.Service.Endpoint,service="{http://ws.xxx.xxxxxx.com/}Service",port="ServicePort"
> Thread [main] (Suspended (entry into method unregister in
> InstrumentationManagerImpl))
> InstrumentationManagerImpl.unregister(ObjectName) line: 229
> InstrumentationManagerImpl.unregister(ManagedComponent) line: 225
> ServerImpl.destroy() line: 180
> ServerRegistryImpl.preShutdown() line: 88
> CXFBusLifeCycleManager.preShutdown() line: 84
> CXFBusLifeCycleManager.postShutdown() line: 91
> SpringBus.onApplicationEvent(ApplicationEvent) line: 94
> SimpleApplicationEventMulticaster.multicastEvent(ApplicationEvent)
> line: 97
>
> XmlWebApplicationContext(AbstractApplicationContext).publishEvent(ApplicationEvent)
> line: 303
> XmlWebApplicationContext(AbstractApplicationContext).doClose() line:
> 1007
> XmlWebApplicationContext(AbstractApplicationContext).close() line: 970
>
> ContextLoaderListener(ContextLoader).closeWebApplicationContext(ServletContext)
> line: 384
> ContextLoaderListener.contextDestroyed(ServletContextEvent) line: 78
> StandardContext.listenerStop() line: 4245
> StandardContext.stop() line: 4886
> StandardHost(ContainerBase).stop() line: 1110
> StandardEngine(ContainerBase).stop() line: 1110
> StandardEngine.stop() line: 468
> StandardService.stop() line: 604
> StandardServer.stop() line: 788
> Catalina.stop() line: 662
> Catalina.start() line: 629
> NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
> available [native method]
> NativeMethodAccessorImpl.invoke(Object, Object[]) line: 57
> DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
> Method.invoke(Object, Object...) line: 601
> Bootstrap.start() line: 289
> Bootstrap.main(String[]) line: 414
> {noformat}
> {noformat}
> org.apache.cxf:bus.id=cxf52615653,type=Bus.Service.Endpoint,service="{http://ws.xxx.xxxxx.com/}Service",port="Service"
> Thread [main] (Suspended (entry into method unregister in
> InstrumentationManagerImpl))
> InstrumentationManagerImpl.unregister(ObjectName) line: 229
> InstrumentationManagerImpl.unregister(ManagedComponent) line: 225
> ServerImpl.destroy() line: 180
> ServerRegistryImpl.preShutdown() line: 88
> CXFBusLifeCycleManager.preShutdown() line: 84
> CXFBusLifeCycleManager.postShutdown() line: 91
> SpringBus.onApplicationEvent(ApplicationEvent) line: 94
> SimpleApplicationEventMulticaster.multicastEvent(ApplicationEvent)
> line: 97
>
> XmlWebApplicationContext(AbstractApplicationContext).publishEvent(ApplicationEvent)
> line: 303
> XmlWebApplicationContext(AbstractApplicationContext).doClose() line:
> 1007
> XmlWebApplicationContext(AbstractApplicationContext).close() line: 970
>
> ContextLoaderListener(ContextLoader).closeWebApplicationContext(ServletContext)
> line: 384
> ContextLoaderListener.contextDestroyed(ServletContextEvent) line: 78
> StandardContext.listenerStop() line: 4245
> StandardContext.stop() line: 4886
> StandardHost(ContainerBase).stop() line: 1110
> StandardEngine(ContainerBase).stop() line: 1110
> StandardEngine.stop() line: 468
> StandardService.stop() line: 604
> StandardServer.stop() line: 788
> Catalina.stop() line: 662
> Catalina.start() line: 629
> NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
> available [native method]
> NativeMethodAccessorImpl.invoke(Object, Object[]) line: 57
> DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
> Method.invoke(Object, Object...) line: 601
> Bootstrap.start() line: 289
> Bootstrap.main(String[]) line: 414
> {noformat}
> {noformat}
> org.apache.cxf:bus.id=cxf52615653,type=Bus
> Thread [main] (Suspended (entry into method unregister in
> InstrumentationManagerImpl))
> InstrumentationManagerImpl.unregister(ObjectName) line: 229
> InstrumentationManagerImpl.shutdown() line: 263
> InstrumentationManagerImpl.postShutdown() line: 279
> CXFBusLifeCycleManager.postShutdown() line: 97
> SpringBus.onApplicationEvent(ApplicationEvent) line: 94
> SimpleApplicationEventMulticaster.multicastEvent(ApplicationEvent)
> line: 97
>
> XmlWebApplicationContext(AbstractApplicationContext).publishEvent(ApplicationEvent)
> line: 303
> XmlWebApplicationContext(AbstractApplicationContext).doClose() line:
> 1007
> XmlWebApplicationContext(AbstractApplicationContext).close() line: 970
>
> ContextLoaderListener(ContextLoader).closeWebApplicationContext(ServletContext)
> line: 384
> ContextLoaderListener.contextDestroyed(ServletContextEvent) line: 78
> StandardContext.listenerStop() line: 4245
> StandardContext.stop() line: 4886
> StandardHost(ContainerBase).stop() line: 1110
> StandardEngine(ContainerBase).stop() line: 1110
> StandardEngine.stop() line: 468
> StandardService.stop() line: 604
> StandardServer.stop() line: 788
> Catalina.stop() line: 662
> Catalina.start() line: 629
> NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
> available [native method]
> NativeMethodAccessorImpl.invoke(Object, Object[]) line: 57
> DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
> Method.invoke(Object, Object...) line: 601
> Bootstrap.start() line: 289
> Bootstrap.main(String[]) line: 414
> {noformat}
> {noformat}
> org.apache.cxf:bus.id=cxf52615653,type=Bus.Service.Endpoint,service="{http://ws.xxx.xxxxx.com/}Service",port="ServicePort"
> Thread [main] (Suspended (entry into method unregister in
> InstrumentationManagerImpl))
> InstrumentationManagerImpl.unregister(ObjectName) line: 229
> InstrumentationManagerImpl.unregister(ManagedComponent) line: 225
> ServerImpl.destroy() line: 180
> JAXWS22SpringEndpointImpl(EndpointImpl).stop() line: 263
> NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
> available [native method]
> NativeMethodAccessorImpl.invoke(Object, Object[]) line: 57
> DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
> Method.invoke(Object, Object...) line: 601
> DisposableBeanAdapter.invokeCustomDestroyMethod(Method) line: 273
> DisposableBeanAdapter.destroy() line: 199
>
> DefaultListableBeanFactory(DefaultSingletonBeanRegistry).destroyBean(String,
> DisposableBean) line: 487
>
> DefaultListableBeanFactory(DefaultSingletonBeanRegistry).destroySingleton(String)
> line: 463
>
> DefaultListableBeanFactory(DefaultSingletonBeanRegistry).destroySingletons()
> line: 431
> XmlWebApplicationContext(AbstractApplicationContext).destroyBeans()
> line: 1048
> XmlWebApplicationContext(AbstractApplicationContext).doClose() line:
> 1022
> XmlWebApplicationContext(AbstractApplicationContext).close() line: 970
>
> ContextLoaderListener(ContextLoader).closeWebApplicationContext(ServletContext)
> line: 384
> ContextLoaderListener.contextDestroyed(ServletContextEvent) line: 78
> StandardContext.listenerStop() line: 4245
> StandardContext.stop() line: 4886
> StandardHost(ContainerBase).stop() line: 1110
> StandardEngine(ContainerBase).stop() line: 1110
> StandardEngine.stop() line: 468
> StandardService.stop() line: 604
> StandardServer.stop() line: 788
> Catalina.stop() line: 662
> Catalina.start() line: 629
> NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
> available [native method]
> NativeMethodAccessorImpl.invoke(Object, Object[]) line: 57
> DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
> Method.invoke(Object, Object...) line: 601
> Bootstrap.start() line: 289
> Bootstrap.main(String[]) line: 414
> {noformat}
> For the completness, my spring context is as simple as:
> {code:xml}
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
> http://www.springframework.org/schema/context
> http://www.springframework.org/schema/context/spring-context-3.0.xsd
> http://cxf.apache.org/jaxws
> http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/core
> http://cxf.apache.org/schemas/core.xsd
> http://cxf.apache.org/jaxrs
> http://cxf.apache.org/schemas/jaxrs.xsd"
> xmlns:context="http://www.springframework.org/schema/context"
> xmlns:jaxws="http://cxf.apache.org/jaxws"
> xmlns:jaxrs="http://cxf.apache.org/jaxrs"
> xmlns:cxf="http://cxf.apache.org/core">
> <import resource="classpath:META-INF/cxf/cxf.xml" />
> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
> <cxf:bus />
> <bean id="instrumentationManager"
>
> class="org.apache.cxf.management.jmx.InstrumentationManagerImpl" >
> <property name="bus" ref="cxf" />
> <property name="enabled" value="true" />
> <property name="usePlatformMBeanServer" value="true" />
> </bean>
> <bean id="counterRepository"
> class="org.apache.cxf.management.counters.CounterRepository" >
> <property name="bus" ref="cxf" />
> </bean>
> <jaxws:endpoint id="webService" implementor="#service"
> address="${web.ws.uri}" />
> </beans>
> {code}
> While the class and the interface exposed as a service looks somewhat like
> this:
> {code}
> @WebService(endpointInterface="com.xxxxx.xxx.ws.IService",
> serviceName="Service" )
> @Component("service")
> public class Service implements IService {
> // implementation here
> }
> {code}
> {code}
> @WebService
> public interface IService {
> @WebResult(name = "status")
> @WebMethod(operationName = "send")
> public boolean send(@WebParam(name = "message") SomeMessage message)
> throws SomeException;
> @Oneway
> @WebMethod(operationName = "doSend")
> public void doSend(@WebParam(name = "message") SomeMessage message)
> throws SomeException;
> }
> {code}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira