Metodo jms com activemq

11 respostas
H

Ola,

Eu to com um problema NO JMS
tenho uma classe de check automatico dos elementos do Banco…
e preciso achar uma forma de chamar o jms nessa classe pra enviar as mensagens de todos esses eventos do banco,

so que não faço ideia de como eu chamo o JMS nessa classe pra poder enviar essas mensagens pro activemq

alguem poderia me ajudar?

nunca trabalhei com sistema de mensagens.

Obrigada

11 Respostas

E

Na verdade JMS é uma API em java que ajuda a você enviar e receber mensagem de um message server. Para facilitar você pode usar um EJB chamado MDB que ajuda você ainda mais a trabalhar com mensageria encapsulando a API do JMS, simplificando sua vida.

Agora vou te fazer uma pergunta rsrs… você pode usar EJB 3 no seu projeto?

Att

H

Olá.... então quer dizer que eu não posso usar JMS PURO??

No caso eu só poderia usar EJB??

Eu sou muito leiga nesse assunto de JMS... e o projeto esta atrasado e eu e minha equipe estamos sem orientação nessa parte, pois achavamos que sera a parte mais facil pelas classes de JMS estarem todas prontas.

Para eu pegar essas mensagem de check do meu banco e enviar pro ActiveMQ eu teria que usar alguma outra tecnologia além do JMS E ACTIVEMQ?

Tem alguma outra dica sem ser com EJB?

Eu tenho esse metodo aqui e tenho que usar ele de alguma forma pra enviar as mensagens sobre o objetos do banco

public void sendObjectMessage(Serializable obj) {
		
		int retryCounter = 0;
		boolean sendOk = false;
		
		tracef("Trying to send object message to jms destination [%s] on [%s]", getDestinationJndiName(), getProviderUrl());

		while(retryCounter < maxRetry && !sendOk) {
			retryCounter++;
			tracef("Sending object message retry number: [%s]", retryCounter);
			
			if(jmsResouceConnection == null)
				connect();
			
			if(jmsResouceConnection != null) {
				Session s = jmsResouceConnection.getProducerSession();
				try {
					ObjectMessage msg = prepareObjectMessage(obj);
					tracef("ObjectMessage prepared...");
					MessageProducer mp = jmsResouceConnection.getMessageProducer();
					tracef("MessageProducer retrieved...");
					mp.send(msg);
					tracef("message sent.");
					sendOk = true;
				} catch (Throwable e) {
					errorf("Error sending message to jms destination [%s] on [%s]", getDestinationJndiName(), getProviderUrl());
					debugException(e);
					jmsResouceConnection = null;
					sendOk = false;
				}				
			}
			
		}
E

pode usar JMS puro sim, eu só falo isto porque com EJB fica mais facil… mais vamos lá…
Primeiro você tem que acessar o banco via JDBC puro ou algum framework ORM como o Hibernate por exemplo e desta forma recuperar o objeto que você quer enviar para Fila, com o objeto em mãos uma opção seria você passar por parâmetro nesse método o objeto que recuperado do banco, assim o getDestinationJndiName() recuperaria JNDI(o endereço da fila) da fila e usava o mp.send(msg); para enviar.

H

Humm… agora as coisas estão ficando mais clara… obrigada

Eu posso chamar esse metodo em outra classe?

Quando você disse para eu passar por parametro o objeto recuperado , seria passar no metodo da propria classe,ou posso chama-lo em outra classe?

Desculpa se não entendi bem essa parte, já estou trabalhando nessas classes jms uns dias seguidos… e só ficou faltando a parte de pegar as mensagens do banco e enviar pro activemq… e parece que ja estou enlouquecendo rs

E

Sim

Tanto Faz… pode ser na mesma classe ou em outra, ai você deveria ter algum conhecimento sobre arquiteturas e separação em camadas de software.

Um exemplo simples é design patterns DAO , você com certeza já dever ter ouvido falar, com ele você recuperaria o objeto do banco de dados para realizar as operações desejadas.

Ex:

Object objeto = dao.recuperarObjeto();
 
 // ai na mesma classe você chamaria o metodo para  
 //enviar a mensagem 

  this.sendObjectMessage(objeto);

Eu tenho um tutorial de JMS que eu fiz ± 1 ano e meio atrás , pois lembro quando estava começando com JMS não achava nenhum tutorial passo a passo e completo sobre o assunto.
Este tutorial usei produtos da IBM , mais o conceito é o mesmo.

Se você quiser me passa seu e-mail via MP que eu disponibilizo ele para você

H

Agora sim esta otimo… muito OBRIGADA!!!

Eu gostaria do tutorial sim,
me passa por favor

email: [email removido]

E

Já disponibilizei para você no seu e-mail.

H

Mais uma dúvida,

Esse jms + activeMQ só funcionca com a JNDI?

E

Não necessariamente , mais pelo que eu vi no seu metodo você vai precisar sim.

Você precisa do nome da fila que vai enviar a mensagem, este nome é definido pelo JNDI ou Java Naming and Directory Interface que é uma API para acesso a serviços de diretórios.

H

Pois é…
obrigada
ai jogo pra dentro do meu projeto o jndi.properties?

E você sabe como eu subo o activemq?

O menino aqui instalou ele no ambiente de desenvolvimento… e fica me fazendo pergunta desse activemq o tempo todo… e o material na internet eh muito pouco.

E

acredito que você pode colocar o jndi.properties em qualquer lugar , o que importa é o caminho que ele esteja para você ler ele.

nunca trabalhei com activemq, só com JMS.

Criado 25 de agosto de 2012
Ultima resposta 28 de ago. de 2012
Respostas 11
Participantes 2