On Fri, Jun 22, 2012 at 6:33 AM, Sergey Zhemzhitsky <szh.s...@gmail.com> wrote:
> Hello, guys,
>
> I agree that if the camel-core could be enhanced to achieve easy cross-context
> communication in the single JVM it would be fine.

Claus committed the direct-vm component recently which is part of 2.10:
   http://camel.apache.org/direct-vm.html

> In that case I would not tire the core to OSGi anyhow to be really 
> environment-independent.
> I suppose that camel context could be published into the JNDI to be retrieved 
> at some time
> lately to discover consuming endpoints. Thus we can achieve the similar 
> behavior in different
> environments and
>
> from("foo:bar").recipientList(osgiServices("myldapfilter"))
>
> would become
>
> from("foo:bar").recipientList(vm("myfilter"))
>

Atm, the direct-vm queues are not really accessible afaik, so we may
need to enhance the direct-vm slightly to allow retrieving the set of
registered consumers (adding a static getRegisteredConsumers on the
component should be sufficient).  Those are mapped by the path
component of the consumer uris, so it already provides some kinda of
tree based structure.  If that's sufficient, we would just need a
simple expression that would filter them based on some regular
expression maybe.

>
> Regards,
> Sergey
>
>
>
>> Agree, I think that enhancing the existing could achieve this.
>
>> Regards
>> JB
>
>> On 06/21/2012 08:51 AM, Guillaume Nodet wrote:
>>> That's really my main goal.  If we fit into what already exists more,
>>> we'll be able to better leverage everything.
>>>
>>> On Thu, Jun 21, 2012 at 8:48 AM, Christian Schneider
>>> <ch...@die-schneider.net>  wrote:
>>>> +1
>>>>
>>>> I like that aproach. It would make the OSGi services component a lot
>>>> simpler.
>>>>
>>>>
>>>> from("foo:bar").recipientList(osgiServices("myldapfilter"))
>>>>
>>>> I guess we can use a similar aproach to achieve load balancing. Not sure if
>>>> the example below already would work but I am sure we could make it work
>>>> this way or similar:
>>>>
>>>> from("foo:bar").loadbalance().roundRobin().recepientList(osgiServices("myldapfilter"))
>>>>
>>>>
>>>> Christian
>>>>
>>>> Am 21.06.2012 08:27, schrieb Guillaume Nodet:
>>>>
>>>>> Yeah, and I agree leveraging OSGi services for that is a good idea.
>>>>> That's not really what I'm concerned about.
>>>>>
>>>>> The goal is to have a way to multicast a message to a set of endpoint
>>>>> which will be discovered at runtime, and that's not really OSGi
>>>>> specific (though the fact that OSGi has a service registry make that
>>>>> use case very relevant).
>>>>> I'd like to reuse what camel-core provides for that instead of going
>>>>> around and implementing a brand new component.
>>>>> The dynamic recipient list works with an Expression which returns a
>>>>> list of endpoints (either Endpoint or string uris), so why not writing
>>>>> such an expression ?  This expression could easily use a
>>>>> ServiceTracker internally to track changes on services and the
>>>>> expression itself could be an osgi filter...
>>>>>
>>>>>    from("foo:bar").recipientList(osgiServices("myldapfilter"))
>>>>>
>>>>> We could even maybe make use of the CamelContext internal registry
>>>>> which can do some type of discovery (though the osgi implementation is
>>>>> lacking a lot of stuff).
>>>>> A simple one would at least be some kind of regular expression that
>>>>> would match some endpoints.  We may need something slightly more
>>>>> specific for vm:// and direct-vm:// which can be used for
>>>>> cross-camelContext exchanges.
>>>>>
>>>>> And sorry if I seem a bit reluctant, I'm just trying to make things
>>>>> fit more cleanly in camel, and improve camel core where it needs
>>>>> rather than implementing a new component.  It just seems that your
>>>>> requirements are not really osgi specific and could be made slightly
>>>>> mode generic.
>>>>>
>>>>> On Thu, Jun 21, 2012 at 7:41 AM, Sergey Zhemzhitsky<szh.s...@gmail.com>
>>>>>   wrote:
>>>>>>
>>>>>> Hi Guillaume,
>>>>>>
>>>>>> Of course if there is more convenient way to communicate between
>>>>>> bundles there is no need in the component. On the moment of development
>>>>>> of this component there were multiple ways to do that, for instance:
>>>>>>
>>>>>> 1. jms component which is rather heavyweight to do inter-bundle
>>>>>> communication in the same jvm.
>>>>>> 2. vm component which is asynchronous and does not support transactions
>>>>>> 3. nmr component which can be used in synchronous mode, but does not
>>>>>> support pub-sub, although it
>>>>>>    does not prevent user from registering multiple consuming endpoints
>>>>>> with the same name, so the
>>>>>>    messages are sent only to the first registered nmr-consumer.
>>>>>>
>>>>>> The new direct-vm component solves the issue with transactions (like
>>>>>> synchronous nmr does) but it does not
>>>>>> support pub-sub too.
>>>>>>
>>>>>> To use a dynamic recipient list it's necessary to have some kind of
>>>>>> custom code that will resolve
>>>>>> addresses of recipients at runtime. In such a case syncronous nmr can be
>>>>>> used as well. The benefit of
>>>>>> OSGi services is that this is a standard functionality of OSGi runtime
>>>>>> and even OSGi api predisposed
>>>>>> to work with an array of them. Furthermore you will get all the benefits
>>>>>> of OSGi services, i.e.
>>>>>> dynamism, priorities, etc.
>>>>>>
>>>>>> It would be nice if direct-vm allowed to configure pub-sub with all the
>>>>>> options of multicast processor.
>>>>>>
>>>>>> Regards,
>>>>>> Sergey
>>>>>>
>>>>>>> I'm a bit skeptic about this component.
>>>>>>> It seems at first glance that if conflates a few things like osgi
>>>>>>> service access, multicast, etc...
>>>>>>> If the goal is to do inter-bundle communication, the new component
>>>>>>> coming from CAMEL-5370 should already do that and I don't really see
>>>>>>> the need for the component.
>>>>>>> For the multicast, using a dynamic recipient list coupled with
>>>>>>> direct-vm should work.
>>>>>>> On Tue, May 22, 2012 at 7:57 PM,<szh.s...@gmail.com>    wrote:
>>>>>>>>
>>>>>>>> Hi gurus,
>>>>>>>>
>>>>>>>> Recently  I've  published  camel  component that uses OSGi services to
>>>>>>>> communicate between endpoints in different bundles.
>>>>>>>>
>>>>>>>> Here is the link: https://github.com/szhem/camel-osgi
>>>>>>>> I've already raised JIRA issue -
>>>>>>>> https://issues.apache.org/jira/browse/CAMEL-5292
>>>>>>>>
>>>>>>>> So I'd like to have some feedback if it seems to be useful.
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Sergey
>>>>>>>>
>>>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> Christian Schneider
>>>> http://www.liquid-reality.de
>>>>
>>>> Open Source Architect
>>>> Talend Application Integration Division http://www.talend.com
>>>>
>>>
>>>
>>>
>



-- 
------------------------
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
FuseSource, Integration everywhere
http://fusesource.com

Reply via email to