Galera.
Só uma duvida.
Eu tenho uma aplicação REST que posta uma mensagem em uma Queue JMS no Glassfish, e tenho uma outra aplicação EJB com um MDB que pega essas mensagens.
Até ai tudo bem, funciona sem problema.
Mas eu fiz um teste, tirei fora a aplicação EJB e deixei só o REST para inserir na fila, ele funcionou sem problema, mas quando coloquei de novo a aplicação EJB, ele não processou as mensagem. Ou seja, elas foram perdidas.
É isso mesmo? Se não tinha nada lendo a fila, as mensagens se perdem?
Teria como configurar para ele mantar as mensagens até ter uma aplicação pronta para ler ela?
Falou.
Sim, se não tem ninguem “escutando” a fila JMS, as mensagens se perdem.
Teria como evitar isso?
Alguma configuração para segurar por uns minutos antes de apagar a mensagem?
Na verdade, com Queue, a mensagem fica na fila até ser consumida ou expirar.
http://java.sun.com/javaee/5/docs/tutorial/doc/bncdq.html
No caso aqui com o Glassfish 2.1, em menos de 5 minutos a mensagem se expirou.
Alguém sabe aonde eu posso aumentar isso?
Daniel.
Pelo jeito parece que funcionou.
Mas voltando a validar o funcionamento da JMS, estou com uma situação meio que particular.
Se eu rodo uma aplicação inserindo 10 mensagens na fila, não chega todas, chega de 3 a 5.
Sabe o que pode ser?
Valeu mesmo pela ajuda.
Veja log de erro, ou um trace qualquer. Difícil dizer!
Eu configurei o Log4J tanto no programa que manda para a fila e no programa MDB
No programa que envia para a fila, eu coloquei o log após o messageProducer.send().
No MDB eu gravo o log na primeira linha do metodo onMessage.
Resultado final, no primeiro log tenho o registro de todas as mensagens e no segunda log tenho apenas algumas.
Não tem registro de erro nem nesse meu log nem do Glassfish.
E como se a JMS não manda-se a mensagem para o MDB.
Falou.
Correção. Tem um erro no log do Glassfish sim. Esse Deserialize message failed. - cause: java.lang.ClassNotFoundException: teste.Msg
Pergunta. Se um loop manda 10 vezes a mesma mensagem, apenas mudando um unico valor num atributo do objeto, porque metade passa, metade não?
Falou.
Resolvi fazer um teste usando TextMessage em vez de ObjectMessage
No texto estou passando a string “Teste”
Esta acontecendo a mesma coisa. Só o erro que mudou, agora ele dar javax.enterprise.system.stream.err e não diz mais nada.
Falou.
Vivendo e aprendendo. Ou melhor, testes é testes.
Tinha um outro projeto de teste escultando a mesma fila. Por isso só metade dava certo, a outra metade ia para o MDB errado.
Agora esta ok.
Valeu pela ajuda e desculpa por tudo.
Falou.
Aproveitando o tópico…
bruno.fantin você disse que está usando o glassfish e eu também estou fazendo uma aplicação que usa jms. A pergunta é como você fez para que o client do jms ficasse escutando desde o deploy?
aqui eu fiz um .ear e colquei @MessageDriven
você tem alguma idéia melhor?
Você também pode criar um tópico persistido, desse modo o JMS garante a entrega da mensagem, e dessa forma a mensagem não expira.