Cliente JMS se conecta com localhost mais nao funciona quando coloco em outra maquina

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.


package emissor;

import java.util.Properties;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;

public class EnviaNovoPedido {
	
	
	public static void main(String[] args) throws Exception {
		
		
		 Properties props = new Properties();
		 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");
		 
		 InitialContext initialContext = new InitialContext(props);
		
		
		System.out.println("antes de conectar");		
		ConnectionFactory connectionFactory = (ConnectionFactory) initialContext.lookup("jms/k19factory");
		System.out.println("depois de conectar");
		
		Queue queue = (Queue) initialContext.lookup("jms/pedidos");
		
		Connection connection = connectionFactory.createConnection();
		
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		

		MessageProducer messageProducer = session.createProducer(queue);
		
		TextMessage message = 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?

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.

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.

Deixei assim mais ainda nao da exception acho que é porque nao tem configuração de time-out da conection.


package emissor;

import java.util.Properties;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;

public class EnviaNovoPedido {
	
	
	public static void main(String[] args) {
		
		//7676
		
		try {
			
		 Properties props = new Properties();
		 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");
		 
		 
		 InitialContext initialContext = new InitialContext(props);
		
		
		System.out.println("antes de conectar");		
		ConnectionFactory connectionFactory = (ConnectionFactory) initialContext.lookup("jms/k19factory");
		System.out.println("depois de conectar");
		
		Queue queue = (Queue) initialContext.lookup("jms/pedidos");
		
		Connection connection = connectionFactory.createConnection();
		
		Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
		

		MessageProducer messageProducer = session.createProducer(queue);
		
		TextMessage message = 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 (Exception e) {
			e.printStackTrace();
		}
		
	}

}

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 ‘^]’.

Tá dificil

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.

Estou usando o glassfish 3.1

Sobre essas configurações onde configuro isso no servidor ?

java.naming.security.principal=username
java.naming.security.credentials=password

Quai informações eu devo colocar ?

To desanimando. :frowning:

Essas informações abaixo você insere no properties que será passado ao seu InitialContext.

java.naming.factory.initial = YOUR_PROVIDER 
java.naming.provider.url = tcp://IP : PORT 
java.naming.security.principal=username 
java.naming.security.credentials=password 

Depois que você colocou o try tem retornado NullPointerException no seu InitialContext ?

Deixei assim mas ele ainda está se conectando no localhost, nao coloquei a senha porque não configurei ela no painel do glassfish.

Properties properties = new Properties();
properties.put(“java.naming.provider.url”, “tcp://192.168.0.187:3700”);
properties.put(“java.naming.factory.initial”, “com.sun.enterprise.naming.SerialInitContextFactory”);

	ConnectionFactory connectionFactory = null;
	Connection connection = null;
    //Get the JNDI Context
    try {
        Context jndiContext = new InitialContext(properties);

alguma solução para este problema? como resolveram? estou passando pelo mesmo problema.
local funciona, remoto não;

Tem uma citação aqui muito boa.
https://www.java.net/node/847316