[
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.