[ 
https://issues.apache.org/jira/browse/ODE-647?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12788820#action_12788820
 ] 

Alexis Midon commented on ODE-647:
----------------------------------

I checked the axis2 code as well and noticed the same pitfall. However the leak 
can be avoided if we make sure the AxisService is properly removed from 
AxisConfig when an AxisService instance is re-created. This happens in 
org.apache.ode.axis2.SoapExternalService.ServiceFileObserver#init when the the 
service config file is updated. At that time, we would have to remove the 
service instance from the AxisConfig without disturbing any current invocations.
In the current implementation, this is done when invoking ServiceClient#cleanUp.

With the solution a., I think each thread should have a service instance and a 
service client. On each invocation, the thread will check if the service config 
has changed. If so, the existing ServiceClient should be cleanUp (which removes 
the service instance from the axis config), then a new service instance (with a 
unique name) and a new ServiceClient would be created. 
In that case, I don't see any synchronization issue.

I like a. better of course, much more optimized than d. 

> Multiple consecutive invocations to a service might  incur an axis2.AxisFault 
> of  "two services cannot have same name".
> -----------------------------------------------------------------------------------------------------------------------
>
>                 Key: ODE-647
>                 URL: https://issues.apache.org/jira/browse/ODE-647
>             Project: ODE
>          Issue Type: Bug
>    Affects Versions: 1.3.3
>         Environment: ODE1.3.3, Tomcat 5.5.9, Sun JVM 1.5, Windows XP SP3
>            Reporter: Wenfeng Zhao
>            Assignee: Alexis Midon
>            Priority: Critical
>             Fix For: 1.3.4
>
>         Attachments: ODE-647-outputs.txt, ODE647.zip
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> Although version 1.3.2 and 2.0 are OK,   with ODE 1.3.3, it seems that 
> multiple consecutive invocations to a same component service might incur the 
> following exception:
> ERROR - GeronimoLog.error(108) | Error sending message to Axis2 for ODE mex 
> {PartnerRoleMex#hqejbhcnphr4i3dscxlf10 [PID 
> {http://scqr.bupt.edu.cn/solution}process_SyntheticBookService_sol2-12] 
> calling null.operation1(...)}
> org.apache.axis2.AxisFault: Two services cannot have same name.  A service 
> with the 
> axis_service_for_{http://example.org/writerInfo}writerInfoService#writerInfoPort_hqejbhcnphr4i3dscxlf0r
>  name already exists in the system.
>       at 
> org.apache.axis2.client.ServiceClient.configureServiceClient(ServiceClient.java:172)
>       at org.apache.axis2.client.ServiceClient.<init>(ServiceClient.java:139)
>       at 
> org.apache.ode.axis2.SoapExternalService.getServiceClient(SoapExternalService.java:281)
>       at 
> org.apache.ode.axis2.SoapExternalService.invoke(SoapExternalService.java:140)
>       at 
> org.apache.ode.axis2.MessageExchangeContextImpl.invokePartner(MessageExchangeContextImpl.java:52)
>       at 
> org.apache.ode.bpel.engine.BpelRuntimeContextImpl.invoke(BpelRuntimeContextImpl.java:781)
>       at org.apache.ode.bpel.runtime.INVOKE.run(INVOKE.java:100)
>       at sun.reflect.GeneratedMethodAccessor58.invoke(Unknown Source)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:585)
>       at 
> org.apache.ode.jacob.vpu.JacobVPU$JacobThreadImpl.run(JacobVPU.java:451)
>       at org.apache.ode.jacob.vpu.JacobVPU.execute(JacobVPU.java:139)
>       at 
> org.apache.ode.bpel.engine.BpelRuntimeContextImpl.execute(BpelRuntimeContextImpl.java:875)
>       at 
> org.apache.ode.bpel.engine.BpelProcess.handleWorkEvent(BpelProcess.java:438)
>       at 
> org.apache.ode.bpel.engine.BpelEngineImpl.onScheduledJob(BpelEngineImpl.java:439)
>       at 
> org.apache.ode.bpel.engine.BpelServerImpl.onScheduledJob(BpelServerImpl.java:441)
>       at 
> org.apache.ode.scheduler.simple.SimpleScheduler$4$1.call(SimpleScheduler.java:411)
>       at 
> org.apache.ode.scheduler.simple.SimpleScheduler$4$1.call(SimpleScheduler.java:405)
>       at 
> org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:218)
>       at 
> org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:404)
>       at 
> org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:401)
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:123)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>       at java.lang.Thread.run(Thread.java:595)
> And I noted that a similar problem has been discussed in 2007( 
> https://issues.apache.org/jira/browse/AXIS2-1182?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12476874
>  ).  But I'm not clear whether there are relations between the two problems.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to