Bom dia pessoal,
gostaria de tirar uma duvida sobre JMS.
Por vários exemplos que peguei na net e testei. Mas estou com dúvidas de como usar.
Alguém sabe me explicar como pegar o contexto?
No exemplo, tem a linha abaixo:
TopicConnectionFactory factory = (TopicConnectionFactory)ctxt.lookup[b]("jms/TopicConnectionFactory");[/b]
essa parte em negrito eh o nome de uma classe que está em algum jar? É justamente aqui que dá erro.
Olha o erro
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)
Se alguem puder me ajudar
oi
o nome jms/TopicConnectionFactory é o nome JNDI que identifica o recurso, no caso uma fila JMS
poderia ser algo como ebj/MeuBean ou jdbc/MeuDataBase caso fosse um EJB ou então uma conexao com banco
A mensagem de erro diz que você não especificou o contexto inicial, que é a partir de onde o java irá procurar o seu recurso
o que você está usando no teste?
abs
Você tá usando algum servidor de aplicações? Caso positivo, você criou o recurso JMS no servidor?
Geralmente, quando você configura a fila de mensagens no servidor, você especifica um nome JNDI para ele.
Então, estou testando no jdeveloper usando o container OC4J (que é do proprio jdeveloper).
Eu preciso fazer alguma configuração além de carregar o jar?
vou postar meu codigo
public static void main(String[] args) throws Exception
{
Context ctxt = new InitialContext();
TopicConnectionFactory factory = (TopicConnectionFactory)ctxt.lookup("jms/TopicConnectionFactory");
TopicConnection connection = factory.createTopicConnection();
TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = (Topic)ctxt.lookup("jms/Topic");
TopicPublisher publisher = session.createPublisher(topic);
TextMessage msg = session.createTextMessage();
msg.setText("This is a test message");
publisher.publish(msg);
}
Sim, precisa. Consulte a documentação do OC4J para saber como configurar o JMS no servidor de aplicação.
Tnaires,
vc disse que eu tenho que configurar algumas coisas, essas coisas são o arquivo xml?
Não. Quando você trabalha com JMS, há alguns objetos que você precisa configurar diretamente na ferramenta de administração do servidor e associar um nome JNDI a eles. Essas configurações variam de servidor pra servidor; no Weblogic, por exemplo, é preciso criar um servidor JMS para começar a enviar mensagens. No Glassfish deve ser de outra forma.
Como mencionei antes, consulte a documentação do OC4J ou do JDeveloper para saber como fazer isso.
EDITADO: para mais detalhes, veja aqui: http://java.sun.com/javaee/5/docs/tutorial/doc/bncdq.html