7

我正在使用 CXF 生成 SOAP 客户端类。在CXF 文档中,他们写道

JAX-WS 客户端代理线程安全吗?

官方 JAX-WS 回答:不。根据 JAX-WS 规范,客户端代理不是线程安全的。要编写可移植代码,您应该将它们视为非线程安全的并同步访问或使用实例池或类似的。

CXF 回答:CXF 代理对于许多用例来说都是线程安全的。例外情况是:

(我省略了他们对这些用例的描述)

对于大多数“简单”用例,您可以在多个线程上使用 CXF 代理。以上概述了其他人的解决方法。

有没有人有相反的经历?遇到了常见问题解答中未描述的多线程问题?或者它们的描述是否准确并且它们基本上可以安全使用?

4

2 回答 2

6

我们最近在我们的项目中遇到了类似的讨论。如您所指的常见问题解答中所述,除了动态修改 HTTP 管道的功能(例如:会话管理和故障转移功能),CXF 客户端代理是线程安全的。因此,如果您不使用这些功能,则可以在线程之间共享客户端代理。

于 2012-10-31T11:24:27.317 回答
1

您可能指的是运行时,但我不认为配置时间是线程安全的。我相信我在 JettyHTTPServerEngineFactory 中看到了竞争条件。

在测试工具中,我们启动了多个不相关的 SOAP 服务器,当它们共享总线时,如果多个线程同时尝试添加 JettyHTTPServerEngine 实例,则可能会出现竞争条件。具体的竞争条件在 setTLSServerParametersForPort() 中,当您想对端口使用 HTTPS 时调用它。该方法将元素添加到没有锁定的 HashMap 中。

我猜其他人没有遇到这种情况的原因是大多数人通过配置文件配置CXF,并且在一个进程中很少有多个端口/ Jetty 服务器。

于 2014-08-01T16:27:06.327 回答