Problems with delivering the request message sysnchronously
andre1001 May 21, 2007 4:33 PM
I was trying out JBoss 4.2 GA + ESB MR2 with a client calling one hundred times the server.
I've notice that when the server is shut down in the middle of the process it remains one message on my reply queue. When I start again the server, the client gets this message for the first request causing a shift in the remainders responses. Like this...
request 1 -> gets response from last execution
request 2 -> gets response 1
request 3 -> gets response 2
and so on.
What would be the best solution? Am I doing something wrong?
Thanks.
My code (based on webservice example):
//For setting up the basic WS
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.registry.RegistryException;
//For ESB Interaction
import org.jboss.soa.esb.message.Message; // jbossesb-rosetta.jar
import org.jboss.soa.esb.message.format.MessageFactory; // jbossesb-rosetta.jar
import org.jboss.soa.esb.message.format.MessageType; // jbossesb-rosetta.jar
import org.jboss.soa.esb.listeners.message.MessageDeliveryAdapter; // jbossesb-rosetta.jar
@WebService(name = "Endereco", targetNamespace = "http://webservice/endereco")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class EnderecoWS {
@WebMethod
public EnderecoBean getEndereco(EnderecoBean e){
System.out.println("*** Endereco Recebido WS ***");
System.out.println("ws recebido id: "+e.getId());
System.out.println("ws recebido name: "+e.getName());
EnderecoBean resp = null;
try {
// Cachear delivery adapter para o servico
MessageDeliveryAdapter deliveryAdapter = new MessageDeliveryAdapter("CategoriaEndereco", "ServicoEndereco");
// Cachear o factory de mensagens
MessageFactory mfactory = MessageFactory.getInstance();
Message requestMessage;
Message replyMessage = null;
// Create and populate the request message...
requestMessage = mfactory.getMessage(MessageType.JAVA_SERIALIZED);
requestMessage.getBody().add(e);
// Deliver the request message synchronously - timeout after 5 seconds...
replyMessage = deliveryAdapter.deliverSync(requestMessage, 5000);
resp = (EnderecoBean)replyMessage.getBody().get();
if (resp!=null){
// Logar endereco enviado
System.out.println("*** Endereco Enviado WS ***");
System.out.println("ws enviado id: "+resp.getId());
System.out.println("ws enviado name: "+resp.getName());
}
} catch (Exception ex) {
ex.printStackTrace();
}
return resp;
}
}