On Thu, Sep 17, 2009 at 9:52 AM, 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";
>

Doesnt this only detect between Camel 1.x and 2.x?
What if you have 2 versions of Camel 1.x such as: 1.6.0 and 1.6.1
running. Which version should it then pick?


> 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
>>>>
>>
>>
>>
>
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Reply via email to