何时在OSGi中关闭HttpClient的ConnectionManager

时间:2013-10-09 08:43:34

标签: osgi apache-httpclient-4.x declarative-services

我有一个OSGi包,它通过DS,A和B使用两种服务。

B服务正在内部使用Apache的HttpClient。

我的问题是,什么时候应该关闭HttpClient的ConnectionManager,我试图在服务B的“unbind”方法中进行,但它不起作用因为调用unbind方法并不意味着实例被破坏所以同一个实例可以被重新绑定,因此我的后续请求会因ConnectionManager被关闭而失败。

希望有人能够为OSGi环境中的HttpClient使用带来一些启示。

2 个答案:

答案 0 :(得分:1)

请注意。您可能希望使用HttpClient OSGi包提供的HttpClientBuilderFactory。工厂分配的连接池将由OSGi容器自动关闭/取消分配。

答案 1 :(得分:0)

B本身是DS组件吗?如果是这样,您可以在B的停用方法调用期间进行清理。如果B不是DS组件,而是使用原始服务API注册的服务,则可以在注册服务时使用ServiceFactory。然后,当消费者发布服务时,将调用ServiceFactory.ungetService的实现,您可以在那里进行清理。