一例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]