破門(mén)點(diǎn)滴(Java技術(shù)版)

          在日常學(xué)習(xí)和工作中記錄

            BlogJava :: 首頁(yè) ::  :: 聚合  :: 管理
            15 Posts :: 7 Stories :: 36 Comments :: 0 Trackbacks
           

          關(guān)于ClassLoader 問(wèn)題的分析:

          EclipeClassLoader 創(chuàng)建:


          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?


           1org.eclipse.osgi.framework.adaptor.core. AbstractFrameworkAdaptor
           2
           3/**
           4
           5        * The BundleClassLoader parent to use when creating BundleClassLoaders.
           6
           7        * The behavior of the ParentClassLoader will load classes
           8
           9        * from the boot strap classloader.
          10
          11        */

          12
          13       protected static ClassLoader bundleClassLoaderParent;
          14
          15 
          16
          17       static {
          18
          19              // check property for specified parent
          20
          21              String type = 
          22
          23System.getProperty(PROP_PARENT_CLASSLOADER, PARENT_CLASSLOADER_BOOT);
          24
          25              if (PARENT_CLASSLOADER_FWK.equalsIgnoreCase(type))
          26
          27                     bundleClassLoaderParent = FrameworkAdaptor.class.getClassLoader();
          28
          29              else if (PARENT_CLASSLOADER_APP.equalsIgnoreCase(type))
          30
          31                     bundleClassLoaderParent = ClassLoader.getSystemClassLoader();
          32
          33              else if (PARENT_CLASSLOADER_EXT.equalsIgnoreCase(type)) {
          34
          35                     ClassLoader appCL = ClassLoader.getSystemClassLoader();
          36
          37                     if (appCL != null)
          38
          39                            bundleClassLoaderParent = appCL.getParent();
          40
          41              }

          42
          43 
          44
          45              // default to boot classloader
          46
          47              if (bundleClassLoaderParent == null)
          48
          49                     bundleClassLoaderParent = new ParentClassLoader();
          50
          51       }

          52
          53


          如果使用了了boot Classloader ParentClassLoader 是新建的 boot,這里分析看來(lái)應(yīng)該使用framework 或者系統(tǒng)的ClassLoader吧。

          根據(jù)以上的分析,對(duì)Triones的啟動(dòng)環(huán)境進(jìn)行了調(diào)整:

          1、直接引用 org.eclipse.osgi 中的啟動(dòng)包,避免使用反射。注:可以直接調(diào)用EclipseStarter.run(null) 了。

          2、Triones Runtime 拆分成為 triones-core.jar (包括主要的服務(wù)接口 ItrionesFramework 等)和 triones-runtime.jar (Triones Runtime Eclipse插件)

          3、修改 Eclipse config.ini 配置。

          # osgi classloader :

          osgi.parentClassloader = fwk

          根據(jù)上面的分析, fwk 表示使用 FrameworkAdaptor ClassLoader 作為OSGiparent classloader。

          bundleClassLoaderParent = FrameworkAdaptor.class.getClassLoader();



          不得窺道門(mén),不得悟佛門(mén),不得入窄門(mén),實(shí)乃破門(mén)。
          posted on 2005-11-28 16:25 破門(mén) 閱讀(550) 評(píng)論(0)  編輯  收藏 所屬分類: Triones
          主站蜘蛛池模板: 湖口县| 旬邑县| 安宁市| 新余市| 南和县| 板桥市| 潮州市| 华亭县| 扎囊县| 乌什县| 周宁县| 合江县| 仁布县| 金昌市| 马龙县| 南江县| 马山县| 德江县| 丹棱县| 青铜峡市| 崇信县| 蒲江县| 莲花县| 乌苏市| 大荔县| 浦城县| 辽宁省| 巴青县| 贵定县| 上饶市| 莎车县| 宜丰县| 余庆县| 乌兰察布市| 买车| 锦州市| 南宁市| 射洪县| 若羌县| 鸡泽县| 怀安县|