I think that the problem in my case is that the sending of the fourth message exchange is not done by method AsyncBaseLifeCycle#sendConsumerExchange, so the correlation id is not propagated.

I'll evaluate the usage of ServiceMix 3.1.

Thanks
Gianfranco Boccalon

Guillaume Nodet ha scritto:
I have just tested with the junit PipelineTest#testInOut test
and it works fine: the correlationId is set when the exchange comes
to the receiver target.  As you are using a patched 3.0 version,
I would suggest to check the code in AsyncBaseLifeCycle
with the one in 3.1.

Note that the behavior your see when at your breakpoint is correct,
as the correlationId will be set when the send method is called.
This method delegates to the BaseLifeCycle#sendConsumerExchange
which will correctly set the correlationId.

On 12/22/06, Gianfranco Boccalon <[EMAIL PROTECTED]> wrote:
I debug the execution, so I can send you some details.

The entire message flow is the following:
1. HTTP BC->ENRICHER (PIPELINE)
    2. ENRICHER->HTTP BC FOR ENRICHER
    2.1 Invocation of external web service by HTTP BC FOR ENRICHER
    3. HTTP BC FOR ENRICHER->ENRICHER
4. ENRICHER->SCREEN BC

The problem arise in step 4: here a new correlation id is created
because the exchange sent doesnt contain the correlation id of the
previous exchanges.

You can see the reason from this stack trace:
Thread [Thread-31] (Suspended (breakpoint at line 85 in MessageUtil))
    MessageUtil.transferOutToIn(MessageExchange, MessageExchange) line:
85
    Pipeline.processAsync(MessageExchange) line: 288
    Pipeline(EIPEndpoint).process(MessageExchange) line: 241
    EIPLifeCycle(AsyncBaseLifeCycle).processExchange(MessageExchange)
line: 447
    EIPLifeCycle(BaseLifeCycle).onMessageExchange(MessageExchange) line:
43
    DeliveryChannelImpl.processInBound(MessageExchangeImpl) line: 624
    SedaFlow(AbstractFlow).doRouting(MessageExchangeImpl) line: 169
    SedaFlow.doRouting(MessageExchangeImpl) line: 177
    SedaQueue$1.run() line: 227
    WorkerContext.run() line: 291
    PooledExecutor$Worker.run() line: not available
    Thread.run() line: 595

The method transferOutToIn copy only message properties from source
message to destination message, it doesnt copy the message exchanges
properties from the source to destination.
I remind you that we are using ServiceMix 3.0.

Here you can see a trace of messages until step 3 (included).

============================ Exchange ==================================
MEP: org.apache.servicemix.jbi.messaging.InOnlyImpl
Id & status: ID:boccalon-1684-1166781393627-9:2 Active
Sender:
{http://servicemix.org/cheese}myGenericEnricherEnricher:myWebServiceEnricher
Service: {http://servicemix.org/cheese}myGenericEnricherEnricher
Endpoint: null
Role: [EMAIL PROTECTED]
Interfacename: null
Operation: {http://soa.eng.it}arricchisciAnagrafica
 ----- Properties
 ----- Property [org.apache.servicemix.datestamp] -->
[java.util.GregorianCalendar[time=1166781979680,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2006,MONTH=11,WEEK_OF_YEAR=51,WEEK_OF_MONTH=3,DAY_OF_MONTH=22,DAY_OF_YEAR=356,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=6,SECOND=19,MILLISECOND=680,ZONE_OFFSET=3600000,DST_OFFSET=0]]
 ----- Property [org.apache.servicemix.correlationid] -->
[ID:boccalon-1684-1166781393627-9:2]
 ----- Property [org.apache.servicemix.senderEndpoint] -->
[{http://servicemix.org/cheese}myGenericEnricherEnricher:myWebServiceEnricher] ============================ Exchange ==================================
MEP: org.apache.servicemix.jbi.messaging.InOutImpl
Id & status: ID:boccalon-1684-1166781393627-8:2 Active
Sender:
{http://servicemix.org/cheese}myGenericEnricherEnricher:myGenericEnricherEnricher
Service: {http://servicemix.org/cheese}myGenericEnricherEnricherHttp
Endpoint: null
Role: [EMAIL PROTECTED]
Interfacename: null
Operation: null
 ----- Properties
 ----- Property
[Pipeline.Consumer.{http://servicemix.org/cheese}myGenericEnricherEnricher.myGenericEnricherEnricher]
--> [ID:boccalon-1684-1166781393627-9:2]
 ----- Property [Pipeline.Transformer] --> [true]
 ----- Property [org.apache.servicemix.datestamp] -->
[java.util.GregorianCalendar[time=1166781979730,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2006,MONTH=11,WEEK_OF_YEAR=51,WEEK_OF_MONTH=3,DAY_OF_MONTH=22,DAY_OF_YEAR=356,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=6,SECOND=19,MILLISECOND=730,ZONE_OFFSET=3600000,DST_OFFSET=0]]
 ----- Property [Pipeline.ConsumerMEP] -->
[http://www.w3.org/2004/08/wsdl/in-only]
 ----- Property [org.apache.servicemix.correlationid] -->
[ID:boccalon-1684-1166781393627-9:2]
 ----- Property [org.apache.servicemix.senderEndpoint] -->
[{http://servicemix.org/cheese}myGenericEnricherEnricher:myGenericEnricherEnricher] ============================ Exchange ==================================
MEP: org.apache.servicemix.jbi.messaging.InOutImpl
Id & status: ID:boccalon-1684-1166781393627-8:2 Active
Sender:
{http://servicemix.org/cheese}myGenericEnricherEnricher:myGenericEnricherEnricher
Service: {http://servicemix.org/cheese}myGenericEnricherEnricherHttp
Endpoint:
ServiceEndpoint[service={http://servicemix.org/cheese}myGenericEnricherEnricherHttp,endpoint=myGenericEnricherEnricherHttp]
Role: [EMAIL PROTECTED]
Interfacename: null
Operation: null
 ----- Properties
 ----- Property [org.apache.servicemix.flow] --> [Seda]
 ----- Property
[Pipeline.Consumer.{http://servicemix.org/cheese}myGenericEnricherEnricher.myGenericEnricherEnricher]
--> [ID:boccalon-1684-1166781393627-9:2]
 ----- Property [Pipeline.Transformer] --> [true]
 ----- Property [org.apache.servicemix.datestamp] -->
[java.util.GregorianCalendar[time=1166781979730,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2006,MONTH=11,WEEK_OF_YEAR=51,WEEK_OF_MONTH=3,DAY_OF_MONTH=22,DAY_OF_YEAR=356,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=6,SECOND=19,MILLISECOND=730,ZONE_OFFSET=3600000,DST_OFFSET=0]]
 ----- Property [Pipeline.ConsumerMEP] -->
[http://www.w3.org/2004/08/wsdl/in-only]
 ----- Property [org.apache.servicemix.correlationid] -->
[ID:boccalon-1684-1166781393627-9:2]
 ----- Property [org.apache.servicemix.senderEndpoint] -->
[{http://servicemix.org/cheese}myGenericEnricherEnricher:myGenericEnricherEnricher]


You can see that the correlation id is mantained.
But in the messages below there is a new correlation id.

============================ Exchange ==================================
MEP: org.apache.servicemix.jbi.messaging.InOnlyImpl
Id & status: ID:boccalon-1684-1166781393627-8:3 Active
Sender:
{http://servicemix.org/cheese}myGenericEnricherEnricher:myGenericEnricherEnricher
Service: {http://servicemix.org/cheese}myScreenOutputEnricher
Endpoint: null
Role: [EMAIL PROTECTED]
Interfacename: null
Operation: null
 ----- Properties
 ----- Property
[Pipeline.Transformer.{http://servicemix.org/cheese}myGenericEnricherEnricher.myGenericEnricherEnricher]
--> [ID:boccalon-1684-1166781393627-8:2]
 ----- Property
[Pipeline.Consumer.{http://servicemix.org/cheese}myGenericEnricherEnricher.myGenericEnricherEnricher]
--> [ID:boccalon-1684-1166781393627-9:2]
 ----- Property [org.apache.servicemix.datestamp] -->
[java.util.GregorianCalendar[time=1166781980021,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2006,MONTH=11,WEEK_OF_YEAR=51,WEEK_OF_MONTH=3,DAY_OF_MONTH=22,DAY_OF_YEAR=356,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=6,SECOND=20,MILLISECOND=21,ZONE_OFFSET=3600000,DST_OFFSET=0]]
 ----- Property [org.apache.servicemix.correlationid] -->
[ID:boccalon-1684-1166781393627-8:3]
 ----- Property [org.apache.servicemix.senderEndpoint] -->
[{http://servicemix.org/cheese}myGenericEnricherEnricher:myGenericEnricherEnricher]
<?xml version="1.0" encoding="UTF-8"?>
<arricchisciAnagraficaResponse xmlns="http://soa.eng.it";
xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
<arricchisciAnagraficaReturn>
<nome>Andrea</nome>
<cognome>scamuzzo</cognome>
<indirizzo>Corso Stati Uniti 23</indirizzo>
<citta>Ferentino</citta>
</arricchisciAnagraficaReturn>
</arricchisciAnagraficaResponse>

The messages below the last one are only the DONE messages, so I omit them.

I hope this can help you.

Regards
Gianfranco Boccalon


Guillaume Nodet ha scritto:
> What I don't understand is why the correlation id is not
> forwarded in asynchronous mode.  The modifications in
> the AsyncBaseLifecycle should ensure that.
> Could you debug and see what happens ?
>
> On 12/21/06, Andrea Zoppello <[EMAIL PROTECTED]> wrote:
>> Guillaume,
>>
>> it's true, I'm working on the same team of Gianfranco that has raised
>> the Jira issue about the
>> introduction of correlation id.
>>
>> At the moment we're working on the 3.0 ServiceMix code base with the
>> patched classes to use
>> the correlation id.
>>
>> We're using the 3.0 version because we need to work on a  stable
>> release, so we're trying to solve
>> the problem of the Pipeline component on the 3.0 codebase.
>>
>> Cheers
>> Andrea Zoppello
>>
>> Guillaume Nodet ha scritto:
>> > Which correlation id are you refering to ? It was only introduced
>> > in 3.1 a few weeks ago ...
>> >
>> > On 12/21/06, Andrea Zoppello <[EMAIL PROTECTED]> wrote:
>> >> Hi Guillaume,
>> >>
>> >> We are working on ServiceMix 3.0 and I suppose that the classes
>> >> ProviderEndpoint and EndpointDeliveryChannel were introduced in
>> >> ServiceMix 3.1.
>> >> The problem, however, happens in asynchronous mode. We didnt try
>> >> synchronous mode.
>> >>
>> >> Cheers
>> >>
>> >> Andrea Zoppello
>> >>
>> >>
>> >> Guillaume Nodet ha scritto:
>> >> > I've refactored the EIP endpoints to now extends the
>> ProviderEndpoint
>> >> > class (this should have been done earlier btw).
>> >> > Would you mind creating a patch on servicemix-common so that
>> >> > the call to EndpointDeliveryChannel#sendSync would behave the same
>> >> > way than the send method (delegate to a method in
>> AsyncBaseLifeCycle)
>> >> > so that the correct properties could be set (correlationId, sender
>> >> > endpoint) ?
>> >> >
>> >> >
>> >> > On 12/19/06, Guillaume Nodet <[EMAIL PROTECTED]> wrote:
>> >> >> I don't understand why a new correlation id is created.
>> >> >> If the pipeline receives an exchange with a correlationId,
>> >> >> when it sends the exchange to the transformer, the correlationId
>> >> >> should be propagated, and the same should be true for
>> >> >> the end target.
>> >> >> However if the synchronous mode is used for the pipeline,
>> >> >> the correlationId will not be set for the outbound message
>> >> >> (the AsyncBaseLifeCycle#sendConsumerExchange is not called).
>> >> >>
>> >> >> Is that the behavior you experience ?
>> >> >>
>> >> >> If yes, I think it should be solved by changing the EIPEndpoint
>> >> >> to extend ProviderEndpoint (from servicemix-common) and
>> >> >> go through the sendConsumerExchange even when sendSync is
>> >> >> called.  This way, the correct behavior would be used for all
>> >> >> components.
>> >> >>
>> >> >> On 12/19/06, Andrea Zoppello <[EMAIL PROTECTED]> wrote:
>> >> >> > Hi all,
>> >> >> > this question is related to the change with id SM-751 on Jira. >> >> >> > I tried a simple process composed in this way: HTTP BC->PIPELINE
>> >> (that
>> >> >> > sends a message to another HTTP BC to invoke an external
>> >> >> > WebService)->Screen BC.
>> >> >> > The problem is related to the propagation of correlation id,
>> >> generated
>> >> >> > by the first HTTP BC.
>> >> >> > The correlation id is propagated in the right way until the
>> message
>> >> >> sent
>> >> >> > by PIPELINE to Screen BC: in this case a new correlation id is
>> >> >> > generated, and this is not the right behaviour.
>> >> >> >
>> >> >> > The problem is in the method processAsync that handle the first
>> >> >> message
>> >> >> > exchange for the pipeline: in this method the utility method
>> >> >> > MessageUtil.transferOutToIn(exchange, me) is used to transfer
>> some
>> >> >> > properties from the source message to the destination message. >> >> >> > The problem is that also some properties from the source message >> >> >> > exchange (not only message) have to be copied in the destination
>> >> >> message
>> >> >> > exchange: in our case the property is the correlation id.
>> >> >> >
>> >> >> > So I changed the class MessageUtil adding a method
>> >> >> > copyExchangeProperties that I use in all transferXXToYY methods
>> >> that
>> >> >> > works with Message Exchanges.
>> >> >> > In my implementation I copied only the correlation Id because
>> i saw
>> >> >> that
>> >> >> > copying all properties give some problems.
>> >> >> >
>> >> >> > With this patch all seems work properly.
>> >> >> > Is this the right way to solve the problem ?
>> >> >> > Should I raise a Jira about this ?
>> >> >> >
>> >> >> > Thanks
>> >> >> >
>> >> >> > Andrea Zoppello
>> >> >> > Engineering Ing. Informatica
>> >> >> >
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Cheers,
>> >> >> Guillaume Nodet
>> >> >>
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>





Reply via email to