Pessoal,
Estou estudando EJB3 (comprei o livro Enterprise JavaBeans 3.0 5th Edition, do Bill Burkes). Estou tentando fazer uma aplicação exemplo do livro… mas na camada de apresentação eu tou tentando usar JSF… estou tentando injetar o SessionBean via annotation @EJB, mas nao consigo… Já vi alguns topicos semelhantes por aqui mas não achei nenhum com resposta. Alguns sugerem JBoss Seam, outros não chegaram a concluir o tópico. Mas tou tentando aprender “na unha” pra entender por que está errado e/ou por que não é possível fazer o que estou tentando.
Basicamente, o que estou fazendo é:
//interface remota
@Remote public interface I {}
//session bean
@Stateless public class A implementes I {}
//bean do JSF
public class MBean {
@EJB private I meuEJB;
public String m() {
//se tentar acessar this.meuEJB, ele está null;
}
}
Quando tento da forma acima, no console tá exibindo NameNotFoundException (n ta achando o nome do stateless bean) mas se eu for olhar no jmx-console, existe o bean que estou tentando injetar (além disso, no console, na hora do deploy, tb disse que startou o EJB com sucesso).
Já li em outras fontes e vi alguns comentarios nao diretamente ligados a esse problema, mas algo do tipo “ate onde eu sei, nao da pra injetar EJB em beans nao gerenciados pelo servidor via annotation”, ou “pra colocar EJB em bean nao gerenciado precisa fazer um lookup”, ou “se os beans estiverem em pacotes diferentes, nao da pra injetar se a interface for Local”.
Antes a interface era Local, mudei pra Remote e nada… ja tentei fazer um lookup a partir do bean do JSF e dava um erro que nao tinha achado uma instancia “bound” do bean do JSF (creio que signifique não-registrado-no-JNDI).
O desenvolvimento e deploy que estou fazendo eh da seguinte maneira (usando Eclipse + WTP e JBoss):
- criei um projeto EJB e coloquei os beans mapeados com JPA, a interface Remote e o Stateless Bean.
- criei um projeto Web com JSF
- criei um projeto Enterprise e coloquei os modulos, de forma que quando eu peco pra gerar o .ear desse projeto, o conteudo tem um .jar (do projeto ejb), um .war (do projeto web) e no META-INF o application.xml declarando os modulos.
Alguém sabe me dizer o que estou errando? Ou se realmente eu nunca conseguiria fazer isso desse jeito, pois n da pra injetar no bean do JSF (se as suposições acima forem verdadeiras), sei la… to perdido nisso ja ha uns 2 dias, quem puder ajudar, agradeço.
- Só lembrando que estou tentando fazer sem usar frameworks como Spring ou Seam.
)