Acesso ao EJB

8 respostas
furutani

Olá
Estou tentando usar um EJB3 com anotattion, mas ele não faz a atribuição no atributo myEJB e me devolve um NullPointerException.
Se eu usar o lookup funciona normalmente.
Alguém sabe se esqueçi da fazer algo?

import java.rmi.RemoteException;
import java.util.Properties;

import javax.ejb.EJB;
import javax.naming.Context;
import javax.naming.InitialContext;

import br.com.furutani.ejb.MyEJB;
import br.com.furutani.ejb.MyEJBRemote;

public class ClientEJB {
	
	@EJB
	private MyEJB myEJB;
	
	private void hello(String nome){
		try {
			System.out.println(myEJB.sayHello(nome)); //  NullPointerException
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Context context = null;

		try {
			Properties properties = new Properties();
			properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
			properties.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");
			properties.put("java.naming.provider.url","localhost:1099");
			
			context = new InitialContext(properties);
			Object lookup = context.lookup("/meuejb/remote");
			MyEJBRemote beanRemote = (MyEJBRemote) lookup;
			System.out.println(beanRemote.sayHello("Roberto"));
			
			ClientEJB c = new ClientEJB();
			c.hello("Roberto");
			
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}

Obrigado

8 Respostas

ffranceschi

essa classe não é um EJB, e a injeção de dependencia só funciona em EJB Session e MDB

Abraços

furutani

Não é mesmo um EJB, é só o cliente.

ffranceschi

o pior que nem em @Entity funciona hehe… espero que resolvam isso ainda :wink:

Jair_Rillo_Junior

Em um cliente que está fora do ambiente EE, é impossível usar a annotation @EJB. A única alternativa é ficar com a chamada via JNDI mesmo

Tchello

É, vai ter que usar um lookup ou um webservice mesmo.

furutani

Obrigado pelas repostas. Então, eu só usar @EJB dentro de outro EJB?

victorwss

No EJB 3.1, está previsto que você pode instanciar o container (como se fosse um objeto qualquer) e então trabalhar mais ou menos da forma como você quer.

Mas, como o EJB 3.1 ainda está no futuro, o jeito é se virar com os lookups do EJB 3.0.

L

Anotações não fazem nada, apenas anotam! (Óbvio, não?)

Quem injeta o EJB no atributo é um container, qualquer container. Então, todo objeto gerenciado por container terá a anotação EJB “preenchida”. Exemplos de objetos assim: session beans, message-driven beans, servlets, managed beans do JSF e beans do Spring Framework.

Pode haver alguns outros tipod de objetos gerenciados que também podem receber um EJB (sei lá, algum framework web que implementa isso), mas não conheço não.

Criado 26 de fevereiro de 2009
Ultima resposta 27 de fev. de 2009
Respostas 8
Participantes 6