Da die Initialisierung des WS-Client-Side-Ports so kostspielig ist, möchten wir dieselbe Instanz wiederverwenden. Wir möchten auch vor jedem Aufruf unterschiedliche Werte im BindingProvider/RequestContext setzen. Zunächst möchten wir dies tun:Sind JAX-WS-Clients Thread-sicher?
MyService service = new MyService(wsdlURL, name);
MyPort myPort = service .getMyServicePort();
dann später vor jedem Anruf dies tun:
Map requestContext = ((BindingProvider)myPort).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, uName);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, pWord);
myPort.someFunctionCall();
Meine Frage ist, ist dieser Code Thread-sicher? JAX-WS-Dokumentation scheint darauf hinzuweisen, dass es nicht Thread-sicher ist. Jedoch, CXF seems to be so if you take precautions. Wenn insbesondere JAX-WS und Metro nicht Thread-sicher sind, gibt es irgendeine Möglichkeit, Thread-Sicherheit zu gewährleisten, ohne den Zugriff auf Port- oder WS-Operationen zu synchronisieren?
Dies ist nicht klar aus den Spezifikationen. Überprüfen Sie dies zum Beispiel: http: //community.jboss.org/message/526321 – Cratylus