Acesso ao EJB

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?

[code]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();
	} 
}

}
[/code]

Obrigado

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

Abraços

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

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

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

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

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

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.

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.