cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dominik Drzewiecki (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CXF-3773) CXF unregisters MBeans for JAX-WS endpoints twice
Date Mon, 29 Aug 2011 08:59:40 GMT
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


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

        

Mime
View raw message