Glassfish + EJB remote lookup

2 respostas
ricardobocchi

Boa tarde pessoal,

Seguinte, estou tentando fazer lookup de um EJB remoto em um servidor GlassFish 3.1.2.2 (build 5). O código do cliente é o seguinte:

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.1.18");  
           props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");          
             
           InitialContext ic = new InitialContext(props);  
             
           ConnectionFactory cnf = (ConnectionFactory)  ic.lookup("jms/TopicFactory");
           TopicConnection tconn = (TopicConnection)cnf.createConnection();  
           Topic topic = (Topic) ic.lookup("jms/Topic");  
      
           TopicSession tseSession = tconn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);  
           TopicSubscriber ts = tseSession.createSubscriber(topic);  
      
           ts.setMessageListener(new MessageListener() {  
               public void onMessage(Message message) {  
                   try {  
                       System.out.println(((TextMessage) message).getText());  
                   } catch (JMSException ex) {  
                       System.out.println("## error");  
                   }  
               }  
           });          
      
           tconn.start();

maven dependências

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.sun.messaging.mq</groupId>
            <artifactId>imqbroker</artifactId>
            <version>4.5.1-b03</version>
        </dependency>   
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>   
        <dependency>
            <groupId>org.glassfish.main.extras</groupId>
            <artifactId>glassfish-embedded-all</artifactId>
            <version>3.1.2.2</version>            
        </dependency>  
    </dependencies>

Então, quando eu executo esse código na mesma maquina onde o container está rodando, tudo funciona normalmente. Porém quando executo o mesmo código em outra maquina, ele trava fazendo o lookp, sem apresentar erro algum, apenas fica parado no primeiro lookup. Já tentei alterar esse código para fazer o lookup de um EJB dentro de uma aplicação que criei ao invés do Factory JMS, e acontece a mesma coisa.

Alguém sabe se esse é algum problema de permissão de acesso externo ou alguma coisa que tenha mudado nas novas versões do glassfish? Habilitei os logs do corba no glassfish e tudo indica que a conexão está chegando:

Mas a aplicação cliente não é executada. Lembro que já construí esse tipo de cenário antes, com versões anteriores do glassfish, mas não lembro de ter enfrentado esse problema.

Agradeço a ajuda.

2 Respostas

sergio7888

Se esta funcionando na sua maquina mas não esta funcionando no servidor com o mesmo codigo, se sua maquina estiver numa rede diferente do servidor verifique o ip usado pra criar o InitialContext, caso sua maquina esteja namesma rede verifique se no servidor não há algum bloqueio do firewall nesta porta

ricardobocchi

O ip está correto e não há bloqueios, inclusive no log mostra que a conexão chega até o servidor. Caso eu configure um servidor em cada maquina usando JMS Bridge funciona, logo o problema é especificamente com o cliente.

Criado 8 de abril de 2013
Ultima resposta 8 de abr. de 2013
Respostas 2
Participantes 2