首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >web服务中客户端的CXF总线-内存泄漏

web服务中客户端的CXF总线-内存泄漏
EN

Stack Overflow用户
提问于 2014-11-17 14:02:56
回答 1查看 1.5K关注 0票数 1

我有一个JAX服务,需要调用另一个带有CXF客户端的JAX服务。因为这个客户端需要更多的WS-*特性,比如WS-Trust,所以我创建了一个新的CXF总线。

代码语言:javascript
复制
private void startupBus() 
{
    // if the bus is already active, shut it down to pick up any endpoint changes
    if (bus != null) {
        bus.shutdown(false);
    }

    bus = BusFactory.newInstance().createBus();

    // Add logging interceptors to log messages to and from the services it calls
    ...
    inBusLog.setPrettyLogging(true);
    outBusLog.setPrettyLogging(true);
    bus.getInInterceptors().add(inBusLog);
    bus.getOutInterceptors().add(outBusLog);
    bus.getInFaultInterceptors().add(inBusLog);
    bus.getOutFaultInterceptors().add(outBusLog);

    BusFactory.setThreadDefaultBus(bus);

    ...//create service proxy with this bus, setup STS client parameters, etc
}

我的总线和我的服务代理都是静态实例,而且由于我想在外部修改参数,这个方法每天都会重新运行一次。

但是,当这个服务持续运行几天时,我看到内存泄漏了。它相对比较慢,所以我无法确定它是与我的总线/代理旋转逻辑有关,还是与其他地方有关。

是否需要在代理(如java.io.Closable.close )上进行任何额外的清理?还是我没有正确配置/管理我的CXF总线实例?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 05:38:39

也许它对未来的https://docs.jboss.org/author/display/JBWS/Apache+CXF+integration#ApacheCXFintegration-BusselectionstrategiesforJAXWSclients是有用的

代码语言:javascript
复制
try {
  Service service = Service.create(wsdlURL, serviceQName);
  MyEndpoint port = service.getPort(MyEndpoint.class);
  //...
} finally {
  BusFactory.setThreadDefaultBus(null);
  // OR (if you don't need the bus and the client anymore)
  Bus bus = BusFactory.getThreadDefaultBus(false);
 bus.shutdown(true);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26974405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档