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.

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

Reply via email to