【发布时间】:2017-06-13 15:04:41
【问题描述】:
我们的 Apache CXF 客户端存在内存问题,因为我们连接的服务需要 WSSE 安全性,因此端口对象不能在我们应用程序的不同客户端之间共享,因为它不是线程安全的。 所以我们使用 Apache Commons pool2 来汇集 x 个这些对象。 我们的 CXF 客户端连接到的服务返回一个非常大且复杂的 xml 对象,我们似乎使用 jProfiler 注意到的是 我们正在池化的端口对象仍然具有对返回的复杂响应对象的引用,这意味着当我们执行 GC 时内存没有被释放,当服务变得繁忙时,我们会看到内存问题。 首先这对于 CXF 来说是否正常,其次有没有办法告诉 CXF 不要挂在这些引用上并自行清理?
作为一个非常基本的示例,这是我们在应用程序启动时创建池后使用端口的方式
{
webServicesPT webServicesPT = clientPool.getPort(); // calls borrowObject()
try {
webServicesPT.service();
} finally {
clientPool.returnPort(webServicesPT); // calls returnObject()
}
}
任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: java apache web-services cxf