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


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


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

我的分类(专题)

日志更新

最新评论

留言板

链接

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




 

[开发笔记]Triones:关于ClassLoader 问题的分析及解决
原创空间,  软件技术

破门 发表于 2004/12/16 16:13:44

关于ClassLoader 问题的分析: EclipeClassLoader 创建: org.eclipse.core.runtime.adaptor.EclipseElementFactory public org.eclipse.osgi.framework.adaptor.BundleClassLoader createClassLoader (ClassLoaderDelegate delegate, ProtectionDomain domain, S tring[] bundleclasspath, AbstractBundleData data) {               return new EclipseClassLoader(delegate, domain, bundleclasspath, data.getAdaptor().getBundleClassLoaderParent(), data);        } 获取ClassLoaderParent 的方法,使用了EclipseAdaptor Adaptor 的getBundleClassLoaderParent() 如何去定 bundleClassLoaderParent? org.eclipse.osgi.framework.adaptor.core. AbstractFrameworkAdaptor /**         * The BundleClassLoader parent to use when creating BundleClassLoaders.         * The behavior of the ParentClassLoader will load classes         * from the boot strap classloader.         */        protected static ClassLoader bundleClassLoaderParent;          static {               // check property for specified parent               String type = System.getProperty(PROP_PARENT_CLASSLOADER, PARENT_CLASSLOADER_BOOT);               if (PARENT_CLASSLOADER_FWK.equalsIgnoreCase(type))                      bundleClassLoaderParent = FrameworkAdaptor.class.getClassLoader();               else if (PARENT_CLASSLOADER_APP.equalsIgnoreCase(type))                      bundleClassLoaderParent = ClassLoader.getSystemClassLoader();               else if (PARENT_CLASSLOADER_EXT.equalsIgnoreCase(type)) {                      ClassLoader appCL = ClassLoader.getSystemClassLoader();                      if (appCL != null)                             bundleClassLoaderParent = appCL.getParent();               }                 // default to boot classloader               if (bundleClassLoaderParent == null)                      bundleClassLoaderParent = new ParentClassLoader();        } 如果使用了了boot Classloader 则 ParentClassLoader 是新建的 boot,这里分析看来应该使用framework 或者系统的ClassLoader吧。根据以上的分析,对Triones的启动环境进行了调整: 1、直接引用 org.eclipse.osgi 中的启动包,避免使用反射。注:可以直接调用EclipseStarter.run(null) 了。 2、将Triones Runtime 拆分成为 triones-core.jar (包括主要的服务接口 ItrionesFramework 等)和 triones-runtime.jar (Triones Runtime Eclipse插件)。 3、修改 Eclipse 的 config.ini 配置。 # osgi classloader : osgi.parentClassloader = fwk 根据上面的分析, fwk 表示使用 FrameworkAdaptor 的ClassLoader 作为OSGi的parent classloader。 bundleClassLoaderParent = FrameworkAdaptor.class.getClassLoader();


阅读全文(2711) | 回复(1) | 编辑 | 精华
 


 

以下是测试程序输出
原创空间,  软件技术

破门发表评论于2004/12/16 16:18:21

[JUnit]Testing The Triones Framework ....Time to load bundles: 20Starting application: 1342------------------------------------Triones Framework: Started!Triones Framework: Hello!Triones Job: begin...Triones Job: idle-0[JUnit]Triones Framework Instance:org.softme.triones.runtime.TrionesFramework@14c194dTriones Job: idle-1Triones Job: done.[JUnit]Testing The Triones Framework OK!!![JUnit]Testing The Triones Framework ....[JUnit]Close the Triones Framework By Shutdown....Triones Framework: Stoped!------------------------------------[JUnit]Testing The Triones Framework OK!!!


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

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



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

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