servicemix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Charles Souillard <Charles.Souill...@ext.bull.net>
Subject Re: channel/exchange selection
Date Tue, 29 Aug 2006 08:00:46 GMT
Hi Guillaume,

I can see in the mailling list that the 3.0 M2 was released on the 20th 
of june. Is that correct ?
I am currently using a personnal build from the 19th of june...
As I explained in a previous thread (07/19/06), I can not use for the 
moment the current nightly build because of the error concerning the 
xbean jar file...

Can you tell me if I can find (and where) a nightly build containing the 
fix without the xbean problem ?

Thanks a lot
Charles

Guillaume Nodet wrote:
> Implementing a factorial using sendSync is the worst possible example !
> This is the one I used in a previous thread to explain how you could
> easily deadlock ServiceMix :)  Unless you have an unlimited number
> of threads available.
>
> Anyway, to answer your questions, there is one and only one channel
> for each component, and a message exchange can not be *reused*.
>
> Also, make sure you use a post M2 release (a snapshot) as a critical
> bug has been fixed which was causing deadlocks when exchanges
> were send from a component to itself (it may be another endpoint,
> but in the same component).
>
> On 8/24/06, Charles Souillard <Charles.Souillard@ext.bull.net> wrote:
>>
>> Hi all,
>>
>> I am currently working on a SE. My problem is to understand how channels
>> are managed into the jbi container. My use case is the following :
>>
>> the NMR calls my BPEL SE. I receive a messageExchange and I send the xml
>> document to my BPEL engine. In some cases the process must call some
>> other services (invoke statement of the BPEL) which are deployed on the
>> NMR. In my particular case, I am trying to execute a factorial service
>> (it give the mathematical result of the factorial operand : 10! for
>> example). I can summarize my problem as the following :
>>
>> NMR - 1 > BPEL SE - 2 > BPEL engine - 3 > BPEL SE - 4 > NMR - 5 >
BPEL
>> SE - 6 > BPEL Engine - 7 > BPEL SE ....
>>
>> So is ity mandatory to use the same channel / exchage in all of these
>> flows ?
>>
>> In my case, I use the given exchange for the arrow #1 and for arrow #4 I
>> can get the BPEL SE component channel and then I create a new 
>> exchange...
>> Is that correct ?
>>
>> In that case, when I perform the following code, after the arrow #4 the
>> message is sent but no response is given in return to my RR call... :
>>
>> Element body = <myBody>
>> URI mep = URI.create("http://www.w3.org/2004/08/wsdl/in-out");
>> MessageExchangeFactory factory = channel.createExchangeFactory();
>> MessageExchange me = factory.createExchange(mep);
>> me.setInterfaceName(new QName(portTypeNS,portTypeName));
>> QName serviceQN = new QName(serviceNS,serviceName);
>> me.setService(serviceQN);
>> me.setEndpoint(this.component.getComponentContext
>> ().getEndpoint(serviceQN,portName));
>> me.setOperation(new QName(operationNS,operationName));
>> NormalizedMessage nm = me.createMessage();
>> me.setMessage(nm, "in");
>> nm.setContent(new DOMSource(body));
>> boolean res = this.channel.sendSync(me);
>> System.out.println("after sendSync, res = "+res);       => I get res =
>> true
>> if (!res) {
>>   throw new Exception("OrchestraMessageListener.onMessage, Timeout on
>> sending request/response message");
>> }
>> if (me.getStatus() == ExchangeStatus.ACTIVE) {
>>   if (me.getFault == null) {
>>     nm = me.getMessage("out");
>>     if (nm != null) {
>>       newBody = ((Document)
>> this.transformer.toDOMNode(nm)).getDocumentElement();
>>       System.out.println("newBody = "+newBody);
>>     }
>>   }
>> }
>>
>>
>> I have tried to activate and understand traces but it is hard for me...
>> I can give then to you if you have an idea ?
>>
>> DEBUG - DeliveryChannelImpl            - SendSync
>> ID:frec445363-48773-1156420954393-5:0 in DeliveryChannel{Orchestra}
>> DEBUG - DeliveryChannelImpl            - Sent: MessageExchange[
>>   id: ID:frec445363-48773-1156420954393-5:0
>>   status: Active
>>   role: consumer
>>   interface: {urn:factorialService:bpel:bsoap}FactorialServicePT
>>   service: {urn:factorialService:bpel:bsoap}FactorialServiceServiceBP
>>   endpoint: FactorialServicePT
>>   operation: {urn:factorialService:bpel:bsoap}process
>>   in: <?xml version="1.0" encoding="UTF-8"?><process
>> xmlns="urn:factorialService:bpel:bsoap"><value
>> xmlns="">2.0</value></process>
>> ]
>> DEBUG - DefaultBroker                  - Routing exchange 
>> MessageExchange[
>>   id: ID:frec445363-48773-1156420954393-5:0
>>   status: Active
>>   role: provider
>>   interface: {urn:factorialService:bpel:bsoap}FactorialServicePT
>>   service: {urn:factorialService:bpel:bsoap}FactorialServiceServiceBP
>>   endpoint: FactorialServicePT
>>   operation: {urn:factorialService:bpel:bsoap}process
>>   in: <?xml version="1.0" encoding="UTF-8"?><process
>> xmlns="urn:factorialService:bpel:bsoap"><value
>> xmlns="">2.0</value></process>
>> ] to:
>>
>> ServiceEndpoint[service={urn:factorialService:bpel:bsoap}FactorialServiceServiceBP,endpoint=FactorialServicePT]

>>
>> DEBUG - SedaFlow                       - Called Flow send
>> DEBUG - DeliveryChannelImpl            - Waiting for exchange
>> ID:frec445363-48773-1156420954393-5:0 (10f29f) to be answered in
>> DeliveryChannel{Orchestra} from sendSync
>> DEBUG - SedaQueue                      -
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1@a8d1e4 dequeued
>> exchange: MessageExchange[
>>   id: ID:frec445363-48773-1156420954393-5:0
>>   status: Active
>>   role: provider
>>   interface: {urn:factorialService:bpel:bsoap}FactorialServicePT
>>   service: {urn:factorialService:bpel:bsoap}FactorialServiceServiceBP
>>   endpoint: FactorialServicePT
>>   operation: {urn:factorialService:bpel:bsoap}process
>>   in: <?xml version="1.0" encoding="UTF-8"?><process
>> xmlns="urn:factorialService:bpel:bsoap"><value
>> xmlns="">2.0</value></process>
>> ]
>> DEBUG - DeliveryChannelImpl            - Processing inbound exchange:
>> MessageExchange[
>>   id: ID:frec445363-48773-1156420954393-5:0
>>   status: Active
>>   role: provider
>>   interface: {urn:factorialService:bpel:bsoap}FactorialServicePT
>>   service: {urn:factorialService:bpel:bsoap}FactorialServiceServiceBP
>>   endpoint: FactorialServicePT
>>   operation: {urn:factorialService:bpel:bsoap}process
>>   in: <?xml version="1.0" encoding="UTF-8"?><process
>> xmlns="urn:factorialService:bpel:bsoap"><value
>> xmlns="">2.0</value></process>
>> ]
>> DEBUG - DeliveryChannelImpl            - Notifying exchange
>> ID:frec445363-48773-1156420954393-5:0(10f29f) in
>> DeliveryChannel{Orchestra} from processInboundSynchronousExchange
>> DEBUG - DeliveryChannelImpl            - Notified:
>> ID:frec445363-48773-1156420954393-5:0(10f29f) in
>> DeliveryChannel{Orchestra} from sendSync
>> after sendSync, res = true
>> status = Active
>> fault = null
>> error = null
>> out = null
>> newBody = null
>>
>>
>> Thanks a lot
>> Charles
>>
>>
>
>

Mime
View raw message