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

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

Tammo,

thanks for the patch. I reviewed the code and here are my comments:

#1. the _axisServiceWatchDog is supposed to make sure the ServiceClient is 
updated if the service config file is updated. I think your patch breaks this 
in 2 places:
   a. the first time a CachedServiceClient is created, the config file is not 
applied (Cf. reconfigureService(null) ). 
   b. the ServiceFileObserver only updates the ServiceClient of the current 
thread while the associated WatchDog is shared by all threads. So let's say 
that thread t1 invokes _axisServiceWatchDog.check() and update its 
ServiceClient instance (ServiceFileObserver.onUpdate), thread t2 will not see 
the change for two potential reasons: WatchDog.check() actally checks the 
monitored resource only every 20 seconds and the service file has not changed 
since thread t1 checked.

So I think each CachedServiceClient should have its own WatchDog instance to 
monitor the service config file. 

#2 same thing for _axisOptionsWatchDog although the initialization is correct.

Alexis

> 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, ODE-647.patch, 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