Erro ao usar a anotação @EJB

Olá a todos.

Pessoal eu estou tentando usar a anotação @EJB mas esto recebendo um erro de NullPointerException!
Eu estou usando o EJB 3 com jboss-4.2.2.GA.

Vejam os detalhes do meu cógido:

Interface:

package business;

import javax.ejb.Local;
import dto.Aluno;
import dto.Curso;

@Local
public interface MatriculaLocal {
      public void processarPagamento(Curso curso, Aluno aluno);	
}

Bean:

package business.implementation;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Stateless;

import business.MatriculaLocal;
import dto.Aluno;
import dto.Curso;

@Stateless
public class MatriculaBean implements MatriculaLocal {

	public void processarPagamento(Curso curso, Aluno aluno) {
		System.out.println("Processando pagamento do curso: " +curso.getDescricao() );
	}
	
	// Métodos do ciclo de vida
	@PostConstruct
	public void initialize() {
		System.out.println("Bean MatriculaBean criado! @PostConstruct executado! ");
	}
	@PreDestroy
	public void exit() {
		System.out.println("Bean MatriculaBean será destruido! @PreDestroy executado! ");
	}

}

Cliente - que é um Servlet:

package cliente;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.util.Hashtable;
import java.util.Properties;

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

import business.Cadastrar;
import business.MatriculaLocal;
import dto.Aluno;
import dto.Categoria;
import dto.Curso;

 public class ClienteServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   
	public ClienteServlet() {
		super();
	}   	
		
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Hashtable prop = new Hashtable(); 
		prop.put(Context.SECURITY_PRINCIPAL, "guest" );
		prop.put(Context.SECURITY_CREDENTIALS, "guest" );
		prop.put(Context.INITIAL_CONTEXT_FACTORY,"org.jboss.security.jndi.JndiLoginInitialContextFactory");
		prop.put(Context.PROVIDER_URL, "jnp://localhost:1099");
		
		Context ctx;
		try {
			ctx = new InitialContext(prop);
			
			MatriculaLocal matricula = (MatriculaLocal)ctx.lookup("MatriculaBean/local");

			Aluno aluno = new Aluno("Rafael Frantz","rfrantz@acme.com");
			Curso c1 = new Curso("TUML00", "UML", 20, 350.50f);
			
			matricula.processarPagamento(c1, aluno);
			
			System.out.println("Objeto pacote curso recuperado ...");
			
						
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    
		
	}

Este código mostado acima funciona perfeitamente! Mas quando eu altero para usar @EJB, o gera erro.
Veja o código:

Bean

@Stateless(name="MatriculaBeanLocal")

Cliente:

 @EJB(name="MatriculaBeanLocal")
 private MatriculaLocal matricula;
	
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
      Aluno aluno = new Aluno("Rafael Frantz","rfrantz@acme.com");
      Curso c1 = new Curso("TUML00", "UML", 20, 350.50f);
			
      matricula.processarPagamento(c1, aluno);
			
    System.out.println("Objeto pacote curso recuperado ...");
		
 }

Alguêm sabe o que pode ser? Eu estou achando que o cliente perde a referência pois não encontra o valor prop.put(Context.PROVIDER_URL, “jnp://localhost:1099”) que fica no contexto.

Até onde eu sei utilizar a anotação @EJB em containers web, mesmo sendo o do JBoss, não funciona.

Se você utilizar o SAS ou o Glassfish funciona.

Será que é isto mesmo?

Este SAS que vc fala é o Oracle OC4J?

Aguêm poderia me informar sobre este problema?

Obrigado.

Não, o SAS é o Sun Application Server.

Continue o seu projeto obtendo a instância do EJB via JNDI (o seu primeiro exemplo que funciona).

Teoricamente, você deveria conseguir utilizar DI em qualquer classe gerenciada pelo container(EJB/MDB/Web Service/Servlet/Interceptor/Listener/etc).

no JBoss/Tomcat a anotação @EJB ainda não foi implementada. (na documentação do JBoss fala isso)

Como o amigo acima disse, você tem que continuar usando a chamada via JNDI. Talvez esse post possa te ajudar: http://myjavaworld.wordpress.com/2008/04/25/example-of-ejb3-session-bean-using-eclipse-europa-and-jboss/

Espero ter ajudado