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