20

Como la inicialización del puerto del cliente WS es tan costosa, nos gustaría volver a utilizar la misma instancia. También nos gustaría establecer diferentes valores en el BindingProvider/RequestContext antes de cada llamada. Inicialmente nos gustaría hacer esto:¿Están seguros los clientes de JAX-WS?

MyService service = new MyService(wsdlURL, name); 
MyPort myPort = service .getMyServicePort(); 

luego más tarde, antes de cada llamada hacer esto:

Map requestContext = ((BindingProvider)myPort).getRequestContext(); 
requestContext.put(BindingProvider.USERNAME_PROPERTY, uName); 
requestContext.put(BindingProvider.PASSWORD_PROPERTY, pWord); 
myPort.someFunctionCall(); 

Mi pregunta es, ¿es este hilo código de seguridad? La documentación de JAX-WS parece indicar que es no hilo seguro. Sin embargo, CXF seems to be so if you take precautions. Si JAX-WS y Metro en particular no son seguros para subprocesos, ¿hay alguna manera de garantizar la seguridad del subproceso sin sincronizar el acceso a las operaciones de puerto o ws?

+0

Esto no está claro en las especificaciones. Verifique esto, por ejemplo: http: //community.jboss.org/message/526321 – Cratylus

Respuesta

14

Para JAX-WS/Metro, definitivamente no es seguro para subprocesos. La mejor opción es crear un grupo de proxies y, cuando sea necesario, extraer un proxy del grupo, configurarlo, usarlo, borrar los valores establecidos y volver al grupo.

O use CXF.

+2

Gracias Daniel, esa era mi sospecha también, pero ¿tiene alguna referencia oficial que lo confirme? –

+0

Parece una cosa vieja ... pero muy real para mí. @ Daniel, ¿a qué te refieres con limpiar los valores establecidos? Estoy interesado en esa causa, pregunté esto sin demasiado éxito: http: //stackoverflow.com/questions/6882528/weblogic-webservice-clients-clean-references – Cris

+0

Para JAX-WS/Metro definitivamente seguro para hilos desde hace mucho tiempo. – rustyx

Cuestiones relacionadas