1 Reply Latest reply on Aug 28, 2009 9:47 AM by thomas.diesler

    OSGi classloader system

    thomas.diesler

      Folks,

      I'd like to better understand how the classloader system works. Could you please talk me through the code below and explain what is being done here.

      Eventually, I'd like to be able to setup a Framework Classloader with the configured packages in 'org.osgi.framework.system.packages' and 'org.osgi.framework.system.packages.extra'

       /**
       * Create a new OSGiClassLoaderSystem.
       * @param bundleManager the bundleManager
       * @throws IllegalArgumentException for a null bundle manager
       */
       public OSGiClassLoaderSystem(OSGiBundleManager bundleManager)
       {
       if (bundleManager == null)
       throw new IllegalArgumentException("Null bundle manager");
      
       ClassLoaderDomain domain = getDefaultDomain();
      
       // Initialize the configured system packages
       String sysPackageString = getSystemPackagesAsString(bundleManager);
       PatternClassFilter filter = PackageClassFilter.createPackageClassFilterFromString(sysPackageString);
       filter.setIncludeJava(true);
      
       domain.setParentPolicy(new ParentPolicy(filter, ClassFilter.NOTHING));
       AbstractJDKChecker.getExcluded().add(AbstractBundleState.class);
       AbstractJDKChecker.getExcluded().add(OSGiBundleState.class);
       }
      
       @Override
       protected ClassLoaderDomain createDomain(String name)
       {
       return new ClassLoaderDomain(name);
       }
      
       protected BaseClassLoader createClassLoader(ClassLoaderPolicy policy)
       {
       return new OSGiBundleClassLoader(policy);
       }
      


      when done, I could probably remove this hack

       // [TODO] Should system packages be added as capabilities?
       boolean isSystemPackage = syspackPlugin.isSystemPackage(packageName);
       if (isSystemPackage == false)
       {
       OSGiPackageRequirement requirement = OSGiPackageRequirement.create(packageAttribute);
       requirements.addRequirement(requirement);
       }