You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by "Scott Kurz (JIRA)" <de...@tuscany.apache.org> on 2010/08/03 16:32:16 UTC

[jira] Created: (TUSCANY-3643) binding-ws-axis2 should use Axis2 ServiceClient in thread-safe manner

binding-ws-axis2 should use Axis2 ServiceClient in thread-safe manner
---------------------------------------------------------------------

                 Key: TUSCANY-3643
                 URL: https://issues.apache.org/jira/browse/TUSCANY-3643
             Project: Tuscany
          Issue Type: Bug
    Affects Versions: Java-SCA-2.0-M5, Java-SCA-1.6
            Reporter: Scott Kurz
            Priority: Minor


In running a version of our 1.x code (the exact version doesn't so much matter since the problem has existed for awhile), against the Axis2 trunk running multiple threads at once, I hit the problem:

java.lang.NullPointerException
	at org.apache.axis2.client.ServiceClient.cleanupTransport(ServiceClient.java:860)
	at org.apache.axis2.client.ServiceClient.createClient(ServiceClient.java:665)
	at org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.createOperationClient(..)
	at org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invokeTarget(...)
	at org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invoke(....)

It seems Axis2 has introduced a new "autoOperationCleanup" function.   

So one solution would be to disable this.  However, it seems from discussions such as this:

  http://www.mail-archive.com/axis-dev@ws.apache.org/msg48406.html

that a better solution would be to stop using a single Axis2 ServiceClient across threads, since apparently these are not intended to be thread-safe.    So it seems we should switch from using an instance variable to a local variable to hold these refs.



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


Re: [jira] Created: (TUSCANY-3643) binding-ws-axis2 should use Axis2 ServiceClient in thread-safe manner

Posted by Simon Nash <na...@apache.org>.
Scott Kurz (JIRA) wrote:
> binding-ws-axis2 should use Axis2 ServiceClient in thread-safe manner
> ---------------------------------------------------------------------
> 
>                  Key: TUSCANY-3643
>                  URL: https://issues.apache.org/jira/browse/TUSCANY-3643
>              Project: Tuscany
>           Issue Type: Bug
>     Affects Versions: Java-SCA-2.0-M5, Java-SCA-1.6
>             Reporter: Scott Kurz
>             Priority: Minor
> 
> 
> In running a version of our 1.x code (the exact version doesn't so much matter since the problem has existed for awhile), against the Axis2 trunk running multiple threads at once, I hit the problem:
> 
> java.lang.NullPointerException
> 	at org.apache.axis2.client.ServiceClient.cleanupTransport(ServiceClient.java:860)
> 	at org.apache.axis2.client.ServiceClient.createClient(ServiceClient.java:665)
> 	at org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.createOperationClient(..)
> 	at org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invokeTarget(...)
> 	at org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invoke(....)
> 
> It seems Axis2 has introduced a new "autoOperationCleanup" function.   
> 
> So one solution would be to disable this.  However, it seems from discussions such as this:
> 
>   http://www.mail-archive.com/axis-dev@ws.apache.org/msg48406.html
> 
> that a better solution would be to stop using a single Axis2 ServiceClient across threads, since apparently these are not intended to be thread-safe.    So it seems we should switch from using an instance variable to a local variable to hold these refs.
> 
Creating a new instance of ServiceClient for every request could add
a fair bit of overhead to the request path in the simple common case
where only a single thread is being used.

Another approach would be to use a pooling/caching approach where the
existing ServiceClient could be reused if there's no contention between
threads, and a new ServiceClient could be created if there is contention.
There's some code like this near the end of RuntimeWireImpl (look for
wireReserved and cachedWire).

   Simon


[jira] Commented: (TUSCANY-3643) binding-ws-axis2 should use Axis2 ServiceClient in thread-safe manner

Posted by "Simon Nash (JIRA)" <de...@tuscany.apache.org>.
    [ https://issues.apache.org/jira/browse/TUSCANY-3643?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12897223#action_12897223 ] 

Simon Nash commented on TUSCANY-3643:
-------------------------------------

I sent the following by email but didn't get any responses so I am adding it here for future reference.

Creating a new instance of ServiceClient for every request could add a fair bit of overhead to the request path in the simple common case where only a single thread is being used.

Another approach would be to use a pooling/caching approach where the existing ServiceClient could be reused if there's no contention between threads, and a new ServiceClient could be created if there is contention. There's some code like this near the end of RuntimeWireImpl (look for wireReserved and cachedWire).


> binding-ws-axis2 should use Axis2 ServiceClient in thread-safe manner
> ---------------------------------------------------------------------
>
>                 Key: TUSCANY-3643
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-3643
>             Project: Tuscany
>          Issue Type: Bug
>    Affects Versions: Java-SCA-1.6, Java-SCA-2.0-M5
>            Reporter: Scott Kurz
>            Priority: Minor
>
> In running a version of our 1.x code (the exact version doesn't so much matter since the problem has existed for awhile), against the Axis2 trunk running multiple threads at once, I hit the problem:
> java.lang.NullPointerException
> 	at org.apache.axis2.client.ServiceClient.cleanupTransport(ServiceClient.java:860)
> 	at org.apache.axis2.client.ServiceClient.createClient(ServiceClient.java:665)
> 	at org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.createOperationClient(..)
> 	at org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invokeTarget(...)
> 	at org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invoke(....)
> It seems Axis2 has introduced a new "autoOperationCleanup" function.   
> So one solution would be to disable this.  However, it seems from discussions such as this:
>   http://www.mail-archive.com/axis-dev@ws.apache.org/msg48406.html
> that a better solution would be to stop using a single Axis2 ServiceClient across threads, since apparently these are not intended to be thread-safe.    So it seems we should switch from using an instance variable to a local variable to hold these refs.

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