0

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

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

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

希望有人可以对 OSGi 环境中的 HttpClient 使用有所了解。

4

2 回答 2

1

只是备注。您可能希望使用HttpClient OSGi 包提供的 HttpClientBuilderFactory。工厂分配的连接池将被 OSGi 容器自动关闭/释放。

于 2013-10-09T11:17:51.993 回答
0

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

于 2013-10-09T10:32:15.943 回答