huhahapz 发表于 2015-8-5 08:54:17

一例apache xml-rpc错误

  
  一个外围应用的某个组件使用了xml-rpc与服务器交互,过一段时间就无法正常工作。
  看日志发现如下信息:


  
  
   2012-04-25 16:20:11,728 method:org.apache.commons.httpclient.SimpleHttpConnectionManager.getConnectionWithTimeout(SimpleHttpConnectionManager.java:204)

SimpleHttpConnectionManager being used incorrectly. Be sure that HttpMethod.releaseConnection() is always called and that only one thread and/or method is using this connection manager at a time.  看了xml-rpc的源码发现:
  如果使用XmlRpcCommonsTransportFactory做“传输工厂”,底层使用的是commons-httpclient,而这个类在创建httpclient对象的时候,默认使用simpleHttpConnectionManager作为连接管理,而它不适合多线程环境。故修正方法是:自己创建httpclient对象,并指定适合多线程环境的连接管理器。
  代码如下:

//创建一个传输工厂
XmlRpcCommonsTransportFactory factory = new XmlRpcCommonsTransportFactory(client);
HttpClient httpClient = new HttpClient(new MultiThreadedHttpConnectionManager());  factory.setHttpClient(httpClient);

  


通过 Wiz 发布  
页: [1]
查看完整版本: 一例apache xml-rpc错误