Sebastien,

Comments inline.


On 10/22/07, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:

> I have two questions.
>
> [snip]
> Rajini Sivaram wrote:
> > We have the following bundles in Tuscany - the names in brackets refer
> to
> > maven module names
> >
> >    1. SCA API (sca-api)
> >    2. Tuscany SPI (core-spi, assembly, contribution, policy, interface,
> >    interface-java, interface-wsdl, databinding)
> >    3. Tuscany Runtime ( assembly-xml, assembly-xsd, contribution-impl,
> >    contribution-java, contribution-namespace, core,
> >                         core-databinding, definitions, domain,
> >    domain-api, domain-impl, extension-helper, host-embedded,
> >                         interface-java-xml, interface-wsdl-xml,
> >    java2wsdl, node, node-impl, osgi-runtime, policy-security,
> >                         policy-xml, topology, topology-xml, wsdl2java,
> >    binding-sca, binding-sca-xml)
> >    4. Tuscany Extensions (binding-*. implementation-*, host-*,
> >    databinding-*, contribution-osgi)
> >    5. 3rd Party Libraries (Axis2 etc)
> >    6. Application contributions
> >
> >
> Do you know give the approx size of each bundle?


The bundles that I have at the moment are:

   1. org.apache.tuscany.sca.api.jar
   14,942 bytes
   2. org.apache.tuscany.sca.tuscany.corespi.jar
    370,228 bytes
   3. org.apache.tuscany.sca.tuscany.runtime.jar
     571,159 bytes
   4. org.apache.tuscany.sca.tuscany.extensions.jar               996,238
   bytes
   5. org.apache.tuscany.sca.tuscany.dependencies.jar
    43,928,926 bytes

>From a packaging point of view, it doesn't make sense to split Tuscany, and
it makes a lot more sense to split the 3rd party code.



> [snip]
> > Based on the notes, I think the desired classloading hierarchy for
> Tuscany
> > is:
> >
> >
> >
> http://cwiki.apache.org/confluence/download/attachments/68801/desired-classloader.png
> >
> You said "desired classloading", can you help me understand the use
> cases that this structure will help with?
>
> I'm asking because I'm surprised to see "the whole world" in a single
> "3rd party libraries" bundle, which I think is where we're going to see
> version conflicts. I'm also not sure about what steps I'd have to follow
> if I wanted to add a new extension to Tuscany with additional 3rd party
> libraries.


I dont want to sound like I am doing a sales pitch for OSGi, but I am not
sure there is a cleaner or easier way to sort out versioning issues that
Tuscany would face if different versions of 3rd party libraries were
used, compared to running Tuscany under OSGi. An OSGi runtime would enable
different versions of 3rd party libraries, different versions of Tuscany
runtime and different versions of Tuscany extensions to coexist in a single
VM with very little extra effort. Implementing something similar with a
classloader architecture outside of OSGi would be significantly more complex
(and will eventually reinvent OSGi).

The desired classloading hierarchy is based on Raymond's graph and the notes
from Simon Nash and Simon Laws about static visibility (and non-visibility)
from classes in the different bundles. It is the best you can get with a
single-parent Java delegation model without running into
ClassCastExceptions. If the 3rd party code is split into multiple
classloaders, you would invariably need multi-parent or OSGi style
classloading.

You are absolutely right, apart from cleaning up Tuscany modularization,
there would be no perceivable difference from enabling a multi-classloader
framework for the Tuscany runtime (ignoring application classloading for the
moment), when Tuscany is run outside of OSGi. In fact, I imagine the
multi-classloader framework would probably never be used except for testing.
So why go to all this trouble? In my opinion, the advantages of enabling a
multi-classloader framework in Tuscany are:

   1. Application contribution isolation based on the SCA contribution
   spec, regardless of whether the contribution is an OSGi bundle or not.
   2. Enable Tuscany to be split into multiple bundles to enable Tuscany
   to run under OSGi with full modularity and versioning (rather than as a
   single bundle containing all of Tuscany and its dependencies)
   3. Enable the use of a classloader hierarchy which matches everyone's
   understanding of Tuscany modularization, and adding tests which verify that
   this level of modularity is maintained. Raymond's graph and the other notes
   give an almost identical picture of the dependency relationship across
   bundles in Tuscany. But this does not match the current implementation, and
   the ad-hoc use of thread context classloaders and the sprinkling of
   someClass.getClassLoader() used in Class.forName/ClassLoader.loadClass
   throughout Tuscany make it difficult to modify the classloader hierarchy
   without pervasive code changes. With the proposed changes, there would be a
   clearer definition of class visibility across bundles.

If there is a requirement to add new extensions with different versions of
3rd party libraries, but without running Tuscany under OSGi, I will look at
implementing multi-parent extension classloaders. It may be possible to do
this at a later stage.



> Thanks
>
> --
> Jean-Sebastien
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Thank you...

Regards,

Rajini

Reply via email to