Pessoal, bom dia!
Estou iniciando os estudos sobre EJB 3.1. Até o momento, consegui montar um exemplo utilizando a interface Local via D.I. (@EJB) e via lookup,
também consegui utilizar uma interface remota para uma aplicação Client na mesma JVM. Porém, não estou conseguindo
rodar meu Client em outra máquina, pois mesmo configurando (propriedades de acesso / lookup JNDI (Global) / Colocando as libs do meu EJB e gf-client no class path)
quando executo o Client ocorre a exception abaixo:
[color=red]24/10/2011 11:39:40 dadoclientapp.Main main
GRAVE: null
javax.naming.NameNotFoundException: No object bound for java:com/DadoServer/DadoServer-ejb/LancaDadoBean!sessionbean.LancaDadoBeanRemoto [Root exception is java.lang.NullPointerException]
at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:196)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:307)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at dadoclientapp.Main.main(Main.java:33)
Caused by: java.lang.NullPointerException
at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:190)
… 3 more[/color]
Meu EJB:
Interface Remota:
[code] package sessionbean;
import javax.ejb.Remote;
@Remote
public interface LancaDadoBeanRemoto {
int lancaRomoto();
}[/code]
Implementação da Interface:
[code] package sessionbean;
import java.util.Random;
import javax.ejb.Stateless;
@Stateless
public class LancaDadoBean implements LancaDadoBeanRemoto {
private Random gerador = new Random();
public int lancaRomoto(){
return this.gerador.nextInt(5) + 1;
}
}
[/code]
Aplicação Client (EM outra Máquina):
[code] package dadoclientapp;
import java.util.Properties;
import javax.naming.InitialContext;
import sessionbean.LancaDadoBeanRemoto;
public class Main {
public static void main(String args[]) {
Properties props = new Properties();
props.put("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
props.put("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
props.put("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.put("org.omg.CORBA.ORBInitialHost", "192.168.0.125");
props.put("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext ctx = new InitialContext(props);
LancaDadoBeanRemoto beanRemote = (LancaDadoBeanRemoto) ctx.lookup("java:com/DadoServer/DadoServer-ejb/LancaDadoBean!sessionbean.LancaDadoBeanRemoto");
System.out.println("Valor do Dado: " + beanRemote.lancaRomoto());
}
}[/code]
Acredito estar correto o meu Lookup, pois quando implantei o EJB no Servidor via NetBeans o Log do GlassFish apresentou este caminho para configuração JNDI name.
Desconfio de 2 coisas:
- Algo relacionado as propriedades de conexão;
- ALguma configuração especifica no meu Glassfish (Liberação de Porta ou algo do genero);
Há 2 dias estou tentando realizar tal configuração, mais ta complicado - nas minhas pesquisas só encontrei exemplos picados na net.
Alguém pode me dizer onde estou errando?
Obrigado