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);
//..
}
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.
[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.
[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.