破门点滴   本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
不得窥道门,不得悟佛门,不得入窄门,实乃破门。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:破门点滴
日志总数:161
评论数量:404
留言数量:-2
访问次数:1421205
建立时间:2004年11月13日




 

[开发笔记]Triones Runtime: 如何避免setURLStreamHandlerFactory调用失败?
心得体会,  软件技术

破门 发表于 2004/12/24 18:56:54

果然,发现Tomcat已经调用了此方法:org.apache.catalina.loader.WebappLoader // Register a stream handler factory for the JNDI protocol         URLStreamHandlerFactory streamHandlerFactory =             new DirContextURLStreamHandlerFactory();         if (first) {             first = false;             try {                 URL.setURLStreamHandlerFactory(streamHandlerFactory);             } catch (Exception e) {                 // Log and continue anyway, this is not critical                 log.error("Error registering jndi stream handler", e);             } catch (Throwable t) {                 // This is likely a dual registration                 log.info("Dual registration of jndi stream handler: "                          + t.getMessage());             }         }   尝试将Eclipse 中OSGi的Framework对象进行更改: org.eclipse.osgi.framework.internal.core.Framework initialize() 方法,跳过二次注册 setURLStreamHandlerFactory的错误: /* install URLStreamHandlerFactory */                    try{                             URL.setURLStreamHandlerFactory(new  StreamHandlerFactory(systemBundle.context, adaptor));                    } catch (Throwable t) {                             // This is likely a dual registration                             if (Debug.DEBUG && Debug.DEBUG_GENERAL)                                      System.out.println("Dual registration of jndi stream handler: "                      + t.getMessage());                    }   运行出现错误,Eclipse无法加载插件: java.net.MalformedURLException: unknown protocol: reference          at java.net.URL.<init>(Unknown Source)          at org.eclipse.core.runtime.adaptor.EclipseStarter.searchForBundle(EclipseStarter.java:366)          at org.eclipse.core.runtime.adaptor.EclipseStarter.getInitialBundles(EclipseStarter.java:466)          at org.eclipse.core.runtime.adaptor.EclipseStarter.loadBasicBundles(EclipseStarter.java:418)          at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:222)          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)          at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)          at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)          at java.lang.reflect.Method.invoke(Unknown Source)          at org.softme.triones.launcher.TrionesInvokeStarter.basicRun(TrionesInvokeStarter.java:342)          at org.softme.triones.launcher.TrionesInvokeStarter.launch(TrionesInvokeStarter.java:899)          at org.softme.triones.TrionesContextListener.   只能先研究以上参考中更新protocol注册的第二种或第三种方法了。 Eclipse采用了URLStreamHandlerProxy的代理机制来处理,实际的服务定义在OSGi的service org.osgi.service.url. URLStreamHandlerService实现中。解决了Java JVM 对URLStreamHandler 进行缓存而不能支持动态加载的问题。 因此,看来不能够去掉Eclipse中对URL. setURLStreamHandlerFactory的调用。   解决办法呢?………………………………………….????????????????????????   讨论: 方案一:在JVM 的URL 协议注册机制中寻求其他入口点。 困难度 100%:JVM协议注册的第二种和第三种方法都无法支持Eclipse的入口。 因为Eclipse通过对Factory的扩展支持了协议处理器(Handler)的动态加载,以及嵌入了OSGi服务机制,所以无法采取其他入口实现Eclipse加载机制。 方案二:修改Eclipse框架,避开 setURLStreamHandlerFactory的调用。 困难度 100%:原因同上。 方案三:修改JRE中java.net.URL对象,允许多factory设置。 困难度 10%。


阅读全文(2328) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.219 second(s), page refreshed 144763939 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号