首页 > 解决方案 > 如何修复非线程安全的延迟初始化 CXF 客户端工厂?

问题描述

我有一个(外部)工厂类,它以非线程安全的方式延迟初始化 CXF 客户端。
(如果调用太快,它可能会实例化客户端两次或更多次。)

该类有一个受保护的方法来进行初始化。它在第一个请求上调用该方法。

我应该绕过工厂创建自己的客户端吗?
以某种方式通过在单个线程上发送一个请求/调用受保护的方法来使类初始化客户端?

或者在前几个请求中发生这种情况时忽略它是否安全?

标签: javaconcurrencycxflazy-initializationcxf-client

解决方案


如果您想确保初始化以安全的方式发生,您可以使用对受保护方法的反射访问从您自己的代码中调用 setup 方法。

我会与库的提供者交谈,以记录初始化的正确和保存方式。您描述的行为对我来说看起来像是工厂/库的错误。


推荐阅读