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 操作へのアクセスを同期せずにスレッドセーフを確保する方法はありますか?