Yes, unless the message was sent using a sendSync. The sendSync will only return when the exchange has been received. So even if this could work in your case, you'd better send the DONE status back.

Cheers,
Guillaume

Matthew Clark wrote:

So if the Service Consumer does not require a response, it is OK to
never set the status to DONE?


-----Original Message-----
From: Guillaume Nodet [mailto:[EMAIL PROTECTED]
Sent: 10 November 2005 20:19
To: [email protected]
Subject: Re: [servicemix-user] sendSync and SM 2.0

ServiceMix 2 now enforces correct use of message exchanges.
You can refer to the jbi spec on pages 31 to 33 to have diagrams about
the
different state of an exchange.

Following is a description of the in-only and in-out diagrams, when
the
exchange succeeds.
Note that the exchange can also be set to an ERROR status, but in all
cases, it ends with
a DONE state, without any other informations conveyed : you can not
set
the answer or
an error and the DONE state at the same time.

In-Only
  o the consumer send the message in a ACTIVE state
  o the provider receives the message and send it back with a DONE
state
In-Out
  o the consumer send the message in an ACTIVE state
  o the provider receives the message, fill the response and send the
exchange back with an ACTIVE state
  o the consumer receives the exchange, set the status to DONE and
send
it.

Cheers,
Guillaume Nodet

Matthew Clark wrote:

Craig - I am experiencing similar issues with setting status to DONE
in
SM2.0... the code surrounding this area is quite hard to read so I
haven't worked out what is going on yet.. for some reason DONE is not
in
the list of allowed statuses...





-----Original Message-----
From: Craig Walls [mailto:[EMAIL PROTECTED]
Sent: 10 November 2005 19:12
To: [email protected]
Subject: [servicemix-user] sendSync and SM 2.0


I have a client that sends a message like this:

InOut exchange = serviceMixClient.createInOutExchange();
NormalizedMessage message = exchange.getInMessage();
exchange.setService(new QName("myService"));
message.setProperty("someProperty", "someValue");
message.setContent(new StringSource("<question>How are


you?</question>"));


serviceMixClient.sendSync(exchange);
NormalizedMessage result = exchange.getOutMessage();

On the service-side, my onMessageExchange() method looks a little
something like this:

public void onMessageExchange(MessageExchange exchange) throws
MessagingException {

NormalizedMessage out = exchange.createMessage();
out.setContent(new StringSource("<answer>I am fine</answer>"));
message.setMessage(out, "out");   // PAY ATTENTION
done(exchange);                   // TO THESE LINES
}

In ServiceMix 1.1, this worked fine. But since moving to ServiceMix


2.0, I


get an error indicating that I can't set the status to done. Fine,
so
I


swapped out the commented lines above with:

message.setMessage(out, "out");
send(exchange);

Now my sendSync() never returns. On a hunch, I tried this instead:

answer(exchange, out);

Same effect. onMessageExchange() method completes on the
service-side,
but


on the client-side, the sendSync() method never returns.

I'm certain that it's something that I'm doing wrong, but I'm not
sure
what. Anybody see the problem? Please help!








This message has been scanned for viruses.









Reply via email to