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