Sorry for the confusion.  I see now you were asking what classes the
extension bundle itself has access to.  I was answering a different
question about what "normal" bundles have access to with respect to
packages contained in system bundle fragments.  So to clarify the answer:

1) framework extensions should have access to all the same classes the
framework implementation does through the class path of the class loader
which loaded the framework.  This includes all the necessary
org.osgi.framework packages which are required for the framework
implementation.
2) boot class path extensions only have access to other content contained
on the boot class path.  In most cases this does not include the
org.osgi.framework packages or the framework implementation.

Tom





From:   Raymond Auge <[email protected]>
To:     OSGi Developer Mail List <[email protected]>,
Date:   08/12/2013 10:58 AM
Subject:        Re: [osgi-dev] clarification about ext bundles class access
Sent by:        [email protected]



I'm just wondering if an "Extension Bundle", as per section 3.15 of the
spec, has access to the same class space as the system bundle... not to see
other extension bundles, but to know if it can see the "internal" classes
within the system bundle, and whether there was a distinction with respect
to bootclasspath vs. framework extensions.

You clarified the bootclasspath part, and I believe that we have come to an
understanding of the framework as well.

Thanks


On Mon, Aug 12, 2013 at 11:49 AM, Thomas Watson <[email protected]>
wrote:
  Are you talking about system bundle fragments having access to content
  from other system bundle fragments?  In this case, yes the system bundle
  fragments cannot depend on each others packages using Import-Package, but
  they should have access to each others content at runtime as long as they
  are framework extensions.  At least for Equinox this is true for
  framework extensions because they are all loaded by the same class
  loader.  If boot class path extensions were supported then these
  fragments cannot have access to content on the framework's class loader
  because the boot class loader is self-contained and never delegates out
  to another class loader.

  Such dependencies are not allowed to be specified between the framework
  extensions since the specification does not even allow for the
  Require-Capability header (except for non-payload requirements like
  osgi.ee).  So at runtime I think you would have to treat such
  dependencies as optional at best so that your extension does not fail
  miserably if the other extension is not present.

  Tom



  Inactive hide details for Raymond Auge ---08/12/2013 10:16:17 AM---There
  is one problem with your explanation: "3.15.1 Illegal Raymond Auge
  ---08/12/2013 10:16:17 AM---There is one problem with your explanation:
  "3.15.1 Illegal Manifest Headers for Extension Bundles




  From: Raymond Auge <[email protected]>
  To: OSGi Developer Mail List <[email protected]>,
  Date: 08/12/2013 10:16 AM
  Subject: Re: [osgi-dev] clarification about ext bundles class access

  Sent by: [email protected]



  There is one problem with your explanation:

  "3.15.1 Illegal Manifest Headers for Extension Bundles
  An extension bundle must throw a BundleException if it is installed or
  updated and it specifies any of
  the following headers.

  Import-Package
  ...
  DynamicImport-Package
  ...
  "

  Wouldn't this mean that a ext bundle, since it cannot use the
  Import-Package header, itself must have the same class space as the
  system bundle somehow?




  On Mon, Aug 12, 2013 at 11:05 AM, Thomas Watson <[email protected]>
  wrote:
        If the fragment exports the packages then there should be no
        distinction.  All client bundles have to use Import-Package to get
        access to the exported packages.  The packages at runtime are
        exported by the system bundle.  The framework is responsible for
        making sure the bundle that import the package have access to the
        actual content regardless of where the actual classes get loaded
        from (i.e. the framework's own class loader or the boot class
        loader).

        As far as I know no framework exists that supports bootclasspath
        extensions.  I feel we should consider removing this from the
        specification unless someone is really going to implement it.  It
        only causes confusion in the specification.  But the theory is that
        bootclasspath extensions get configured into the VM's boot
        classpath and framework extensions get configured into the class
        loader used to actually load the framework implementation.  The two
        frameworks I am most familiar with (Equinox and Felix) do this by
        assuming the framework implementation is loaded with a class loader
        that has an addURL() method (e.g. a URLClassLoader) and reflection
        is used to add the framework extension to the classpath.

        In a standard OSGi configuration (no bootdelegation settings),
        bundles only get free access to the java.* packages.  The VM spec
        tries to limit the boot class loader as the only class loader that
        can define java.* classes.  The bootclasspath extensions were
        invented to allow bundles to deliver additional java.* packages to
        the boot class path because normal bundle class loaders are not
        allowed to define java classes (without using some hacks).  This is
        why I say there is no distinction between the two (framework vs
        bootclasspath) with respect to a bundle accessing them.  If the
        package is a non-java.* package then clients must use
        Import-Package.  The java.* packages are available with no
        Import-Package.

        If the fragment does not export the package then the only way the
        package can be accessible to the bundle is if you are using some
        bootclasspath delegation [1] configuration and you have set the
        bundle parent classloader [2] configuration to the proper
        classloader (e.g. framework vs boot vs ...).  Or the package is a
        java.* package and the fragment is a bootclasspath extension.  But
        I recommend you do NOT use a boot delegation setting as a best
        practice and force all clients to use Import-Package to access the
        packages.

        Tom

        [1] -
        
http://www.osgi.org/javadoc/r5/core/org/osgi/framework/Constants.html#FRAMEWORK_BOOTDELEGATION

        [2] -
        
http://www.osgi.org/javadoc/r5/core/org/osgi/framework/Constants.html#FRAMEWORK_BUNDLE_PARENT




        Inactive hide details for Raymond Auge ---08/12/2013 09:42:22
        AM---I just want to clarify the distinction between Fragment-Host
        Raymond Auge ---08/12/2013 09:42:22 AM---I just want to clarify the
        distinction between Fragment-Host: system.bundle;
        extension:=framework

        From: Raymond Auge <[email protected]>
        To: OSGi Developer Mail List <[email protected]>,
        Date: 08/12/2013 09:42 AM
        Subject: [osgi-dev] clarification about ext bundles class access
        Sent by: [email protected]




        I just want to clarify the distinction between

        Fragment-Host: system.bundle; extension:=framework
        Fragment-Host: system.bundle; extension:=bootclasspath

        with respect to classes the bundle has access to.

        1) is there a distinction?
        2) what about the case when the framework is not itself loading
        from the bootclasspath (i.e. is loaded by FrameworkFactory in an
        existing VM)

        Section 3.15 of core spec doesn't actually clarify these points. Is
        there some other section on this topic?

        Sincerely,
        --
        Raymond Augé (@rotty3000)
        Senior Software Architect
        Liferay, Inc. (@Liferay)
        _______________________________________________
        OSGi Developer Mail List
        [email protected]
        https://mail.osgi.org/mailman/listinfo/osgi-dev

        _______________________________________________
        OSGi Developer Mail List
        [email protected]
        https://mail.osgi.org/mailman/listinfo/osgi-dev



  --
  Raymond Augé (@rotty3000)
  Senior Software Architect
  Liferay, Inc. (@Liferay)
  _______________________________________________
  OSGi Developer Mail List
  [email protected]
  https://mail.osgi.org/mailman/listinfo/osgi-dev

  _______________________________________________
  OSGi Developer Mail List
  [email protected]
  https://mail.osgi.org/mailman/listinfo/osgi-dev



--
Raymond Augé (@rotty3000)
Senior Software Architect
Liferay, Inc. (@Liferay)
_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev

<<inline: graycol.gif>>

_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to