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; } }