Erro ao implemetar CDI @EJB NULL

6 respostas
dcorteztec

Bom, boa tarde, vou explicar minha situação. Tecnologias que utilizo no meu projeto (JBOSS 7.1,Struts 2,Maven)Esquema de pastas EAR(EJB,WEB.war).
já utilo lookup no meus ejbs e funciona, queria implementar CDI na minha camada service, mas meu EJB esta vindo null.

Interface
public interface ClasseEAO extends GenericEAO<Classe, Long>{

}
@Stateful
public class ClasseEAOImpl extends GenericEAOImpl<Classe, Long> implements ClasseEAO {

}
Service
public class ManterClasseServiceImpl extends ManterServiceImpl<ClasseDomain> implements ManterClasseService {

	public ManterClasseServiceImpl(Usuario usuario,String messageId) {
		super(usuario,messageId);
	}
	@EJB(lookup="java:global/sEAR/sEJB/ClasseEAOImpl")
	private ClasseEAO classeEAO (ESTA NULL);
Lembrando que essa JNDI esta funcionando porq já utilizo em produção só que com lookup tradicional(Context).

Já utilizei @Inject mas nada.

6 Respostas

dcorteztec

Bom parece que essa anotação @EJB de injeção não funciona legal com struts 2, teria que usar um plugin para isso. quando abrir um espaço n projeto para estudo volto a pensar nisso.

T

dcorteztec esta anatoção @EJB é para fazer referências de EJBs Locais logo não precisa de lookup.

tveronezi

Além de não precisar do lookup como thiagoMek mencionou, vc precisa anotar “ManterClasseServiceImpl” como EJB ou CDI, senão o servidor vai ignorar essa classe.

dcorteztec

é tveronezi vc pode me explicar melhor essa parte “vc precisa anotar “ManterClasseServiceImpl” como EJB ou CDI”.

tveronezi

Exemplo:

@Stateless //ejb
public class ManterClasseServiceImpl extends ManterServiceImpl<ClasseDomain> implements ManterClasseService {  
.
.
.

ou

@Stateful //ejb
public class ManterClasseServiceImpl extends ManterServiceImpl<ClasseDomain> implements ManterClasseService {  
.
.
.

ou

@ApplicationScoped //managed bean
public class ManterClasseServiceImpl extends ManterServiceImpl<ClasseDomain> implements ManterClasseService {  
.
.
.

ou

@SessionScoped //managed bean
public class ManterClasseServiceImpl extends ManterServiceImpl<ClasseDomain> implements ManterClasseService {  
.
.
.

… entre outras, mas vc terá que modificar o construtor. da classe (público, sem parâmetros).
Sem uma dessas anotações, a tua classe não será gerenciada pelo servidor, então as DIs não funcionarão.

dcorteztec

Pow tveronezi era isso que eu pensei na hora da sua resposta, mas eu queria ter certeza , só não vou tentar agora porque estou no meio de uma entrega, assim que testar te darei o feedback. muito obrigado pela ajuda , vlw msm funcionado vai ajudar muito.

Criado 15 de março de 2013
Ultima resposta 20 de mar. de 2013
Respostas 6
Participantes 3