More complicated scenario for camel-bam

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

More complicated scenario for camel-bam

Łukasz Dywicki
Hey everyone,
I tried yo use camel-bam and it works for very basic example shown in documentation. It works well for correlating the files without any middle processing steps.

The process I try to monitor looks following

- receive incoming JMS message - split - multicast (queue1, queue2)

So I've build a following configuration for the process:
ValueBuilder correlation = header("JMSCorrelationID");
ActivityBuilder incoming = activity("activemq:incoming").correlate(correlation).name("incoming");

ActivityBuilder sys1 = activity("amq2:queue1").correlate(correlation).name("system1");
ActivityBuilder sys2 = activity("amq2:queue2").correlate(correlation).name("system2");

sys1.starts().after(incoming.starts());
sys2.starts().after(incoming.starts());

But after receiving messages and initializing a process instance nothing happens. Er it happens, the activity is created. I can not reuse a incoming.getEndpoint to create an from statement and process message. Multiple consumers on same destination are not allowed.

Issues I've discovered:
- Lack of support for parallel activities.
- No support for processing received message. Usually a incoming message is only a entry point for a process.
- No support for a custom process names. Not everyone are happy with Proces-N name. A ProcessBuilder extensions can't change a naming schema.
- Activity definition is not put into the database as long as it is not called by flow. Process is created and the activities are known, but they're not persisted before processing. So whole definitions are useless if we would like display process definitions somewhere else.
- Hard coded dependency to JPA, can't be replaced by alternative way of storing process definitions eg like in IdempotentRepository.

These issues makes a camel-bam useless in my case. Should I use an alternative tool like activiti-camel integration? It's fine but I don't need whole BPMN, diagraming. I want to track a flow between systems in an easy way, there is no human tasks, only service calls and camel logic.

Łukasz Dywicki
--
Code-House
Krasiczyńska 3/80
03-379 Warszawa



Reply | Threaded
Open this post in threaded view
|

Re: More complicated scenario for camel-bam

hadrian
Lukasz, do you mind opening a jira with your findings?
Thanks, Hadrian

On 01/10/2012 06:36 PM, Łukasz Dywicki wrote:

> Hey everyone,
> I tried yo use camel-bam and it works for very basic example shown in documentation. It works well for correlating the files without any middle processing steps.
>
> The process I try to monitor looks following
>
> - receive incoming JMS message - split - multicast (queue1, queue2)
>
> So I've build a following configuration for the process:
> ValueBuilder correlation = header("JMSCorrelationID");
> ActivityBuilder incoming = activity("activemq:incoming").correlate(correlation).name("incoming");
>
> ActivityBuilder sys1 = activity("amq2:queue1").correlate(correlation).name("system1");
> ActivityBuilder sys2 = activity("amq2:queue2").correlate(correlation).name("system2");
>
> sys1.starts().after(incoming.starts());
> sys2.starts().after(incoming.starts());
>
> But after receiving messages and initializing a process instance nothing happens. Er it happens, the activity is created. I can not reuse a incoming.getEndpoint to create an from statement and process message. Multiple consumers on same destination are not allowed.
>
> Issues I've discovered:
> - Lack of support for parallel activities.
> - No support for processing received message. Usually a incoming message is only a entry point for a process.
> - No support for a custom process names. Not everyone are happy with Proces-N name. A ProcessBuilder extensions can't change a naming schema.
> - Activity definition is not put into the database as long as it is not called by flow. Process is created and the activities are known, but they're not persisted before processing. So whole definitions are useless if we would like display process definitions somewhere else.
> - Hard coded dependency to JPA, can't be replaced by alternative way of storing process definitions eg like in IdempotentRepository.
>
> These issues makes a camel-bam useless in my case. Should I use an alternative tool like activiti-camel integration? It's fine but I don't need whole BPMN, diagraming. I want to track a flow between systems in an easy way, there is no human tasks, only service calls and camel logic.
>
> Łukasz Dywicki
> --
> Code-House
> Krasiczyńska 3/80
> 03-379 Warszawa
>
>
>

--
Hadrian Zbarcea
Principal Software Architect
Talend, Inc
http://coders.talend.com/
http://camelbot.blogspot.com/
Reply | Threaded
Open this post in threaded view
|

Re: More complicated scenario for camel-bam

Łukasz Dywicki
Hey Hadrian,
I started investigating the camel-bam code and one from statements I wrote is not true. The Process name can be set by calling the ProcessBuilder constructor. The Process-N name is a default behaviour.

Also, if it makes a sense to support delaying the activity? Eg making an activity suspended? I don't see use of it in my case so far, but that's might be required by other processes.

Łukasz Dywicki
--
Code-House
http://code-house.org


Wiadomość napisana przez Hadrian Zbarcea w dniu 2012-01-11, o godz. 03:29:

> Lukasz, do you mind opening a jira with your findings?
> Thanks, Hadrian
>
> On 01/10/2012 06:36 PM, Łukasz Dywicki wrote:
>> Hey everyone,
>> I tried yo use camel-bam and it works for very basic example shown in documentation. It works well for correlating the files without any middle processing steps.
>>
>> The process I try to monitor looks following
>>
>> - receive incoming JMS message - split - multicast (queue1, queue2)
>>
>> So I've build a following configuration for the process:
>> ValueBuilder correlation = header("JMSCorrelationID");
>> ActivityBuilder incoming = activity("activemq:incoming").correlate(correlation).name("incoming");
>>
>> ActivityBuilder sys1 = activity("amq2:queue1").correlate(correlation).name("system1");
>> ActivityBuilder sys2 = activity("amq2:queue2").correlate(correlation).name("system2");
>>
>> sys1.starts().after(incoming.starts());
>> sys2.starts().after(incoming.starts());
>>
>> But after receiving messages and initializing a process instance nothing happens. Er it happens, the activity is created. I can not reuse a incoming.getEndpoint to create an from statement and process message. Multiple consumers on same destination are not allowed.
>>
>> Issues I've discovered:
>> - Lack of support for parallel activities.
>> - No support for processing received message. Usually a incoming message is only a entry point for a process.
>> - No support for a custom process names. Not everyone are happy with Proces-N name. A ProcessBuilder extensions can't change a naming schema.
>> - Activity definition is not put into the database as long as it is not called by flow. Process is created and the activities are known, but they're not persisted before processing. So whole definitions are useless if we would like display process definitions somewhere else.
>> - Hard coded dependency to JPA, can't be replaced by alternative way of storing process definitions eg like in IdempotentRepository.
>>
>> These issues makes a camel-bam useless in my case. Should I use an alternative tool like activiti-camel integration? It's fine but I don't need whole BPMN, diagraming. I want to track a flow between systems in an easy way, there is no human tasks, only service calls and camel logic.
>>
>> Łukasz Dywicki
>> --
>> Code-House
>> Krasiczyńska 3/80
>> 03-379 Warszawa
>>
>>
>>
>
> --
> Hadrian Zbarcea
> Principal Software Architect
> Talend, Inc
> http://coders.talend.com/
> http://camelbot.blogspot.com/

Reply | Threaded
Open this post in threaded view
|

Re: More complicated scenario for camel-bam

Łukasz Dywicki
Time is the best teacher. :)

I've found a way to do a processing message after activity receives it - with interceptors. There some exceptions, but both persistence and processing works.

Solutions looks next:
interceptFrom("activemq:incoming")
    .split(body())
        .multicast()
            .to(sys1.getEndpoint())
            .to(sys2.getEndpoint())
        .end()
     .end();


Łukasz Dywicki
--
Code-House
http://code-house.org



Wiadomość napisana przez Łukasz Dywicki w dniu 2012-01-11, o godz. 11:48:

> Hey Hadrian,
> I started investigating the camel-bam code and one from statements I wrote is not true. The Process name can be set by calling the ProcessBuilder constructor. The Process-N name is a default behaviour.
>
> Also, if it makes a sense to support delaying the activity? Eg making an activity suspended? I don't see use of it in my case so far, but that's might be required by other processes.
>
> Łukasz Dywicki
> --
> Code-House
> http://code-house.org
>
>
> Wiadomość napisana przez Hadrian Zbarcea w dniu 2012-01-11, o godz. 03:29:
>
>> Lukasz, do you mind opening a jira with your findings?
>> Thanks, Hadrian
>>
>> On 01/10/2012 06:36 PM, Łukasz Dywicki wrote:
>>> Hey everyone,
>>> I tried yo use camel-bam and it works for very basic example shown in documentation. It works well for correlating the files without any middle processing steps.
>>>
>>> The process I try to monitor looks following
>>>
>>> - receive incoming JMS message - split - multicast (queue1, queue2)
>>>
>>> So I've build a following configuration for the process:
>>> ValueBuilder correlation = header("JMSCorrelationID");
>>> ActivityBuilder incoming = activity("activemq:incoming").correlate(correlation).name("incoming");
>>>
>>> ActivityBuilder sys1 = activity("amq2:queue1").correlate(correlation).name("system1");
>>> ActivityBuilder sys2 = activity("amq2:queue2").correlate(correlation).name("system2");
>>>
>>> sys1.starts().after(incoming.starts());
>>> sys2.starts().after(incoming.starts());
>>>
>>> But after receiving messages and initializing a process instance nothing happens. Er it happens, the activity is created. I can not reuse a incoming.getEndpoint to create an from statement and process message. Multiple consumers on same destination are not allowed.
>>>
>>> Issues I've discovered:
>>> - Lack of support for parallel activities.
>>> - No support for processing received message. Usually a incoming message is only a entry point for a process.
>>> - No support for a custom process names. Not everyone are happy with Proces-N name. A ProcessBuilder extensions can't change a naming schema.
>>> - Activity definition is not put into the database as long as it is not called by flow. Process is created and the activities are known, but they're not persisted before processing. So whole definitions are useless if we would like display process definitions somewhere else.
>>> - Hard coded dependency to JPA, can't be replaced by alternative way of storing process definitions eg like in IdempotentRepository.
>>>
>>> These issues makes a camel-bam useless in my case. Should I use an alternative tool like activiti-camel integration? It's fine but I don't need whole BPMN, diagraming. I want to track a flow between systems in an easy way, there is no human tasks, only service calls and camel logic.
>>>
>>> Łukasz Dywicki
>>> --
>>> Code-House
>>> Krasiczyńska 3/80
>>> 03-379 Warszawa
>>>
>>>
>>>
>>
>> --
>> Hadrian Zbarcea
>> Principal Software Architect
>> Talend, Inc
>> http://coders.talend.com/
>> http://camelbot.blogspot.com/
>