(resolvido) algumas duvidas jms

10 respostas
M

<titulo editado por que a duvida mudou>

Boa tarde a todos,

Galera, estou tentando criar MDBs no JBOSS 5.1, mas não estou conseguindo, alguém poderia me ajudar?

Criei um EJB project no eclipse, um Enterprise Aplication project vinculando ao EJB project, por fim dei um new -> Message Driven Bean. Quando eu inicio o JBOSS da um erro relativo a esse MDB.

O código do MDB está assim:

package pacote;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

@MessageDriven(mappedName =&quot;fila&quot;, name=&quot;fila&quot;, activationConfig = {  
      	@ActivationConfigProperty(propertyName = &quot;destination&quot;, 
      							  propertyValue = &quot;queue/fila&quot;), 
		@ActivationConfigProperty(propertyName = &quot;destinationType&quot;, 
								  propertyValue = &quot;javax.jms.Queue&quot;)
	}) 
public class Fila implements MessageListener {


    public Fila() {
        System.out.println(&quot;construtor&quot;);
    }
	
    public void onMessage(Message message) {
    	
        try {
			String s = ((TextMessage) message).getText();
			
			System.out.println(&quot;mensagem recebida: &quot;+s);
		} catch (JMSException e) {
			System.out.println(&quot;deu merda: &quot;);
			e.printStackTrace();
		}
        
    }

}

eis o trecho do erro que o JBOSS imprime:

14:36:23,499 INFO  [ServerImpl] JBoss (Microcontainer) [5.1.0.GA (build: SVNTag=JBoss_5_1_0_GA date=200905221634)] Started in 34s:268ms
14:36:28,661 INFO  [Ejb3DependenciesDeployer] Encountered deployment AbstractVFSDeploymentContext@8072804{vfsfile:/C:/FLAVIO/DESENV/helios%20JBT%20pessoais/workspace/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_5.1/deploy/TesteMDBEAR.ear/TesteMDB.jar/}
14:36:28,661 INFO  [Ejb3DependenciesDeployer] Encountered deployment AbstractVFSDeploymentContext@8072804{vfsfile:/C:/FLAVIO/DESENV/helios%20JBT%20pessoais/workspace/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_5.1/deploy/TesteMDBEAR.ear/TesteMDB.jar/}
14:36:28,677 INFO  [JBossASKernel] Created KernelDeployment for: TesteMDB.jar
14:36:28,677 INFO  [JBossASKernel] installing bean: jboss.j2ee:ear=TesteMDBEAR.ear,jar=TesteMDB.jar,name=fila,service=EJB3
14:36:28,677 INFO  [JBossASKernel]   with dependencies:
14:36:28,677 INFO  [JBossASKernel]   and demands:
14:36:28,677 INFO  [JBossASKernel] 	jboss.ejb:service=EJBTimerService
14:36:28,677 INFO  [JBossASKernel]   and supplies:
14:36:28,677 INFO  [JBossASKernel] 	jndi:null
14:36:28,677 INFO  [JBossASKernel] 	Class:javax.jms.MessageListener
14:36:28,677 INFO  [JBossASKernel] Added bean(jboss.j2ee:ear=TesteMDBEAR.ear,jar=TesteMDB.jar,name=fila,service=EJB3) to KernelDeployment of: TesteMDB.jar
14:36:28,724 INFO  [EJBContainer] STARTED EJB: pacote.Fila ejbName: fila
14:36:29,925 WARN  [JmsActivation] Failure in jms activation org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@1f6f3d1(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@1ae7384 destination=queue/fila destinationType=javax.jms.Queue tx=true durable=false reconnect=10 provider=java:/DefaultJMSProvider user=null maxMessages=1 minSession=1 maxSession=15 keepAlive=60000 useDLQ=true DLQHandler=org.jboss.resource.adapter.jms.inflow.dlq.GenericDLQHandler DLQJndiName=queue/DLQ DLQUser=null DLQMaxResent=5)
javax.naming.NameNotFoundException: fila not bound
	at org.jnp.server.NamingServer.getBinding(NamingServer.java:771)
	at org.jnp.server.NamingServer.getBinding(NamingServer.java:779)
	at org.jnp.server.NamingServer.getObject(NamingServer.java:785)
	at org.jnp.server.NamingServer.lookup(NamingServer.java:443)
	at org.jnp.server.NamingServer.lookup(NamingServer.java:399)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:726)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:686)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at org.jboss.util.naming.Util.lookup(Util.java:222)
	at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupDestination(JmsActivation.java:464)
	at org.jboss.resource.adapter.jms.inflow.JmsActivation.setup(JmsActivation.java:352)
	at org.jboss.resource.adapter.jms.inflow.JmsActivation$SetupActivation.run(JmsActivation.java:729)
	at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:205)
	at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:260)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
14:36:39,938 INFO  [JmsActivation] Attempting to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@1f6f3d1(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@1ae7384 destination=queue/fila destinationType=javax.jms.Queue tx=true durable=false reconnect=10 provider=java:/DefaultJMSProvider user=null maxMessages=1 minSession=1 maxSession=15 keepAlive=60000 useDLQ=true DLQHandler=org.jboss.resource.adapter.jms.inflow.dlq.GenericDLQHandler DLQJndiName=queue/DLQ DLQUser=null DLQMaxResent=5)
14:36:39,938 ERROR [JmsActivation] Unable to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@1f6f3d1(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@1ae7384 destination=queue/fila destinationType=javax.jms.Queue tx=true durable=false reconnect=10 provider=java:/DefaultJMSProvider user=null maxMessages=1 minSession=1 maxSession=15 keepAlive=60000 useDLQ=true DLQHandler=org.jboss.resource.adapter.jms.inflow.dlq.GenericDLQHandler DLQJndiName=queue/DLQ DLQUser=null DLQMaxResent=5)
javax.naming.NameNotFoundException: fila not bound
	at org.jnp.server.NamingServer.getBinding(NamingServer.java:771)
	at org.jnp.server.NamingServer.getBinding(NamingServer.java:779)
	at org.jnp.server.NamingServer.getObject(NamingServer.java:785)
	at org.jnp.server.NamingServer.lookup(NamingServer.java:443)
	at org.jnp.server.NamingServer.lookup(NamingServer.java:399)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:726)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:686)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at org.jboss.util.naming.Util.lookup(Util.java:222)
	at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupDestination(JmsActivation.java:464)
	at org.jboss.resource.adapter.jms.inflow.JmsActivation.setup(JmsActivation.java:352)
	at org.jboss.resource.adapter.jms.inflow.JmsActivation.handleFailure(JmsActivation.java:292)
	at org.jboss.resource.adapter.jms.inflow.JmsActivation$SetupActivation.run(JmsActivation.java:733)
	at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:205)
	at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:260)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
14:36:49,921 INFO  [JmsActivation] Attempting to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@1f6f3d1(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@1ae7384 destination=queue/fila destinationType=javax.jms.Queue tx=true durable=false reconnect=10 provider=java:/DefaultJMSProvider user=null maxMessages=1 minSession=1 maxSession=15 keepAlive=60000 useDLQ=true DLQHandler=org.jboss.resource.adapter.jms.inflow.dlq.GenericDLQHandler DLQJndiName=queue/DLQ DLQUser=null DLQMaxResent=5)
14:36:49,937 ERROR [JmsActivation] Unable to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@1f6f3d1(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@1ae7384 destination=queue/fila destinationType=javax.jms.Queue tx=true durable=false reconnect=10 provider=java:/DefaultJMSProvider user=null maxMessages=1 minSession=1 maxSession=15 keepAlive=60000 useDLQ=true DLQHandler=org.jboss.resource.adapter.jms.inflow.dlq.GenericDLQHandler DLQJndiName=queue/DLQ DLQUser=null DLQMaxResent=5)
javax.naming.NameNotFoundException: fila not bound
	at org.jnp.server.NamingServer.getBinding(NamingServer.java:771)
	at org.jnp.server.NamingServer.getBinding(NamingServer.java:779)
	at org.jnp.server.NamingServer.getObject(NamingServer.java:785)
	at org.jnp.server.NamingServer.lookup(NamingServer.java:443)
	at org.jnp.server.NamingServer.lookup(NamingServer.java:399)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:726)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:686)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at org.jboss.util.naming.Util.lookup(Util.java:222)
	at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupDestination(JmsActivation.java:464)
	at org.jboss.resource.adapter.jms.inflow.JmsActivation.setup(JmsActivation.java:352)
	at org.jboss.resource.adapter.jms.inflow.JmsActivation.handleFailure(JmsActivation.java:292)
	at org.jboss.resource.adapter.jms.inflow.JmsActivation$SetupActivation.run(JmsActivation.java:733)
	at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:205)
	at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:260)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)

antes eu não estava deixando a propriedade "destination", mas ai vi em certas googladas as pessoas indicando usa-la para resolver certos problemas, inclusive uma pagina de documentação do jboss que diz que ela é obrigatória e a coloquei, dai mudou o erro pro erro que colei ai em cima (o erro antigo dizia ja que faltava a propriedade obrigatória), mas assim mesmo ainda continua dando esse erro e não consegui mais progressos, estou a umas 3, 4 horas procurando alguma solução e não encontro...

bom... fico muito grato a quem me ajudar...

10 Respostas

R

Eu nunca fiz isso com EJB, mas por acado você criou a fila no JBoss?
Sem EJB a gente configura um nome da fila em um XML no JBoss, com o mesmo nome do destination que vai na aplicação.

M

eu não mechi em arquivo xml nenhum… pra ser sincero nem sabia que isso é necessário (achava que só as anotações na classe seriam suficiente para subir o MDB… como eu faço isso, se possivel na IDE? tem como fazer via anotações ou só no xml?

é o meu primeiro contato com MDB… peguei um exemplo e tentei replica e deu esse problema, pesquisei o erro, adicionei a propriedade “destination” la em cima da classe na anotação googlando e ainda to meio sem solução pra isso mesmo…

R

Como eu disse, não sei se com EJB é necessário, mas não custa tentar.

&lt;?xml version="1.0" encoding="UTF-8" ?&gt; 
- &lt;server&gt;
- &lt;!--   Cria uma fila de mensagens com o nome de fila
  --&gt; 
- &lt;mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=fila"&gt;
  &lt;depends optional-attribute-name="DestinationManager"&gt;jboss.mq:service=DestinationManager&lt;/depends&gt; 
  &lt;/mbean&gt;
  &lt;/server&gt;

Salva esse arquivo como: fila-destinations-service.xml
Esse é o modelo de arquivo que uso no Jboss 4.x, você pode procurar nas pastas de docs do Jboss 5.1 o modelo desse arquivo. Encontre o arquivo que seja chamado por jbossmq-destinations-service.xml

M

bom… antes de tudo agradeço pela ajuda.

por você ter dito que declarava o destino JMS num arquivo no servidor eu abri o console web do jboss e vi que la dava para criar esse destino JMS, então eu declarei la a queue com o mesmo nome que resolvi usar no código (no jboss administration console fui em resources, jms destinations depois em queue)… beleza, funcionou, startei o jboss com o meu MDB e o jboss subiu sem dar nenhum erro.

Agora o que eu não consegui foi criar o connection factory para usar no client… como faço isso? (la em connection factoryes não achei nenhum botão add, create… enfim)

F

Se você não tiver acesso ao servidor para adicionar o mbean, você pode fazer deploy do mbean junto com a aplicação.

Abraço,

Fred

romarcio:
Como eu disse, não sei se com EJB é necessário, mas não custa tentar.

&lt;?xml version="1.0" encoding="UTF-8" ?&gt; 
- &lt;server&gt;
- &lt;!--   Cria uma fila de mensagens com o nome de fila
  --&gt; 
- &lt;mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=fila"&gt;
  &lt;depends optional-attribute-name="DestinationManager"&gt;jboss.mq:service=DestinationManager&lt;/depends&gt; 
  &lt;/mbean&gt;
  &lt;/server&gt;

Salva esse arquivo como: fila-destinations-service.xml
Esse é o modelo de arquivo que uso no Jboss 4.x, você pode procurar nas pastas de docs do Jboss 5.1 o modelo desse arquivo. Encontre o arquivo que seja chamado por jbossmq-destinations-service.xml

R

Pelo que me lembro o ConnectionFactory não se configura no servidor e sim no código java, tanto na classe que envia quanto na classe que consome as mensagens. É nelas que você indica que vai usar Connectionfactory.
Por exemplo, eu faço assim:

Indico através de uma string que usará ConnectionFactory.
Agora com EJB, tem que ver como se faz.

Parece que é assim a configuração:

@Resourse(mappedName="ConnectionFactory") private ConnectionFactory connectionFactory;
http://www.cefetrn.br/~fellipe/lib/exe/fetch.php?id=disc%3Atds%3A20072%3Apiii&cache=cache&media=disc:tds:20072:mdb-01.pdf
http://netbeans.org/kb/67/javaee/ejb30_pt_BR.html

M

certo, eu usei o nome “ConnectionFactory” para obter a connection factory mas… se eu do um lookup nesse nome, de onde veio esse nome? sempre que usar jms vou precisar usar esse nome? não é configurável, inclusive adicionar um segundo nome?

bom… usei esse nome como disse no client e funcionou no jboss 5.1, agora eu vo testa no glassfish 3.1 (que esta dando uns pau meio meio estranho no windows 7 mas até ta dando pra contorna…), ve se eu descubro como crio a queue nele…etc…

e obrigado de novo pelas explicações.

R

Até onde sei não é configurável. O Jboss trabalha com alguns tipos de conexão, dai tem que passar qual o tipo, no caso ConnectionFactory é um.
Não lembro muito bem, mas dentro da pasta Deploy do Jboss, tem uma pasta referente ao serviço JMS, e lá vai ter alguns arquivos xml que dizem os tipos de conexão que o Jboss trabalha.

Uma vez tentei usar JMS com o Glassfish 2.11 e larguei de mão. Não consegui, tomará que vc consigua.

M

pois é… eu estou tendo problemas com o glassfish mesmo (da um erro estranho ao fazer o deploy da aplicação)… mas por enquanto nem quero me focar nisso, estou com um outro problema ainda…

Quando eu fiz uma queue, funcionou de boa, ao enviar mensagens, recebia tanto pelo client interno, dentro do jar, dentro do ear, quanto em uma aplicação por fora se registrando como consumer… beleza…

Porém quando tentei criar tópics, não deu tão certo, ao enviar uma mensagem de um publisher, o subscriber de dentro do container até recebia a mensagem, mas o subscriber de fora que se registrava para receber a mensagem não recebeu nada. Teriam comome ajudar, mostrar o que eu estou fazendo errado?

Seguem meus códigos:

package pacote;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

@MessageDriven( activationConfig = { 
		@ActivationConfigProperty( 	propertyName = "destinationType", 
				propertyValue = "javax.jms.Topic"),
		@ActivationConfigProperty( 	propertyName = "destination", 
				propertyValue = "meuTopico"), 
		@ActivationConfigProperty( 	propertyName = "acknowledgeMode", 
				propertyValue = "Auto-acknowledge") 
		
})
public class MeuTopico implements MessageListener {
	
    public MeuTopico() {
        System.out.println("construtor meuTopico");
    }
	
    public void onMessage(Message message) {

    	try {
			String s = ((TextMessage)message).getText();
			
			System.out.println("mensagem recebida: "+s);
		} catch (JMSException e) {
			System.out.println("jmsException ");
			e.printStackTrace();
		}
    }

}

2 clients diferentes que eu fiz:

package topicclient;

import java.util.Properties;

import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class ConsumidorTopicClient2 implements MessageListener{

	public static void main(String[] args) {

		ConsumidorTopicClient2 me = new ConsumidorTopicClient2();
		while(true){
			try {
				Thread.sleep(20000);
			} catch (InterruptedException e) { }
		}
		
	}
	
	public static InitialContext getContext() throws NamingException{
		Properties p = new Properties();
		p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.NamingContextFactory");
		p.put(Context.SECURITY_CREDENTIALS, "guest");
		p.put(Context.SECURITY_PRINCIPAL, "guest");
		p.put(Context.PROVIDER_URL, "jnp://localhost:1099");
		
		
		return new InitialContext(p);
	}
	
	public ConsumidorTopicClient2(){
		
		try {
			InitialContext ctx = getContext();
			
			Topic topic = (Topic) ctx.lookup("meuTopico");
			ConnectionFactory factory = (ConnectionFactory) ctx.lookup("ConnectionFactory");
			
			TopicConnection conn = (TopicConnection) factory.createConnection();
			TopicSession session = conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);

//			MessageConsumer consumer = session.createConsumer(topic);
//			consumer.setMessageListener(this);
			
			TopicSubscriber subscriber = session.createSubscriber(topic);
			subscriber.setMessageListener(this);
			
			System.out.println("ouvindo mensagens 2");
		} catch (NamingException e) {
			System.out.println("naming exception ");
			e.printStackTrace();
		} catch (JMSException e) {
			System.out.println("jms exception");
			e.printStackTrace();
		}
		
	}
	
	public void onMessage(Message message){
		
		try {
			String s = ((TextMessage) message).getText();
			System.out.println("mensagem recebida: " + s);
		} catch (JMSException e) {
			System.out.println("jms exception ");
			e.printStackTrace();
		}
		
		
	}
	
}
package topicclient;

import java.util.Properties;

import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class ConsumidorTopicClient1{
//public class ConsumidorTopicClient1 implements MessageListener{
	
	public static void main(String[] args) {

		ConsumidorTopicClient1 me = new ConsumidorTopicClient1();
		while(true){
			try {
				Thread.sleep(20000);
			} catch (InterruptedException e) { }
		}
		
	}
	
	public static InitialContext getContext() throws NamingException{
		Properties p = new Properties();
		p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.NamingContextFactory");
		p.put(Context.SECURITY_CREDENTIALS, "guest");
		p.put(Context.SECURITY_PRINCIPAL, "guest");
		p.put(Context.PROVIDER_URL, "jnp://localhost:1099");
		
		
		return new InitialContext(p);
	}
	
	public ConsumidorTopicClient1(){
		
		try {
			InitialContext ctx = getContext();
			
			Topic topic = (Topic) ctx.lookup("meuTopico");
			ConnectionFactory factory = (ConnectionFactory) ctx.lookup("ConnectionFactory");
			
			TopicConnection conn = (TopicConnection) factory.createConnection();
			TopicSession session = conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
			
//			MessageConsumer consumer = session.createConsumer(topic);
//			consumer.setMessageListener(this);
			
			TopicSubscriber subscriber = session.createSubscriber(topic);
//			subscriber.setMessageListener(this);

			System.out.println("antes do receive");
			Message m = subscriber.receive();
			System.out.println("depois do receive");
			
			onMessage(m);
			
			System.out.println("ouvindo mensagens 1");
		} catch (NamingException e) {
			System.out.println("naming exception ");
			e.printStackTrace();
		} catch (JMSException e) {
			System.out.println("jms exception");
			e.printStackTrace();
		}
		
	}
	
	public void onMessage(Message message){
		
		try {
			String s = ((TextMessage) message).getText();
			System.out.println("mensagem recebida: " + s);
		} catch (JMSException e) {
			System.out.println("jms exception ");
			e.printStackTrace();
		}
		
		
	}
	
}

Produtor de mensagens:

package topicclient;

import java.util.Properties;

import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class ProdutorTopicClient {

	public static void main(String[] args) {
		
		try {
			InitialContext ctx = getContext();
			
			TopicConnectionFactory cf = (TopicConnectionFactory) ctx.lookup("ConnectionFactory");
			Topic topic = (Topic) ctx.lookup("meuTopico");
			
			TopicConnection conn = cf.createTopicConnection();
			TopicSession session  = conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
			
			TextMessage msg = session.createTextMessage();
			msg.setText("mensagem de topico");
			
//			MessageProducer producer = session.createProducer(topic);
//			producer.send(msg);
			
			TopicPublisher publisher = session.createPublisher(topic);
			
			publisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

			publisher.publish(msg);
			
			conn.close();
			System.out.println("mensagem enviada: mensagem de topico");
		} catch (NamingException e) {
			System.out.println("deu erro 0 ");
			e.printStackTrace();
		} catch (JMSException e) {
			System.out.println("deu erro 1 ");
			e.printStackTrace();
		}
		
	}	

	public static InitialContext getContext() throws NamingException{
		Properties p = new Properties();
		p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.NamingContextFactory");
		p.put(Context.SECURITY_CREDENTIALS, "guest");
		p.put(Context.SECURITY_PRINCIPAL, "guest");
		p.put(Context.PROVIDER_URL, "jnp://localhost:1099");
		
		
		return new InitialContext(p);
	}
	
}

se alguém puder me ajudar sou bem grato.

M

faltava uma coisa bem simples, dar um connection.start nas subscribers do topic…

bom… aparentemente está resolvido, vo ver se consigo fazer funcionar no glassfish tb

Criado 4 de março de 2011
Ultima resposta 12 de mar. de 2011
Respostas 10
Participantes 3