因为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操作的访问?
最佳答案
对于JAX-WS / Metro,绝对不是线程安全的。最好的选择是创建一个代理池,并在需要时从池中提取代理,对其进行配置,使用,清除设置值并返回到池。
或使用CXF。
关于web-services - JAX-WS客户端线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4385204/