Hello Guillaume, I suppose static method to retrieve consumers that can be filtered by a custom expression will be quite enough.
Regards, Sergey > 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 >>>>> >>>> >>>> >>>> >>