Клиенты JAX-WS безопасны для потоков? - PullRequest
20 голосов
/ 08 декабря 2010

Поскольку инициализация клиентского порта 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 Ответ

14 голосов
/ 08 декабря 2010

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

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

...