JAX-WS客户端是否安全?

时间:2010-12-08 07:42:52

标签: web-services jax-ws java-metro-framework webservices-client

由于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 seems to be so if you take precautions。如果JAX-WS和Metro特别不是线程安全的,有没有办法确保线程安全而不同步访问端口或ws操作?

1 个答案:

答案 0 :(得分:14)

对于JAX-WS / Metro,这绝对不是线程安全的。最好的办法是创建一个代理池,并在需要时从池中提取代理,配置它,使用它,清除设置值,返回池。

或使用CXF。