Jms

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