SEVERE: Class [ Lebjs/HelloEjbRemote; ] not found. Error while loading [ class servlets.TesteServ ]
WARNING: Error in annotation processing: java.lang.NoClassDefFoundError: Lebjs/HelloEjbRemote;
WARNING: This web app [/opt/glassfish/domains/domain1/eclipseApps/ProjClientWeb/] has no ejb reference by the name of [hello]
SEVERE: Exception while invoking class org.glassfish.ejb.startup.EjbDeployer load method
Note: Lebjs/HelloEjbRemote;
Esse L antes de ebjs/HelloEjbRemote parece ser a causa do problema.
Você postou muito poucas informações sobre o problema. Mas pelo que notei no título você está tentando injetar um EJB remoto, correto?
Não existe como fazer injeção de dependencia remota. DI você consegue apenas para objetos locais ou que estejam na mesma VM. Mas você pode usar um service locator para isso.
Como eu disse, você não consegue mesmo fazer injeção de dependencia quando um EJB é remoto. Injeção de dependencia funciona apenas com componentes (bean ou resources) locais.
O que você pode fazer é usar o antigo Service Locator. No glassfish um service locator é conforme meu exemplo abaixo. Note que o glassfish exporta os EJBs com o full qualified name da interface remota do EJB quando você tem apenas “uma interface por bean”.
[code]public final class ServiceLocator {
private static final InitialContext ctx;
static {
try {
ctx = new InitialContext();
} catch (NamingException e) {
logger.error(EJB_INFRAESTRUCTURE_LOOKUP, e);
throw new InfraestructureException(EJB_INFRAESTRUCTURE_LOOKUP);
}
}
public static <T> T lookup(Class<T> clazz) {
try {
logger.info("looking for EJB {}", clazz);
return (T) ctx.lookup(clazz.getName());
} catch (NamingException e) {
throw new InfraestructureException(e);
}
}
Desculpem reviver o tópico, procurei por aqui e no Google e não encontrei uma resposta satisfatória.
Se tenho uma aplicação Web com Struts eu consigo na Action “Injetar” um EJB? Ele precisa estar no mesmo projeto? Ou Preciso apenas ter acesso a sua Interface?
Em meus testes chamei via Lookup um EJB através de sua interface Local e funcionou normalmente(Mesmo o EJB estando em projeto separado e já deployado)
Tentei injetar (via @EJB) o mesmo EJB e não funcionou.
Não, não é possível e nem com reza de pai de santo você consegue injetar um EJB em Struts.
Injeção em EJB só funciona para beans stateless e quando o bean que receberá a injeção seja gerenciado pelo container. Isso vale para JSF e Servlets, mas não para beans do Struts.
[quote=idev4web]Eu nao entendi bem o que vc quer fazer, mas eu abri esse forum e eu mesmo respondi
consegui fazer uma aplicacao web .war consumir um ejb remoto (com anotacoes e ejb 3.1)
Deve ser possivel do struts tambem.[/quote]
Olá, vc injetou um EJB Remoto? Ou fez Lookup do mesmo?
Se for Injetado, precisa de alguma configuração extra?
Pois de faço: @EJB IBeanQueroInjetar beanQueroInjetar ele dá erro no Deploy
E se for: beanQueroInjetar = (IBeanQueroInjetar) context.lookup(IBeanQueroInjetar.JNDI_Name) funciona normalmente