Java 相当于HttpClient 4.x中的多线程HttpConnectionManager.shutdownAll()

Java 相当于HttpClient 4.x中的多线程HttpConnectionManager.shutdownAll(),java,apache-httpclient-4.x,apache-commons-httpclient,Java,Apache Httpclient 4.x,Apache Commons Httpclient,对于HttpClient3.x,有一个静态的多线程HttpConnectionManager.shutdownAll(),我们从ServletContextListener#contextDestroyed()调用它来清理所有可能挂起的线程(防止类加载器泄漏) 对于HttpClient4.x,这一功能已经消失,但是有了poolgclientconnectionmanager。但是,它没有关闭连接的静态方法 如何做到这一点?将此方法包含在HC 3.1中是一个错误。一般来说,我看不出每个不同的HTT

对于
HttpClient
3.x,有一个静态的
多线程HttpConnectionManager.shutdownAll()
,我们从
ServletContextListener#contextDestroyed()
调用它来清理所有可能挂起的线程(防止类加载器泄漏)

对于
HttpClient
4.x,这一功能已经消失,但是有了
poolgclientconnectionmanager
。但是,它没有关闭连接的静态方法


如何做到这一点?

将此方法包含在HC 3.1中是一个错误。一般来说,我看不出每个不同的HTTP服务有超过一个连接池的理由。跟踪一两个连接管理器并在必要时关闭它们应该不会那么困难。话虽如此,无论出于何种原因,如果您确实需要不加区别地关闭所有活动连接管理器,那么在OSGi容器中运行时,您可以使用HC在版本4.3-beta2中使用的相同技术:基本上跟踪由自定义HttpClientBuilder创建的HttpClient实例,并在容器关闭时关闭它们或者重新加载包


将该方法纳入HC 3.1是一个错误。一般来说,我看不出每个不同的HTTP服务有超过一个连接池的理由。跟踪一两个连接管理器并在必要时关闭它们应该不会那么困难。话虽如此,无论出于何种原因,如果您确实需要不加区别地关闭所有活动连接管理器,那么在OSGi容器中运行时,您可以使用HC在版本4.3-beta2中使用的相同技术:基本上跟踪由自定义HttpClientBuilder创建的HttpClient实例,并在容器关闭时关闭它们或者重新加载包


我移植到HC 4的代码已经有几年的历史了,我已经两年多没有被分配到这个项目中了。我相信在我们的关机侦听器中包含了这一点,因为Tomcat抱怨说,如果我们不这样做,类加载器就会泄漏。问题是,我可以很好地跟踪代码打开的连接,但不能跟踪使用HC的第三方LIB中的连接。@Marcel:如果第三方库不提供清理其分配的资源的方法,这很难说是HC的错。您主要关心的应该是确保代码的正确行为。然而,我的主要观点是,一个人应该很少需要一个以上的连接池。没错,但我希望我的评论不会暗示这是HC的错。尽管如此,有一种方法确保糟糕的第三方LIB不会影响我代码的稳定性还是很好的。我移植到HC 4的代码已经有几年的历史了,我已经两年多没有被分配到这个项目中了。我相信在我们的关机侦听器中包含了这一点,因为Tomcat抱怨说,如果我们不这样做,类加载器就会泄漏。问题是,我可以很好地跟踪代码打开的连接,但不能跟踪使用HC的第三方LIB中的连接。@Marcel:如果第三方库不提供清理其分配的资源的方法,这很难说是HC的错。您主要关心的应该是确保代码的正确行为。然而,我的主要观点是,一个人应该很少需要一个以上的连接池。没错,但我希望我的评论不会暗示这是HC的错。尽管如此,有办法确保糟糕的第三方LIB不会影响代码的稳定性还是很好的。