0

DS A と B を介して 2 つのサービスを使用する OSGi バンドルがあります。

B サービスは内部で Apache の HttpClient を使用しています。

私の質問は、いつ HttpClient の ConnectionManager をシャットダウンする必要があるかということです。サービス B の「バインド解除」メソッド内でそれを実行しようとしましたが、バインド解除メソッドが呼び出されてもインスタンスが破棄されるわけではないため、機能しません。再バインドされる可能性があるため、ConnectionManager がシャットダウンされたため、次のリクエストは失敗しました。

誰かが OSGi 環境内での HttpClient の使用法を明らかにしてくれることを願っています。

4

2 に答える 2

1

ちょうどコメントしてください。HttpClient OSGi バンドルによって提供される HttpClientBuilderFactory使用することをお勧めします。ファクトリによって割り当てられた接続プールは、OSGi コンテナーによって自動的にシャットダウン/割り当て解除されます。

于 2013-10-09T11:17:51.993 に答える
0

B自体はDSコンポーネントですか?その場合、B の非アクティブ化メソッドの呼び出し中にクリーンアップできます。B が DS コンポーネントではなく、raw サービス API を使用して登録されたサービスである場合、サービスの登録時に ServiceFactory を使用できます。次に、コンシューマーがサービスをリリースすると、ServiceFactory.ungetService の実装が呼び出され、そこでクリーンアップできます。

于 2013-10-09T10:32:15.943 に答える