JMS - Processamento concorrente dentro do container?

1 resposta
P

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

1 Resposta

D

Pelo q vi ateh agora de JMS e Message-Driven-Beans eles serverm para processamento assincrono e concorrente, pois o container pode gerar várias instâncias do mesmo objeto para fazer a mesma funcao, só para melhorar o desempenho, entao não tem como garantir que o funcionamento de seu MDB será sequencial (um por vez)

Pelo menos foi isso q eu entendi até agora…

Criado 14 de janeiro de 2005
Ultima resposta 10 de fev. de 2005
Respostas 1
Participantes 2