Hi GuillaumeI tried something new using the SCRIPT as the provider service rather than another BEAN. Now I think I see a little bit more what is going wrong. What is happening is that the response is handled by the BeanComponent (which is good) but because it is using the MIRROR member to which it sends the response to it fails because of an unknown request (it should work because I fix that issue locally).
From my understanding I think the message is properly sent back to the correct BC/SE, in this case the Bean Component, but because it uses the MIRROR as the address it sends it to the wrong SU, which in this case is the SCRIPT SU which is not even a BEAN. It seems to me that the MIRROR is pointing to the consumer endpoint of the provider SU rather than the consumer SU. That is my log output:
[Notes Andy]: Here I send the InOut Message to he Provider:2007-10-17 08:51:53,515 [58-0:0-thread-1] INFO ScriptInOutControllerBean - onMessageExchange() send new ME: InOut[
id: ID:10.250.1.197-115aea91258-2:0
status: Active
role: consumer
service: {urn:scout}script-receiver-service
operation: IdontCare: 0
in: <?xml version="1.0" encoding="UTF-8"?
><receiver><title>DontCareEvenMore</title><index>0</index></receiver>
]2007-10-17 08:51:53,515 [58-0:0-thread-1] DEBUG BeanComponent - Created correlation id: ID: 10.250.1.197-115aea91258-2:0 2007-10-17 08:51:53,515 [58-0:0-thread-1] DEBUG DeliveryChannelImpl - Send ID:10.250.1.197-115aea91258-2:0 in DeliveryChannel{ID:10.250.1.197-115aea91258-0:0}
[Notes Andy]: "AS-LOG" are log statements I added to Smx2007-10-17 08:51:53,515 [58-0:0-thread-1] INFO DeliveryChannelImpl - AS-LOG, doSend(), ME: InOut[
id: ID:10.250.1.197-115aea91258-2:0
status: Active
role: consumer
service: {urn:scout}script-receiver-service
operation: IdontCare: 0
in: <?xml version="1.0" encoding="UTF-8"?
><receiver><title>DontCareEvenMore</title><index>0</index></receiver>
]2007-10-17 08:51:53,516 [58-0:0-thread-1] INFO DeliveryChannelImpl - AS-LOG, doSend(), send exchange to MIRROR: InOut[
id: ID:10.250.1.197-115aea91258-2:0
status: Active
role: provider
service: {urn:scout}script-receiver-service
operation: IdontCare: 0
in: <?xml version="1.0" encoding="UTF-8"?
><receiver><title>DontCareEvenMore</title><index>0</index></receiver>
]2007-10-17 08:51:53,516 [58-0:0-thread-1] DEBUG SedaFlow - Called Flow send 2007-10-17 08:51:53,518 [58-0:1-thread-1] DEBUG SedaQueue - [EMAIL PROTECTED] dequeued exchange: InOut[
id: ID:10.250.1.197-115aea91258-2:0
status: Active
role: provider
service: {urn:scout}script-receiver-service
endpoint: in-out-receiver
operation: IdontCare: 0
in: <?xml version="1.0" encoding="UTF-8"?
><receiver><title>DontCareEvenMore</title><index>0</index></receiver>
]2007-10-17 08:51:53,518 [58-0:1-thread-1] DEBUG ScriptComponent - Received exchange: status: Active, role: provider 2007-10-17 08:51:53,519 [58-0:1-thread-1] DEBUG ScriptComponent - Retrieved correlation id: ID: 10.250.1.197-115aea91258-2:0
...[Notes Andy]: Script acknowledgment of the message received which also sends the message back with a response
Hello, I got an input message <?xml version="1.0" encoding="UTF-8"? ><receiver><title>DontCareEvenMore</title><index>0</index></receiver>
2007-10-17 08:51:53,591 [58-0:1-thread-1] DEBUG DeliveryChannelImpl - Send ID:10.250.1.197-115aea91258-2:0 in DeliveryChannel{ID:10.250.1.197-115aea91258-0:1} 2007-10-17 08:51:53,594 [58-0:1-thread-1] INFO DeliveryChannelImpl - AS-LOG, doSend(), ME: InOut[
id: ID:10.250.1.197-115aea91258-2:0
status: Active
role: provider
service: {urn:scout}script-receiver-service
endpoint: in-out-receiver
operation: IdontCare: 0
in: <?xml version="1.0" encoding="UTF-8"?
><receiver><title>DontCareEvenMore</title><index>0</index></receiver>
out: <?xml version="1.0" encoding="UTF-8"?><world>hello</world> ][Notes Andy]: As you can see the MIRROR is pointing to the same provider service just with the ROLE of CONSUMER but this Service is a SCRIPT and not a BEAN
2007-10-17 08:51:53,596 [58-0:1-thread-1] INFO DeliveryChannelImpl - AS-LOG, doSend(), send exchange to MIRROR: InOut[
id: ID:10.250.1.197-115aea91258-2:0
status: Active
role: consumer
service: {urn:scout}script-receiver-service
endpoint: in-out-receiver
operation: IdontCare: 0
in: <?xml version="1.0" encoding="UTF-8"?
><receiver><title>DontCareEvenMore</title><index>0</index></receiver>
out: <?xml version="1.0" encoding="UTF-8"?><world>hello</world> ]2007-10-17 08:51:53,596 [58-0:1-thread-1] DEBUG SedaFlow - Called Flow send 2007-10-17 08:51:53,597 [58-0:1-thread-2] DEBUG SedaQueue - [EMAIL PROTECTED] dequeued exchange: InOut[
id: ID:10.250.1.197-115aea91258-2:0
status: Active
role: consumer
service: {urn:scout}script-receiver-service
endpoint: in-out-receiver
operation: IdontCare: 0
in: <?xml version="1.0" encoding="UTF-8"?
><receiver><title>DontCareEvenMore</title><index>0</index></receiver>
out: <?xml version="1.0" encoding="UTF-8"?><world>hello</world> ][Notes Andy]: Correctly the BEAN gets the Message but because of the wrong Service name in the MIRROR it tries to call the Consumer endpoint of the provider -> FAILURE
2007-10-17 08:51:53,597 [58-0:1-thread-2] DEBUG BeanComponent - Received exchange: status: Active, role: consumer 2007-10-17 08:51:53,598 [58-0:1-thread-2] DEBUG BeanComponent - Retrieved correlation id: ID: 10.250.1.197-115aea91258-2:0 2007-10-17 08:51:53,600 [58-0:1-thread-2] INFO BeanComponent - onConsumerExchange(), cor-id: ID: 10.250.1.197-115aea91258-2:0, ME: InOut[
id: ID:10.250.1.197-115aea91258-2:0
status: Active
role: consumer
service: {urn:scout}script-receiver-service
endpoint: in-out-receiver
operation: IdontCare: 0
in: <?xml version="1.0" encoding="UTF-8"?
><receiver><title>DontCareEvenMore</title><index>0</index></receiver>
out: <?xml version="1.0" encoding="UTF-8"?><world>hello</world> ]2007-10-17 08:51:53,600 [58-0:1-thread-2] INFO BeanComponent - AS-LOG, findRequest(), corr-id: ID: 10.250.1.197-115aea91258-2:0, bean: [EMAIL PROTECTED] 2007-10-17 08:51:53,602 [58-0:1-thread-2] ERROR BeanComponent - Error processing exchange InOut[
id: ID:10.250.1.197-115aea91258-2:0
status: Active
role: consumer
service: {urn:scout}script-receiver-service
endpoint: in-out-receiver
operation: IdontCare: 0
in: <?xml version="1.0" encoding="UTF-8"?
><receiver><title>DontCareEvenMore</title><index>0</index></receiver>
out: <?xml version="1.0" encoding="UTF-8"?><world>hello</world> ]java.lang.IllegalStateException: Receiving unknown consumer exchange: InOut[
id: ID:10.250.1.197-115aea91258-2:0
status: Active
role: consumer
service: {urn:scout}script-receiver-service
endpoint: in-out-receiver
operation: IdontCare: 0
in: <?xml version="1.0" encoding="UTF-8"?
><receiver><title>DontCareEvenMore</title><index>0</index></receiver>
out: <?xml version="1.0" encoding="UTF-8"?><world>hello</world> ]at org.apache.servicemix.bean.BeanEndpoint.onConsumerExchange (BeanEndpoint.java:274)
The solution seems to be to set the MIRROR to the consumer rather the provider as it is now. I would think that the DeliveryChannelImpl should do that when the message is sent by the consumer, right?
Thanks - Andy On Oct 16, 2007, at 6:47 PM, Andreas Schaefer wrote:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi GuillaumeIf I am not mistaken then there seems to be a problem either in the DeliveryChannelImpl or the NMR inside ServiceMix when handling asynchronous message exchanges. If you could help understand how ServiceMix discovers the consumer Endpoint it has to send a response back from the provider I could have a closer look into what is going wrong. According to your outline below I did everything correctly. If my hunch is correct then the problem is symptomatic in Smx and is not limited to the Bean component.Please see below: On Oct 16, 2007, at 6:29 PM, Guillaume Nodet wrote:You should not care about the mirror stuff, which is internal toServiceMix. Briefly, each component only see one side of the exchange(while the other one see the mirror). So each time the exchange goes from the consumer to the provider, the mirror exchange is delivered. But components are not aware of that at all.I don't care about the MIRROR member but I see that this seems to be the issue that is causing the problem.From a JBI point of view, there are mainly four different meps, each mep being handled in a different way. For an InOut mep, here are the steps:* the consumer component create an exchange and send it through the NMRdone* the NMR select the target endpoint using the metadata and put it in the endpoint's component DeliveryChannel * the component picks the exchange from its DeliveryChannel, process it by populating the out message, and send it through the DeliveryChanneldone* the NMR route the exchange back to the consumer component * the consumer component picks the exchange from itsDeliveryChannel, process the response, set the status to DONE and sentit back through the DCHere is where things fail with asynchronous message exchange (send ()) and the Smx Bean. The delivery channel or NMR is sending the ME back to the same Bean just the opposite endpoint (consumer endpoint). This is probably due to the MIRROR member (it is just my guess).* the NMR route the exchange to the target component * the target component picks the exchange from its DC and usually just discard itOn 10/17/07, Andreas Schaefer (2) <[EMAIL PROTECTED]> wrote:-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 I had another look into the JBI specification and looking at the Figure 9 I would say that when a Message Exchange (ME) is sent back to the NMR it should go back to the Caller. Now what happens is that when the Target Bean is sending the message back to the NMR through the Delivery Channel the message is handled by the Consumer Endpoint of the Target Bean because of using the Mirror ME. This means at the end the ME is going back to the Target Bean. This is what I see:- - - Source Bean creates ME and sets the Provider as service and sendsit through the Delivery Channel- - - Provider Endpoint of Target Bean is receiving the ME and hands itover to its Bean- Target Bean is handling the ME, sets the response and send themessage back through the Delivery Channel - - - Delivery Channel is handing the ME to the service mentioned in the Mirror of the given ME- - - Consumer Endpoint of Target Bean is receiving the ME and hands itover to its Bean- Target Bean is handling the Response now which I think is WRONGIs there something fundamentally wrong with the general ME handling in the asynchronous case? Shouldn't the Mirror inside the ME point back to the provider (the one that send the ME originally)? And ifshouldn't it be set by the Delivery Channel in the send of the provider?Thanks - Andy -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (Darwin) iD8DBQFHFTecs4gPTNnP0gkRAhlaAJsEUdCmko0bcIXZoI5g/ua0nn1eOwCffMT9 ZmUe5nTrJ/xl75xz2oJYdts= =vnwj -----END PGP SIGNATURE------- Cheers, Guillaume Nodet ------------------------ Blog: http://gnodet.blogspot.com/-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (Darwin) iD8DBQFHFWnHs4gPTNnP0gkRAg8RAJ91wQWGvAtljtKUlihC2fGFIq2OhACfQkdA sNM1ANMul8OEBg0EyWqYwhk= =KVZH -----END PGP SIGNATURE-----
PGP.sig
Description: This is a digitally signed message part
