Dúvida EJB

2 respostas
D
Pessoal pq tenho que utilizar a Annotation @EJB quando crio um SessionBean para instanciar um EntityManager? Aqui tenho meu SessionBean
@Local
public interface DAOFactory {
	
	public GenericDaoVivo getVivoDAO();
	
	public EntityManager getVivoEntityManager();

}
@Stateless
public class DAOFactoryBeanVivo implements DAOFactoryVivo {
	
               @PersistenceContext(unitName = "VivoEntityManager")
	public EntityManager em;
	
	public EntityManager getVivoEntityManager() {
	  // TODO Auto-generated method stub
	  return em;
	}	
	
}

Aqui tenho os outros SessionBean com a Annotation, eu uso mais nao entendo pq...

@Stateless
public class ProdutoServiceBean implements ProdutoService {

	@EJB
	DAOFactoryVivo dao;

2 Respostas

WRYEL

Porquê seu DAOFactoryVivo é um EJB! :slight_smile:

Entre as necessidades para se criar um EJB (pelo menos até versão 3.0), para declarar um EJB, você usava as anotações @Stateless/@Statefull. Isso faz com que o Container EJB se encarregue de manipular o ciclo de vida do EJB. Antes de sair usando EJB’s, eu aconselharia você ler e entender como funciona é o que é. Aqui tem tutoriais/introduções básicas: http://www.roseindia.net/ejb/

Quando você quiser injetar um EJB no outro, você usa a anotação @EJB, que o container pega a referência para aquele EJB e a injeta. Leia sobre injeção de dependências aqui: http://martinfowler.com/articles/injection.html

D

Opa Wryel, obrigado pelas respostas. Eu estou lendo bastante sobre isso pra tentar entender bem.
No meu ManagedBean na hora de fazer a injeção de dependencia @EJB eu tenho que fazer para a Interface obrigatoriamente? Ou poderia fazer para o SessionBean?
Nesse caso de usar um @EJB dentro de outro foi somente para abstrair né, eu poderia usar o EntityManager diretamente sem precisar utilizar um outro EJB.

Criado 18 de abril de 2012
Ultima resposta 18 de abr. de 2012
Respostas 2
Participantes 2