On 5/1/08, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:

> Graham Charters wrote:
>
> > It would seem that the fine-grained/coarse-grained thoughts have
> > people divided.  Rajini's note (aside from the fact she has a tonne of
> > experience having done most, if not all, of the OSGi work in Tuscany)
> > paints a picture where the two are not mutually exclusive.  I don't
> > typically like doing two options because that seems like indecision,
> > but in this case they do appear to complement each other.
> >
> > Based on what I've seen in this thread, I'm hoping this briefly
> > summarizes the collection of thoughts on how we might proceed:
> >
> > Tuscany Running in OSGi
> >
> > 1.  Add bundle manifests to all the Tuscany modules (using maven
> > bundle plugin).  This will ensure the most fine-grained decomposition
> > works and therefore coarser-grained distributions will also work.
> > 2.  Add a distribution which creates bundles around manageable
> > collections of Tuscany modules aligned with how we see the runtime
> > being extended/subsetted/replaced.  Have this build and test on
> > Continuum.
> > 3.  Create 'virtual bundles' for third-party libraries to avoid
> > licensing and disk space issues (based on Rajini's suggestions, which
> > I need to better understand).
> > 4.  Provide guidance on the wiki on how to avoid breaking OSGi.
> >
> > There's also the suggestion that implementation.osgi relate to
> > Distributed OSGi (RFC 119), which shouldn't be lost.
> >
> > Have I missed anything?
> >
> > It sounds like a staging of 1 & 3 first, followed by 2 would work (and
> > 4 if things keep breaking :-( ).  I'd be concerned if we didn't get to
> > 2, and as part of 1&3, we need to make sure these are regularly tested
> > under osgi.
> >
> >
> Sounds good to me, with the following comments:
>
> When you have (1) + (3) you can already run a continuum OSGi build, before
> attacking (2). I'd actually suggest to start building on continuum as soon
> as we have (1).
>
> - I'm not clear on what you meant by 'use the Maven bundle plugin'. Will
> we write something like this for example:
> <project>
>  ...
>  <packaging>bundle</packaging>
>  ...
>  <plugin>
>    <groupId>org.apache.felix</groupId>
>    <artifactId>maven-bundle-plugin</artifactId>
>    <extensions>true</extensions>
>    <configuration>
>      <instructions>
>        <Export-Package>org.apache.tuscany.sca.foo</Export-Package>
>        <Import-Package>org.apache.tuscany.sca.bar</Import-Package>
>        <Private-Package>org.apache.tuscany.sca.impl.*</Private-Package>
>      </instructions>
>    </configuration>
>  </plugin>
> ...



I think we have four options on how we start bundle-izing Tuscany modules,
using maven-bundle-plugin.


1. Use the manifest goal to generate the manifest entry in all module jars,
with <Export-Package>*</Export-Package> and
<Import-Package>*</Import-Package>, which export all the packages from the
module and import everything used by the module. The Export-Package and
Import-Package statements in the generated manifest will use explicit
package import/exports like:

Import-Package:
javax.xml.namespace,javax.xml.parsers,org.apache.tuscany.sca.contribution.resolver,...
Export-Package:
org.apache.tuscany.sca.implementation.osgi;version="2.0";uses:="o.a.t.s.assembly",/...


The analysis of Import/Export will be done by the maven-bundle-plugin in
this case. The actual generation of the module jar will remain the same as
now, the only addition will be a new generated manifest file.

We might not use <Export-Package>*</Export-Package> , but instead it would
be something more like
<Export-Package>org.apache.tuscany.sca.implementation.osgi.*</Export-Package>,
where the packages are wildcarded, but no assumptions about modularity are
made.

2. Use bundle goal with Import/Export as above (generated by
maven-bundle-plugin rather than explicitly specified). In this case the jar
itself will be generated using maven-bundle-plugin. The output jar should be
identical to 1.

3. Use manifest goal with explicitly listed <Export-Package/>,
<Import-Package/> as in Sebastien's example. All exported and (maybe)
imported packages  are explicitly specified in the pom. Everytime a
new package is added, the pom should be updated.

4.  Use bundle goal with explicitly listed <Export-Package/>,
<Import-Package/> and <Private-Package/> as in Sebastien's example. This
option corresponds to Sebastien's example. In this case both the contents of
the jar, as well as the manifest are based on the explicitly listed
packages.


1. is the easiest to implement. It makes no assumptions about modularity,
and will not have any impact on non-OSGi applications since only the
manifest entry is affected. From an OSGi point of view, this gives all we
need for osgi-tuscany.

2. does not add any value over 1.

3. This is a half-hearted attempt to enforce modularity. osgi-tuscany will
break everytime someone introduces a new package  and doesn't update the
pom. But Tuscany will continue to operate without OSGi since only the
manifest is broken. 3. is not a requirement for OSGi-based Tuscany, but
merely the use of OSGi technology to improve modularity. osgi-tuscany will
take on the role on policing modularity(apart from testing that Tuscany can
be run in an OSGi runtime).

4. This is OSGi best practice. If a new package is introduced and the pom is
not updated, the jar itself will be unusable. Basically this requires all
developers to be OSGi-aware. The value-add of this option over 1. is the
enforcement of modularity, and like 3, this is not a requirement for
OSGi-based Tuscany. I am not sure we are ready for this yet. I think there
is a real risk that frequent breakages will create the perception that OSGi
integration is impossible to maintain, even though this is more to do with
enforcing modularity rather than OSGi.


I would like to suggest that we start with 1., use the generated manifest
files to understand and improve modularity and jump to 4. to enforce
modularity when we are ready for it.





> or did you mean something else?
>
> --
> Jean-Sebastien
>



-- 
Thank you...

Regards,

Rajini

Reply via email to