Testando EJB's no JBoss + Europa

Opa,

estou comecando a criar meus primeiros EJB’s. Consegui coloca-los no ar usando JBoss, e consigo ve-los na pagina de configuracao do servidor.

Agora, estou com dificuldade em criar uma simples classe (cliente) para testar o EJB. Estou seguindo esse guia: http://java.boot.by/scbcd5-guide mas como estou usando Eclipse Europa, e ele usa uma versao anterior, os passos sao diferentes…

Meu ‘Standalone Test Client’ tem esse codigo, que eh aonde o erro esta ocorrendo quando rodo a classe com o EJB ‘no ar’:

Context jndiContext = new InitialContext(); Object ref = jndiContext.lookup("StatelessCalculatorBean/remote"); StatelessCalculator calc = (StatelessCalculator) PortableRemoteObject .narrow(ref, StatelessCalculator.class);

O erro eh o seguinte:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property…

Esse eh o jeito correto de criar clientes para um EJB?
Como faco para testar meu EJB usando Dependency Injection?

Valeu!

Veja se não há nenhuma exeção no log do Jboss, às vezes o bean não é deployado correntamente e não existe registro dele no servidor.

Para confirmar isso, vc pode ir na console de administração do Jboss, ver a árvore JNDI e confrmar que o caminho que vc está tentando fazer o lookup existe.

Se vc esta usando JBoss vc precisa setar parametros para a criação do InitialContext.
Uma maneira de fazer é essa:

        Properties env = new Properties();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        env.put(Context.PROVIDER_URL, "jnp://localhost:1099"); // "localhost" se o seu client estiver rodando na mesma maquina.
         InitialContext context = InitialContext(env);

outra coisa, se vc esta usando EJB3, vc pode fazer o lookup direto para sua interface.

           SeuBeanRemote seuBeanRemote = (SeuBeanRemote ) context.lookup("ejb/SeuBeanRemote /remote");//Nome JNDI.

[]´s

[quote=fuzzyMind]Veja se não há nenhuma exeção no log do Jboss, às vezes o bean não é deployado correntamente e não existe registro dele no servidor.

Para confirmar isso, vc pode ir na console de administração do Jboss, ver a árvore JNDI e confrmar que o caminho que vc está tentando fazer o lookup existe.[/quote]

Na minha arvore JNDI encontrei essas 2 linhas relacionadas ao meu Bean:

± StatelessCalculatorBean (class: org.jnp.interfaces.NamingContext)
| ± remote (proxy: $Proxy63 implements interface by.mz.ejb.StatelessCalculator,interface org.jboss.ejb3.JBossProxy)

O “fejãozinho” ta la 8).

jgbt, o seu código funcionou, com apenas 1 correção. Tive que retirar o ‘ejb’ desse parametro:

context.lookup("ejb/SeuBeanRemote /remote");

que ficou assim:

context.lookup("SeuBeanRemote /remote");

Valeu! :smiley:

ps.: da pra fazer com depency injection?

Claro, eu so coloquei um exemplo :smiley: , depende de qual nome JNDI vc setou para o seu bean, sacou?

em um client standalone não, se for um EJB que referencia outro EJB sim.

[]´s