Problema de injeção EJB

galera seguinte, sou novo na area de EJB e nao estou conseguindo fazer uma injeção de dependencia…

vou por algumas partes dos codigos para vcs tentarem me ajudar

o problema é… a variavel “service” nao injeta, fica com o valor null, aí da pau em todos os metodos da classe

a classe de controle no cliente…

public class EmployeeControl {

	@EJB services.EmployeeService service;

	public entity.Employee createEmployee(int id, String name, long salary){
		return service.createEmployee(id, name, salary);
	}

        //..
}

o sessionbean

@Stateless
public class EmployeeServiceBean implements EmployeeService{
	
	@PersistenceContext(unitName="EmployeeService")
	protected EntityManager em;
	
	public EntityManager getEntityManager(){
		return em;
	}
		
	public Employee createEmployee(int id, String name, long salary){
		Employee emp = new Employee(id);
		emp.setName(name);
		emp.setSalary(salary);
		getEntityManager().persist(emp);
		return emp;
	}

        //..
}

a entidade…

@Entity
public class Employee implements Serializable{
   
	private static final long serialVersionUID = 1L;
    @Id private Integer id;
	private String nome;
	private Long salary;
	
	public Employee(){
		
	}
	
	public Employee(int id){
		this.id = id;
	}

        //..
}

e a interface do bean…

public interface EmployeeService {
	
	public Employee createEmployee(int id, String name, long salary);
	
	//..
	
}

grato desde ja

Verifique também as mensagens na console do JBoss

Isso que vc esta tentando fazer não vai funcionar.
O container so consegue fazer injeção de dependencias em classes gerenciadas por ele.
Ou seja, EJB’s, Servlets e por ae vai.
Sua classe EmployeeControl não é gerenciada pelo container, por isso não vai funcionar.

[]´s

é verdade, percebi isso logo depois que postei

então injeção só é valido se usado dentro de session beans e message-driven? se eu tiver um servlet eu posso fazer injecao tambem?

[quote=aleeebr]é verdade, percebi isso logo depois que postei

então injeção só é valido se usado dentro de session beans e message-driven? se eu tiver um servlet eu posso fazer injecao tambem?[/quote]

Em um servlet sim, porém dependendo da versão do JBoss, nem em um servlet irá funcionar. Porque o JBOss usa o Tomcat como Container Web e essa versão do Container ainda não implementa a anotação @EJB (me parece que apenas as versões 5.x em diante que funciona)… Agora se você testar no glassfish, por exemplo, irá funcionar.

Portanto, se você está usando o JBoss 4.2.x por exemplo, você deve fazer a chamada via JNDI. Tem um exemplo aqui: http://www.jairrillo.com/blog/2008/04/25/example-of-ejb3-session-bean-using-eclipse-europa-and-jboss/

[quote=aleeebr]é verdade, percebi isso logo depois que postei

então injeção só é valido se usado dentro de session beans e message-driven? [/quote]

Não. Quando vc faz deploy no JBoss, pode colocar nos servlets tb. Baixe a última versão do JBoss EJB3. Lá existem pencas de exemplos com uso da anotação @EJB.

Olhando informações sobre o JBoss: JBoss 5.0.0.CR2 Release Notes

Acho que só vai funcionar quando eles corrirem. :cry:

no glassfish funciona, pelo menos na versao q eu to usando

[quote=warley]Olhando informações sobre o JBoss: JBoss 5.0.0.CR2 Release Notes

Acho que só vai funcionar quando eles corrirem. :cry:
[/quote]

Na 4.2.2 e na 4.3 funciona. :wink:

[quote]

Na 4.2.2 e na 4.3 funciona. :wink: [/quote]

Existe JBoss 4.3?

Olha os que eu vi no site para baixar:
5.0.0.CR2
4.2.3.GA
5.0.0.CR1
5.0.0.Beta4
5.0.0.Beta3
4.2.2.GA
4.2.1.GA
4.2.0.GA

Valeu. O correto era 4.2.3 mesmo.