将ProxySelector和Authenticator设置回默认值

时间:2011-06-16 19:36:40

标签: java proxy osgi dynamic-proxy

我的任务是为我们当前的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 )可能不是最佳解决方案,但可以正常工作。这可能是一个问题,因为它可能会覆盖之前设置的其他自定义实现。

那么你最好的做法是什么?

0 个答案:

没有答案