由于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操作?