Hi Guillaume

I 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 Smx

2007-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 Guillaume

If 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 to
ServiceMix. 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 NMR

done

   * 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
DeliveryChannel

done

   * the NMR route the exchange back to the consumer component
   * the consumer component picks the exchange from its
DeliveryChannel, process the response, set the status to DONE and sent
it back through the DC

Here 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 it

On 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 sends
it through the Delivery Channel

- - - Provider Endpoint of Target Bean is receiving the ME and hands it
over to its Bean
- Target Bean is handling the ME, sets the response and send the
message 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 it
over to its Bean
- Target Bean is handling the Response now which I think is WRONG

Is 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 if
shouldn'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-----

Attachment: PGP.sig
Description: This is a digitally signed message part

Reply via email to