Cliente JMS se conecta com localhost mais nao funciona quando coloco em outra maquina
13 respostas
Flavio_machine
Criei essa classe para enviar uma mensagem para o broker usando glassfish quando rodo ela no eclipse, ou faço um jar , ela funciona mais quando coloco em outra maquina ele não consegue se conectar.
Se alguém poder ajudar será muito bom vindo, estou a 2 dias tentando reolvar isso.
Abs.
packageemissor;importjava.util.Properties;importjavax.jms.Connection;importjavax.jms.ConnectionFactory;importjavax.jms.MessageProducer;importjavax.jms.Queue;importjavax.jms.Session;importjavax.jms.TextMessage;importjavax.naming.InitialContext;publicclassEnviaNovoPedido{publicstaticvoidmain(String[]args)throwsException{Propertiesprops=newProperties();props.setProperty("java.naming.factory.initial","com.sun.enterprise.naming.SerialInitContextFactory");props.setProperty("java.naming.factory.url.pkgs","com.sun.enterprise.naming");props.setProperty("java.naming.factory.state","com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");// props.setProperty("org.omg.CORBA.ORBInitialHost", "192.168.0.187");// props.setProperty(InitialContext.PROVIDER_URL, "192.168.0.187");// props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");System.setProperty("org.omg.CORBA.ORBInitialHost","192.168.0.187");System.setProperty("org.omg.CORBA.ORBInitialPort","3700");InitialContextinitialContext=newInitialContext(props);System.out.println("antes de conectar");ConnectionFactoryconnectionFactory=(ConnectionFactory)initialContext.lookup("jms/k19factory");System.out.println("depois de conectar");Queuequeue=(Queue)initialContext.lookup("jms/pedidos");Connectionconnection=connectionFactory.createConnection();Sessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);MessageProducermessageProducer=session.createProducer(queue);TextMessagemessage=session.createTextMessage();message.setText(" Mensagem enviada com sucesso ");messageProducer.send(message);messageProducer.close();session.close();connection.close();System.out.println("Fim");System.exit(0);}}
“Ela não consegue se conectar” provavelmente signifique que “Há um erro na conexão”. Esse erro é importante para sabermos o que ocorre.
Pode nos mostrar qual é este erro?
Flavio_machine
Não da erro quando executo localhost ele gera essas informações no console
30/07/2012 2:11:36 PM com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.
antes de conectar
30/07/2012 2:11:39 PM org.hibernate.validator.util.Version <clinit>
INFO: Hibernate Validator 4.2.0.Final
30/07/2012 2:11:39 PM com.sun.messaging.jms.ra.ResourceAdapter start
INFO: MQJMSRA_RA1101: GlassFish MQ JMS Resource Adapter: Version: 4.5.2 (Build 2-d) Compile: Thu Dec 8 17:30:48 PST 2011
30/07/2012 2:11:39 PM com.sun.messaging.jms.ra.ResourceAdapter start
INFO: MQJMSRA_RA1101: GlassFish MQ JMS Resource Adapter starting: broker is REMOTE, connection mode is TCP
30/07/2012 2:11:39 PM com.sun.messaging.jms.ra.ResourceAdapter start
INFO: MQJMSRA_RA1101: GlassFish MQ JMS Resource Adapter Started:REMOTE
depois de conectar
Fim
quando tento em um glassfish em outra máquina nao aparece as outras INFO so essas linha
antes de conectar
30/07/2012 2:12:50 PM com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.
drsmachado
Exceptions são amigas.
Elas não são criadas apenas para deixar o código mais bonito/mais feio.
Servem para nos dizer que algo está errado.
Isso
public static void main(String[] args) throws Exception {
Não é uma boa prática, desde que o método main é o primeiro a ser chamado, logo, ele deve tratar a exceção. Ou seja, aqui você está lançando a exception e toda informação da mesma para quem?
Envolva o código num try/catch (vários catch, um para cada possível tipo de exception a ser lançada).
Aí você terá o que precisa.
Flavio_machine
Deixei assim mais ainda nao da exception acho que é porque nao tem configuração de time-out da conection.
packageemissor;importjava.util.Properties;importjavax.jms.Connection;importjavax.jms.ConnectionFactory;importjavax.jms.MessageProducer;importjavax.jms.Queue;importjavax.jms.Session;importjavax.jms.TextMessage;importjavax.naming.Context;importjavax.naming.InitialContext;publicclassEnviaNovoPedido{publicstaticvoidmain(String[]args){//7676try{Propertiesprops=newProperties();props.setProperty("java.naming.factory.initial","com.sun.enterprise.naming.SerialInitContextFactory");props.setProperty("java.naming.factory.url.pkgs","com.sun.enterprise.naming");props.setProperty("java.naming.factory.state","com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");props.setProperty("org.omg.CORBA.ORBInitialHost","192.168.0.187");// props.setProperty(InitialContext.PROVIDER_URL, "192.168.0.187");props.setProperty("org.omg.CORBA.ORBInitialPort","3700");System.setProperty("org.omg.CORBA.ORBInitialHost","192.168.0.187");System.setProperty("org.omg.CORBA.ORBInitialPort","3700");InitialContextinitialContext=newInitialContext(props);System.out.println("antes de conectar");ConnectionFactoryconnectionFactory=(ConnectionFactory)initialContext.lookup("jms/k19factory");System.out.println("depois de conectar");Queuequeue=(Queue)initialContext.lookup("jms/pedidos");Connectionconnection=connectionFactory.createConnection();Sessionsession=connection.createSession(true,Session.AUTO_ACKNOWLEDGE);MessageProducermessageProducer=session.createProducer(queue);TextMessagemessage=session.createTextMessage();message.setText(" Mensagem enviada com sucesso ");messageProducer.send(message);messageProducer.close();session.close();connection.close();System.out.println("Fim");System.exit(0);}catch(Exceptione){e.printStackTrace();}}}
Flavio_machine
Dei um telnet gerou isso acho que nao existe problemas de firewall, acho que é algumar configuração do glassfish.
flavop@PrFlavio:~$ telnet 192.168.0.187 3700
Trying 192.168.0.187…
Connected to 192.168.0.187.
Escape character is ‘^]’.
Flavio_machine
Tá dificil
johnny_quest
Dependendo do seu servidor glassfish, talvez precise inserir user/password
Mas são muitas poucas informações que você passou que pode ajudar a solucionar o problema.
Outra ajuda seria fazer um Remote Debugging no seu jar na outra máquina, assim você poderia ver o que
realmente está acontecendo quando é executado o seu programa, e ver se está sendo injetado o initialContext.
Ademais, tente por teste, utilizar as classes do pacote naming em vez do de CORBA.
Flavio_machine
Estou usando o glassfish 3.1
Sobre essas configurações onde configuro isso no servidor ?