Guillaume,

I think that you can solve easily the problem by specifying in the xml file,
the version of the camel-spring file

By default, you don't mention it in the schema location and the last ont
will be used (so now 2.0)

    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/osgi
        http://www.springframework.org/schema/osgi/spring-osgi.xsd
        http://camel.apache.org/schema/osgi
        http://camel.apache.org/schema/osgi/camel-osgi.xsd
        http://camel.apache.org/schema/spring
        http://camel.apache.org/schema/spring/camel-spring.xsd";>

Can you try this ?

    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/osgi
        http://www.springframework.org/schema/osgi/spring-osgi.xsd
        http://camel.apache.org/schema/osgi
        http://camel.apache.org/schema/osgi/camel-osgi.xsd
        http://camel.apache.org/schema/spring
        http://camel.apache.org/schema/spring/camel-spring-2.1-SNAPSHOT.xsd
">

Regards,

Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer

*****************************
blog : http://cmoulliard.blogspot.com


On Thu, Sep 17, 2009 at 9:19 AM, Guillaume Nodet <gno...@gmail.com> wrote:

> Ok, I'm mostly done with the OSGi metadata.
> I've committed fixes to both trunk and 1.x branch.
>
> But my original goal is only partially achieved.
> I've run some basic tests in Karaf and deployed camel 1.6-SNAPSHOT and
> 2.1-SNAPSHOT.
> Then, I deployed a simple spring-powered camel route and dropped it
> into the Karaf deploy folder.
>
> Now the question is: how can I choose which version of camel I want to
> run for my route ?
> I guess part of the problem is that the schema are the same and both
> spring namespace handlers use the same schema.
> I've forced the generated bundle to be wired to camel 2.1, but spring
> was still using the 1.6 schema handler to load the route which was
> failing because of a missing component.
>
> I think we're missing some kind of versioning in the schema ...
> Thoughts ?
>
> On Fri, Sep 4, 2009 at 10:22, Guillaume Nodet <gno...@gmail.com> wrote:
> > I've spotted a few problems in the way the OSGi metadata for camel jars
> are
> > computed.
> > This makes deploying two versions of camel in OSGi nearly impossible.
> > To fix, I plan to enhance the metadata in two ways:
> >
> > #1. bundles should not import the packages they export
> > Here's an example what happen when you do so:
> >    * install bundle A version vx that export foo.bar and import it
> >      the OSGi framework will decide that A export this package because no
> > other package is available
> >   * install the same bundle in version vy
> >      as some of the packages are already exported by the first version of
> A,
> > the OSGi resolver may choose
> >      to have this bundle import the package in version vx (provided that
> the
> > version constraints match)
> >      this means that this bundle will not use its own classes for all the
> > packages that are in common, leading
> >      to obvious problems
> > So not importing the package means that the OSGi framework will always
> use
> > the classes from inside the bundle.
> >
> > #2. always use version ranges
> >   * For non camel imports, I think the default should be to have a range
> > equal to [v,v+1) assuming backward compatibility is preserved on minor
> > releases.  So if one bundle has a dependency on foo.bar version 1.1, the
> > range will be [1.1,2) meaning the framework is allowed to choose any
> package
> > with a version >= 1.1 but < 2.0
> >   * for camel imports, this is a bit trickier.  I think the default range
> > should be restricted to minor versions, i.e. [1.1,1.2)
> >
> > The problem here is to allow someone to update a camel component or core
> > without updating the whole camel jars, so we need some flexibility on
> this
> > range.  But usually, I don't think we really ensure full backward
> > compatibility between minor versions, so having [2.0,3) might not be a
> good
> > idea.
> > Furthermore, this would mean that you can't really deploy two different
> > minor versions of camel in the same framework, which I think is
> desirable.
> >
> > Now, the tricky part is to make sure that we always use consistent
> classes.
> > For example when camel-core discover a component, we don't really want
> > camel-core 1.4 discovering camel 2.0 components, as this would fail.   So
> > the discovery mechanism has to be enhanced to make sure we load
> compatible
> > classes.
> > In OSGi, this can be done by loading a class from the component bundle
> and
> > making sure it's the same as our.
> > For example:
> >     componentBundle.loadClass(org.apache.camel.Endpoint.class.getName())
> ==
> > org.apache.camel.Endpoint.class
> > This way, the discovery mechanism will be retricted to components that
> are
> > actually wired to this camel-core bundle.
> >
> > So at the end we should be able to:
> >   * deploy multiple versions of camel, provided they have different minor
> > releases (ex: 1.4, 2.0, 2.1)
> >   * upgrade components / core with micro release (ex: camel-core 2.0,
> > camel-spring 2.0.2, camel-atom 2.0.1)
> > And everything should work nicely :-)
> >
> > I'll start updating the OSGi metadata, but any help would be welcome, as
> > there are tons of components here !
> > Also, any volunteer for upgrading and testing the discovery mechanism is
> > welcomed !
> >
> > --
> > Cheers,
> > Guillaume Nodet
> > ------------------------
> > Blog: http://gnodet.blogspot.com/
> > ------------------------
> > Open Source SOA
> > http://fusesource.com
> >
> >
> >
>
>
>
> --
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> Open Source SOA
> http://fusesource.com
>

Reply via email to