4

私は、現在の OSGi プロジェクト用にカスタムProxySelector実装を作成することを任されました。プロキシの認証を使用するには、カスタムのAuthenticatorも作成する必要がありました。

OSGi バンドルの開始時にこれらのカスタム実装を設定すると、うまく機能します。しかし、OSGi バンドルは停止/アンインストールできるため、次の質問に至ります。

実装を設定解除し、デフォルト (JVM) 実装を復元するにはどうすればよいですか?

バンドルが開始する間、デフォルトの実装を保存します。

ProxySelector defaultSelector = ProxySelector.getDefault()
ProxySelector.setDefault(new MyProxySelector());

残念ながら、Authenticator にはメソッドがありませんgetDefault()

バンドルが停止しているとき、次のように ProxySelector と Authenticator の設定を解除します。

ProxySelector.setDefault(defaultSelector); // see above
Authenticator.setDefault(null);

しかし、これはうまくいきません。バンドルが停止すると、接続できなくなります。

私の唯一の説明は、を設定することdefaultSelectorは参照を渡すだけだということです。ProxySelector が破棄されると、これらの参照ポイントがどこにもないため、JVM に有効な ProxySelector がなくなります。私が思いついた最善の解決策は、セレクターを複製することでした。しかし、ProxySelector にはメソッドがありませんclone()defaultSelectorをデフォルトの実装 ( sun.net.spi.DefaultProxySelector ) にキャストすることは、最善の解決策ではないかもしれませんが、うまくいく可能性があります。以前に設定された他のカスタム実装をオーバーライドする可能性があるため、問題になる可能性があります。

では、これに対するベストプラクティスは何ですか?

4

0 に答える 0