Pessoal, estou com o seguinte problema:
Estou usando Message Driven Beans do tipo Queue, mas aparentemente as mensgens desta fila estão sendo processadas concorrentemente, pois tenho um gerador de IDs dentro do onMessage gerando o mesmo ID e assim dá erro, ou seja estão sendo processados quase ao mesmo tempo.
Seguem meus metodos:
//Envia a mensagem
private void sendMessage(MyDTO myDTO) throws EJBException {
System.out.println("Looking up the factory ");
InitialContext ctx = getContext();
QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
System.out.println("Looking up the queue ");
Queue queue = (Queue) ctx.lookup("queue/myDestination");
System.out.println("Creating the connection ");
QueueConnection connection = factory.createQueueConnection();
System.out.println("Creating the session ");
QueueSession session = connection.createQueueSession(true, QueueSession.CLIENT_ACKNOWLEDGE);
System.out.println("Creating the sender ");
QueueSender sender = session.createSender(queue);
ObjectMessage message = session.createObjectMessage();
System.out.println ("Setting the object in message ");
message.setObject(myDTO);
System.out.println ("Sending the message ");
sender.send(message);
System.out.println ("Shuting down");
session.commit();
session.close();
connection.close();
System.out.println ("Done ! ");
}
//recebe a mensagem
public void onMessage(javax.jms.Message message) {
System.out.println("Message Driven Bean got message " + message);
if (message instanceof ObjectMessage) {
int id = generateID();
addRegister(id, message);
}
}
Desta maneira meu gerador gera o mesmo ID e dá erro de inserção (PK) na base.
Assim gostaria que a meu metodo onMessage processasse uma mensagm de cada vez, uma após o termino da outra.
Se alguem puder me ajudar eu agradeço.
Obrigado