Como fazer lookup de EJB 3.1 diretamente (sem declarar propriedades de JNDI)?

2 respostas
dambros

Boa tarde,

Estou tentando utilizar EJB confome fornecido no tutorial da k19 de EJB3.1 (apostila k22), mas estou com uma dificuldade para rodar clientes remotos diretamente, conforme feito no código deles:

package br. com . k19 . testes ;

import javax . naming . InitialContext ;
import br. com . k19 . sessionbeans . LancadorDeDado ;

public class TesteDeAcesso {
	public static void main ( String [] args ) throws Exception {
		InitialContext ic = new InitialContext ();

		LancadorDeDado lancadorDeDado = ( LancadorDeDado ) ic. lookup ("java:global/dadoWeb/LancadorDeDadoBean ");
		System . out . println ( lancadorDeDado . lanca ());
	}
}

Tenho o EJB deployed em JBoss 7.1.1 e inclusive verificando a JNDI Tree do servidor de aplicação ele informa a existência de “java:global/TesteEJB/CalculadoraBean”, mas quando tento a execução de um main qualquer com o código abaixo, recebo “javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial”.

public static void main(final String[] args) throws Exception {


        final InitialContext ic = new InitialContext();
        final Calculadora calculadora = (Calculadora) ic.lookup("java:global/TesteEJB/CalculadoraBean!br.com.imagetec.ejb.sessionbeans.Calculadora");
        System.out.println(calculadora.soma(10, 20));
}

Já adicionei as dependências do Jboss 7 no meu POM, da seguinte forma:

<dependency>
			<groupId>xxx</groupId>
			<artifactId>TesteEJB</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>org.jboss.as</groupId>
			<artifactId>jboss-as-ejb-client-bom</artifactId>
			<version>7.1.1.Final</version>
			<type>pom</type>
		</dependency>
		<dependency>
			<groupId>org.jboss.as</groupId>
			<artifactId>jboss-as-jms-client-bom</artifactId>
			<version>7.1.1.Final</version>
			<type>pom</type>
		</dependency>

A única forma que consigo rodar é declarando as propriedades do JNDI em um arquivo properties ou hardcoding numa Hashtable, mas pelo tutorial deveria ser possível acessar diretamente. Assim, gostaria de saber o que está faltando para que seja possível acessar conforme o exemplo inicial (primeiro código).

Obrigado.

2 Respostas

braian

Configurou o jndi.properties?

Roqueirow

Olá dambros,

Sei que já faz tempo que postou sua dúvida, mas eu passei pela mesma situação hoje.

Como provavelmente não serei o último a enfrentar este problema, vou dar uma dica.

O exemplo que você citou na apostila, é para rodar utilizando o GlassFish.

Para utilizar o JBoss são necessárias algumas configurações adicionais. Como criar um arquivo jboss-ejb-client.properties, criar um usuário no JBoss…
Todos esses passos estão descritos na mesma apostila. A partir da página 56.

Criado 8 de maio de 2013
Ultima resposta 28 de jul. de 2014
Respostas 2
Participantes 3