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 - [EMAIL PROTECTED] 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

Reply via email to