Безопасны ли клиенты JAX-WS?

Поскольку инициализация порта клиентской стороны WS настолько дорогостоящая, мы хотели бы повторно использовать один и тот же экземпляр. Мы также хотели бы установить разные значения в BindingProvider/RequestContext перед каждым вызовом. Первоначально мы хотели бы сделать это:

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

а затем, перед каждым вызовом сделайте следующее:

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

Мой вопрос: безопасен ли этот код? Документация JAX-WS, по-видимому, указывает, что она не потокобезопасна. Однако CXF выглядит так, если вы принимаете меры предосторожности. Если JAX-WS и Metro, в частности, не являются потокобезопасными, существует ли способ обеспечения безопасности потоков без синхронизации доступа к портам или операциям ws

Ответ 1

Для JAX-WS/Metro это определенно не является потокобезопасным. Лучше всего создать пул прокси-серверов и, при необходимости, вытащить прокси из пула, настроить его, использовать, очистить заданные значения, вернуться в пул.

Или используйте CXF.