Caros,
estou tentando entender como funciona jms
e peguei um exemplo mas não estou conseguindo fazer
funcionar.
Está me dando o erro abaixo :
Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at EnviaFila.main(EnviaFila.java:11)
O que fiz até agora :
- inicializei o Jboss
- e do Eclipse estou tentado enviar e receber mensagens através de classes
O que estou fazendo de errado se alguém puder me ajudar …
agradeço…
abs
--jndi.properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost
--Assina
public class Assina {
public static void main(String[] args) throws NamingException, JMSException {
// obtém referências ao TopicConnectionFactory e à fila via JNDI
Context jndiContext = new InitialContext();
TopicConnectionFactory connectionFactory =
(TopicConnectionFactory)jndiContext.lookup("ConnectionFactory");
Topic topic = (Topic)jndiContext.lookup("topic/testTopic");
// conecta à fila e inicia uma sessão
TopicConnection connection =
connectionFactory.createTopicConnection();
TopicSession session = connection.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
// recebe mensagens
TopicSubscriber subscriber = session.createSubscriber(topic);
connection.start();
while (true) {
TextMessage message = (TextMessage)subscriber.receive(1);
if (message != null)
System.out.println("Recebi: " + message.getText());
}
// libera recursos
//subscriber.close();
//session.close();
//connection.close();
}
}
--
public class AssinaAssincrono {
private class RecebeUmaMensagem implements MessageListener {
public void onMessage(Message msg) {
try {
TextMessage message = (TextMessage)msg;
if (message != null)
System.out.println("Recebi: " + message.getText());
}
catch (JMSException e) {
System.out.println("Erro ao receber mensagem:" + e);
e.printStackTrace();
}
}
};
public AssinaAssincrono() throws NamingException, JMSException {
// obtém referências ao QueueConnectionFactory e à fila via JNDI
Context jndiContext = new InitialContext();
TopicConnectionFactory connectionFactory =
(TopicConnectionFactory)jndiContext.lookup("ConnectionFactory");
Topic topic = (Topic)jndiContext.lookup("topic/testTopic");
// conecta à fila e inicia uma sessão
TopicConnection connection =
connectionFactory.createTopicConnection();
TopicSession session = connection.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
// recebe mensagens
TopicSubscriber subscriber = session.createSubscriber(topic);
subscriber.setMessageListener(new RecebeUmaMensagem());
connection.start();
// libera recursos
//subscriber.close();
//session.close();
//connection.close();
}
public static void main(String[] args) throws
NamingException, JMSException, InterruptedException {
new AssinaAssincrono();
while (true)
Thread.sleep(10000);
}
}
--
public class Publica {
public static void main(String[] args) throws NamingException, JMSException {
// obtém referências ao QueueConnectionFactory e à fila via JNDI
Context jndiContext = new InitialContext();
TopicConnectionFactory connectionFactory =
(TopicConnectionFactory)jndiContext.lookup("ConnectionFactory");
Topic topic = (Topic)jndiContext.lookup("topic/testTopic");
// conecta ao tópico e inicia uma sessão
TopicConnection connection =
connectionFactory.createTopicConnection();
TopicSession session = connection.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
// publica uma única mensagem
TopicPublisher publisher = session.createPublisher(topic);
TextMessage message = session.createTextMessage();
message.setText("Oi via JMS");
publisher.send(message);
//publisher.publish(message);
// libera recursos
publisher.close();
session.close();
connection.close();
}
}
--
public class RecebeFila {
public static void main(String[] args) throws NamingException, JMSException {
// obtém referências ao QueueConnectionFactory e à fila via JNDI
Context jndiContext = new InitialContext();
QueueConnectionFactory connectionFactory =
(QueueConnectionFactory)jndiContext.lookup("ConnectionFactory");
Queue queue = (Queue)jndiContext.lookup("queue/testQueue");
// conecta à fila e inicia uma sessão
QueueConnection connection =
connectionFactory.createQueueConnection();
QueueSession session = connection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
// recebe mensagens
QueueReceiver receiver = session.createReceiver(queue);
connection.start();
while (true) {
TextMessage message = (TextMessage)receiver.receive(1);
if (message != null)
System.out.println("Recebi: " + message.getText());
}
// libera recursos
//sender.close();
//session.close();
//connection.close();
}
}