On Fri, Sep 4, 2009 at 11:53 AM, Willem Jiang<willem.ji...@gmail.com> wrote:
> Because there are some internal API dependencies between the camel-core ,
> camel-spring. I'm not sure if the OSGi version range can help us to find out
> the minor internal API change.
>

Yeah camel-core and camel-spring are really to tightly coupled that
running with different version of them is not recommended.
Eg routing with XML depends on camel-spring where as the routing model
is in camel-core etc.

So it make most sense to support upgrading various other camel
components such as for example camel-jetty, camel-http, camel-velocity
etc.


> Willem
>
> Guillaume Nodet wrote:
>>
>> On Fri, Sep 4, 2009 at 11:22, Willem Jiang <willem.ji...@gmail.com> wrote:
>>
>>> +1 for #1,
>>>
>>> for the #2, I think we could let the component dependent on the version
>>> ranges of camel-core, camel-spring, camel-osgi.
>>> But for camel-core, camel-spring and camel-osgi, they should dependent
>>> each
>>> other with specific version.
>>>
>>>
>> Why ?  This would prevent from upgrading one of those bundles without
>> upgrading the others.
>>
>>
>>> Willem
>>>
>>>
>>>
>>> Guillaume Nodet 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 !
>>>>
>>>>
>>
>>
>
>



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