On Thu, Sep 17, 2009 at 11:17, Claus Ibsen <claus.ib...@gmail.com> wrote:
> On Thu, Sep 17, 2009 at 10:55 AM, Guillaume Nodet <gno...@gmail.com> wrote:
>> I've looked at both spring-dm and blueprint, and there is no way to
>> have a single schema namespace supported by two different handlers.
>> I mean, you can always do that, but you have no way to control which
>> one will be used.
>> So I guess versionning the schema is the only solution.
>>
>> Having the schema versioned with 2.1, 2.2, etc sounds good to me.
>
> Hmmm so in all other situations with OSGi you need to control
> versioning in MANIFEST.MF files
> and then suddenly you need to do this specially for Camel? What
> happens when your bundle (which contains the camel xml route)
> has X version of Camel in MANIFEST.MF and then schema version have
> version Y? You need to keep them in sync?
>
> And this also doesn't leverage existing tooling for OSGi? Or am I mistaking?

Right, but in this case, this is not a problem we can fix in camel.
The problem comes from the way spring-dm uses the namespace handlers.
There is no support for multiple namespace handlers supporting the
same schema ...
We could imagine that if that was the case, but this isn't unfortunately.

> I would really like there was a more "standard" way for this.
>
> If this is the only solution then the people working on 3rd party
> tooling such as Fuse Integration Designer needs to be aware of this so
> they can add tooling support
> for specifying Camel versions in the XML files.
>
>
>
>>
>> On Thu, Sep 17, 2009 at 10:27, Gert Vanthienen
>> <gert.vanthie...@gmail.com> wrote:
>>> L.S.,
>>>
>>> How about we register the default namespace
>>> "http://camel.apache.org/schema/spring"; as well as a version-specific
>>> namespace "http://camel.apache.org/schema/spring/2.1"; with the
>>> namespace handler?  If people are only using one version, they can
>>> still use the default namespace and if they want to mix and match
>>> camel versions, they'd need to add the version to disambiguate between
>>> them by adding the version.
>>>
>>> We probably want to stick with a 2.x version and avoid any
>>> schema-breaking changes between 2.1.0 and 2.1.x e.g. though, to avoid
>>> that people would have to update their files on every minor upgrade.
>>>
>>> Regards,
>>>
>>> Gert Vanthienen
>>> ------------------------
>>> Open Source SOA: http://fusesource.com
>>> Blog: http://gertvanthienen.blogspot.com/
>>>
>>>
>>>
>>> 2009/9/17 Guillaume Nodet <gno...@gmail.com>:
>>>> Right, I missed that.  So the point is moot.
>>>> But as Claus noted, the problem will also happen between 2.1.x and 2.2.x 
>>>> ...
>>>>
>>>> On Thu, Sep 17, 2009 at 09:52, Willem Jiang <willem.ji...@gmail.com> wrote:
>>>>> Hi Guillaume,
>>>>>
>>>>> Camel 1.6.x is still using the old namespace for the namespace handler
>>>>> "http://activemq.apache.org/camel/schema/spring";
>>>>>
>>>>> Can you check if your camel context is updated to new camel namespace
>>>>> "http://camel.apache.org/schema/spring";
>>>>>
>>>>> Willem
>>>>>
>>>>> Guillaume Nodet wrote:
>>>>>>
>>>>>> Unfortunately, I doubt it will work.  The reason is that only the
>>>>>> schema namespace is used to choose the namespace handler, not it's
>>>>>> location, and both namespaces are defined by:
>>>>>>    http://camel.apache.org/schema/spring
>>>>>>
>>>>>> On Thu, Sep 17, 2009 at 09:31, Charles Moulliard <cmoulli...@gmail.com>
>>>>>> wrote:
>>>>>>>
>>>>>>> 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
>>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> 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
>>
>
>
>
> --
> Claus Ibsen
> Apache Camel Committer
>
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
>



-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com

Reply via email to