开发者

Set ProxySelector and Authenticator back to their default

I was tasked to write a custom ProxySelector implementation for our current OSGi project. In order to use authentication for proxies I also had to write a custom Authenticator.

Setting these custom implementations when the OSGi bundle starts works great. But OSGi bundles can be stopped/uninstalled which b开发者_开发百科rings me to my question:

How do I unset my implementations and restore the default (JVM) implementations?

While the bundle starts I save the default implementation:

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

Sadly Authenticator does not have an getDefault() method.

When the bundle is stopping I want to unset ProxySelector and Authenticator like so:

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

But this doesn't work. After the bundle stops I can't make any connections.

My only explanation is that setting the defaultSelector is only passing a reference. When my ProxySelector is destroyed these reference points nowhere thus causing the JVM to have no valid ProxySelector. The best solution I came up was to clone the selector. But ProxySelector does not have a clone() method. Casting the defaultSelector to some default implementation (sun.net.spi.DefaultProxySelector) might not be the best solution but could work. It could be a problem because it could override other custom implementations that have been set before.

So what is your best practice for this?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜