Petals ESB Container

A suite of life cycle changes results in end-point leak

Details

  • Type: Bug Bug
  • Status: Resolved Resolved
  • Priority: Critical Critical
  • Resolution: Fixed
  • Affects Version/s: 3.1.1
  • Fix Version/s: 3.1.2, 4.0.0
  • Security Level: Public
  • Description:
    Hide

    In some cases, Petals can loose end-points and not be able to restore them.
    Here is a scenario:

    • Configure the EIP SE 2.5 with the attached properties files (it must be referenced as an URL in its jbi.xml file).
    • Install the EIP SE 2.5 nd the SOAP BC 4.0.4.
    • Install the attached SA.
    • Launch the Petals web console. Stop the SA and sutdown it.
    • Still in the console, stop the components and shutdown them.
    • Restart the components and the SA. Take a look at the list of end-points...


    The SA's end-points do not appear anymore.
    You can also try listing them with the Petals command line ("l" command).

    Show
    In some cases, Petals can loose end-points and not be able to restore them. Here is a scenario:
    • Configure the EIP SE 2.5 with the attached properties files (it must be referenced as an URL in its jbi.xml file).
    • Install the EIP SE 2.5 nd the SOAP BC 4.0.4.
    • Install the attached SA.
    • Launch the Petals web console. Stop the SA and sutdown it.
    • Still in the console, stop the components and shutdown them.
    • Restart the components and the SA. Take a look at the list of end-points...

    The SA's end-points do not appear anymore. You can also try listing them with the Petals command line ("l" command).
  • Environment:
    Windows 7
    java version "1.6.0_23"
    Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
    Java HotSpot(TM) 64-Bit Server VM (build 19.0-b09, mixed mode)
  1. test.properties
    (0.1 kB)
    Vincent Zurczak
    Tue, 7 Jun 2011 - 14:37:47 +0200
  2. TestEIP.zip
    (7 kB)
    Vincent Zurczak
    Tue, 7 Jun 2011 - 14:37:47 +0200
  3. TestWSESB.war
    (5 kB)
    Vincent Zurczak
    Tue, 7 Jun 2011 - 14:37:47 +0200

Activity

Hide
Christophe DENEUX added a comment - Wed, 8 Jun 2011 - 16:16:46 +0200

To merge in trunk

Show
Christophe DENEUX added a comment - Wed, 8 Jun 2011 - 16:16:46 +0200 To merge in trunk
Hide
Christophe DENEUX added a comment - Wed, 8 Jun 2011 - 16:15:05 +0200 - edited

Fixed in branch petals-entreprise-3.1.x

Unregistration of all endpoints has been moved from DeliveryChannelImpl.close() to Installer.doUninstall. So, if endpoints are remaining, they will be unregistered when uninstalling the component.

Show
Christophe DENEUX added a comment - Wed, 8 Jun 2011 - 16:15:05 +0200 - edited Fixed in branch petals-entreprise-3.1.x Unregistration of all endpoints has been moved from DeliveryChannelImpl.close() to Installer.doUninstall. So, if endpoints are remaining, they will be unregistered when uninstalling the component.
Hide
Christophe DENEUX added a comment - Wed, 8 Jun 2011 - 14:59:36 +0200

IMO, endpoints registered through a service unit MUST be only deregistered when undeploying the service unit.

Show
Christophe DENEUX added a comment - Wed, 8 Jun 2011 - 14:59:36 +0200 IMO, endpoints registered through a service unit MUST be only deregistered when undeploying the service unit.
Hide
Christophe DENEUX added a comment - Wed, 8 Jun 2011 - 14:55:44 +0200

Analysis:

  • Endpoint are deregistered when closing the delivery channel.
  • The delivery channel is closed when shut-downing the component.
Show
Christophe DENEUX added a comment - Wed, 8 Jun 2011 - 14:55:44 +0200 Analysis:
  • Endpoint are deregistered when closing the delivery channel.
  • The delivery channel is closed when shut-downing the component.
Hide
Christophe DENEUX added a comment - Wed, 8 Jun 2011 - 14:42:20 +0200

Using the petals-samples-client at each step to check the registered endpoint, we can see that the endpoint is deregister when shutdowning the SE EIP.

Moreover, undeploying the SA just after to have restart the component, we get the following error:

[Petals.Container.Components.petals-se-eip]-SEVERE 2011-06-08 14:38:29,224 Service unit 'su-EIP-taxesService-provide' failed to undeploy
org.ow2.petals.jbi.messaging.registry.RegistryException: Can not unregister not registered endpoint...
	at org.ow2.petals.jbi.messaging.registry.BaseEndpointRegistry.deactivateEndpoint(BaseEndpointRegistry.java:173)
	at org.objectweb.fractal.julia.generated.C2304ecde_0.deactivateEndpoint(INTERCEPTOR[EndpointRegistry])
	at org.objectweb.fractal.julia.generated.C2eb804c9_0.deactivateEndpoint(INTERFACE[EndpointRegistry])
	at org.ow2.petals.jbi.component.context.ComponentContextImpl.deactivateEndpoint(ComponentContextImpl.java:230)
	at org.ow2.petals.component.framework.su.AbstractServiceUnitManager.undeploy(AbstractServiceUnitManager.java:656)
	at org.ow2.petals.jbi.management.task.deployment.undeploy.UndeployAllSUsTask.undeploySU(UndeployAllSUsTask.java:142)
	at org.ow2.petals.jbi.management.task.deployment.undeploy.UndeployAllSUsTask.undeploySUS(UndeployAllSUsTask.java:99)
	at org.ow2.petals.jbi.management.task.deployment.undeploy.UndeployAllSUsTask.execute(UndeployAllSUsTask.java:70)
	at org.ow2.petals.jbi.management.TaskProcessor.process(TaskProcessor.java:78)
	at org.ow2.petals.jbi.management.deployment.DeploymentServiceImpl.undeploy(DeploymentServiceImpl.java:649)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:37)
	at sun.reflect.GeneratedMethodAccessor40.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:244)
	at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1074)
	at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:955)
	at mx4j.server.interceptor.InvokerMBeanServerInterceptor.invoke(InvokerMBeanServerInterceptor.java:221)
	at mx4j.server.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:120)
	at mx4j.server.interceptor.SecurityMBeanServerInterceptor.invoke(SecurityMBeanServerInterceptor.java:84)
	at mx4j.server.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:120)
	at mx4j.server.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:120)
	at mx4j.server.interceptor.ContextClassLoaderMBeanServerInterceptor.invoke(ContextClassLoaderMBeanServerInterceptor.java:203)
	at mx4j.server.MX4JMBeanServer.invoke(MX4JMBeanServer.java:1043)
	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1427)
	at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72)
	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1265)
	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1360)
	at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:788)
	at sun.reflect.GeneratedMethodAccessor85.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
Show
Christophe DENEUX added a comment - Wed, 8 Jun 2011 - 14:42:20 +0200 Using the petals-samples-client at each step to check the registered endpoint, we can see that the endpoint is deregister when shutdowning the SE EIP. Moreover, undeploying the SA just after to have restart the component, we get the following error:
[Petals.Container.Components.petals-se-eip]-SEVERE 2011-06-08 14:38:29,224 Service unit 'su-EIP-taxesService-provide' failed to undeploy
org.ow2.petals.jbi.messaging.registry.RegistryException: Can not unregister not registered endpoint...
	at org.ow2.petals.jbi.messaging.registry.BaseEndpointRegistry.deactivateEndpoint(BaseEndpointRegistry.java:173)
	at org.objectweb.fractal.julia.generated.C2304ecde_0.deactivateEndpoint(INTERCEPTOR[EndpointRegistry])
	at org.objectweb.fractal.julia.generated.C2eb804c9_0.deactivateEndpoint(INTERFACE[EndpointRegistry])
	at org.ow2.petals.jbi.component.context.ComponentContextImpl.deactivateEndpoint(ComponentContextImpl.java:230)
	at org.ow2.petals.component.framework.su.AbstractServiceUnitManager.undeploy(AbstractServiceUnitManager.java:656)
	at org.ow2.petals.jbi.management.task.deployment.undeploy.UndeployAllSUsTask.undeploySU(UndeployAllSUsTask.java:142)
	at org.ow2.petals.jbi.management.task.deployment.undeploy.UndeployAllSUsTask.undeploySUS(UndeployAllSUsTask.java:99)
	at org.ow2.petals.jbi.management.task.deployment.undeploy.UndeployAllSUsTask.execute(UndeployAllSUsTask.java:70)
	at org.ow2.petals.jbi.management.TaskProcessor.process(TaskProcessor.java:78)
	at org.ow2.petals.jbi.management.deployment.DeploymentServiceImpl.undeploy(DeploymentServiceImpl.java:649)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:37)
	at sun.reflect.GeneratedMethodAccessor40.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:244)
	at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1074)
	at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:955)
	at mx4j.server.interceptor.InvokerMBeanServerInterceptor.invoke(InvokerMBeanServerInterceptor.java:221)
	at mx4j.server.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:120)
	at mx4j.server.interceptor.SecurityMBeanServerInterceptor.invoke(SecurityMBeanServerInterceptor.java:84)
	at mx4j.server.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:120)
	at mx4j.server.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:120)
	at mx4j.server.interceptor.ContextClassLoaderMBeanServerInterceptor.invoke(ContextClassLoaderMBeanServerInterceptor.java:203)
	at mx4j.server.MX4JMBeanServer.invoke(MX4JMBeanServer.java:1043)
	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1427)
	at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72)
	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1265)
	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1360)
	at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:788)
	at sun.reflect.GeneratedMethodAccessor85.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

People

Dates

  • Created:
    Tue, 7 Jun 2011 - 14:36:36 +0200
    Updated:
    Tue, 13 Sep 2011 - 16:13:16 +0200
    Resolved:
    Tue, 13 Sep 2011 - 16:13:16 +0200