generate generar from example create cliente java web-services multithreading thread-safety axis2

generar - wsdl to java axis2



¿Los stubs generados de Axis2 son seguros para las hebras? (3)

Estos talones son sin estado permitiendo la reutilización de las instancias del código auxiliar. ¿Puede por favor explicar el problema al que se enfrenta con Axis2? La gente suele recomendar Xfire sobre el eje.

¿Los stubs de cliente generados desde WSDL por Axis2 son seguros para subprocesos?

Por supuesto, "seguro para subprocesos" no es necesario un término definido rigurosamente, por lo que al menos estoy interesado en lo siguiente:

¿Se puede acceder simultáneamente a diferentes instancias de la misma clase de código auxiliar por diferentes subprocesos, con el mismo comportamiento efectivo que la ejecución de un solo subproceso?

¿Se puede acceder simultáneamente a una sola instancia de la misma clase de código auxiliar por diferentes subprocesos, con el mismo comportamiento efectivo que las mismas llamadas intercaladas de alguna manera arbitraria en la ejecución de un solo subproceso?

También puede utilizar la terminología que se describe here (y que se origina here ) para analizar esto de manera más precisa.


No estoy seguro acerca de axis2, pero al menos axis1 genera stubs de clientes que no son threadsafe. Tengo la impresión de que casi todos los demás clientes SOAP tampoco eran seguros para subprocesos. Si recuerdo correctamente, el problema era que la biblioteca de análisis XML estaba siendo utilizada de forma no segura para subprocesos por el código auxiliar del cliente.

Sin embargo, el uso de apache commons-pooling para agrupar las instancias y el uso de cada uno de un hilo a la vez funcionó bien.

Actualización: para Axis2, consulte https://issues.apache.org/jira/browse/AXIS2-4357 (las reclamaciones de Axis2 no son seguras para subprocesos, por diseño)


Supongo que intentaré responder a mi propia pregunta proporcionando alguna actualización sobre la investigación futura que hice. Parece que, de forma predeterminada, las versiones anteriores de los apéndices de Axis2 pueden haber sido solo "compatibles con subprocesos" (no se pueden realizar llamadas en la misma instancia de apéndice de forma simultánea desde varios subprocesos, pero las llamadas a diferentes instancias son correctas).

Ver por ejemplo:

http://markmail.org/message/3lu7x7pfo47vgnck http://markmail.org/message/sljyf6lpecxqllgx

Puede experimentar algunas fugas en los zócalos y quedarse sin sockets si no llama a cleanup / cleanupTransport, según este hilo y muchos otros relacionados:

http://issues.apache.org/jira/browse/AXIS2-3670

En algunos casos, al menos el HttpClient subyacente ahora parece ser seguro para subprocesos, pero dependiendo de cómo generó su cliente, el apéndice completo podría no ser:

http://amilachinthaka.blogspot.com/2009/05/improving-axis2-client-http-transport.html