Injeção via @EJB em um Servlet de um ejb com interface remota

Estou tentando fazer injection via @EJB de uma interface remota usando weblogic.

Porém me surgiu uma dúvida, é possível fazer isso com interface remota? ou só é possível usando interface local?

ja mapeei nos xmls, do weblogic, e nada, lembrando que fiz lookup usando IntitalContext e funcional de boa…

Procurei bastante por isso e não encotrei a resposta.

Obrigado.

De acordo com esse link aqui é possível sim, mas você precisa setar o nome correto dentro da anotação.

Vou postar mais ou menos o que o link diz pra facilitar:

Em um EJB assim:@Stateless(name="DataAccessBean", mappedName="ejb/DataAccessBean") @Remote(DataAccessRemote.class) @Local(DataAccessLocal.class) public class DataAccess implements DataAccessLocal, DataAccessRemote { ... }Você pode fazer o lookup assim (Lembre-se que o InitialContext tem que estar configurado corretamente):InitialContext ctx = new InitialContext(); // use o valor setado no 'mappedName' Objet obj = ctx.lookup("java:comp/env/ejb/DataAccessBean");Se o bean for local pode usar a anotação @EJB dessa forma:@EJB(name="DataAccessBean") DataAccessLocal myDataAccessBean;E se for remoto tem que setar um valor diferente na anotação, que é composto assim pelo nome da interface remota e o seguinte nome JNDI:DataAccessBean#<package>.DataAccessRemotePara mais informações olhe o link que postei acima :slight_smile:

Muito obrigado pela dica, vou tentar fazer em casa…

Qualquer coisa volto a postar.

Valeu.

Testei, e se o war com o serlvet que esta injetando estiver no mesmo ear do ejb e do “client”(intefaces) injeta, porém se eu criar um war dentro de outro ear(no mesmo servidor), não sobe o servidor, da erro de ejb-ref, eu tentei “linkar” de todas as formas dentro do web.xml

&lt;ejb-local-ref&gt;
		&lt;ejb-ref-name&gt;HelloWorld&lt;/ejb-ref-name&gt;
		&lt;ejb-ref-type&gt;Session&lt;/ejb-ref-type&gt;
		&lt;local&gt;../HelloWorld#com.upog.demo.HelloWorld&lt;/local&gt;
		&lt;ejb-link&gt;HelloWorld&lt;/ejb-link&gt;
	&lt;/ejb-local-ref&gt;

ou

<ejb-local-ref>
<ejb-ref-name>HelloWorld</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local>HelloWorld#com.upog.demo.HelloWorld</local>
<ejb-link>HelloWorld</ejb-link>
</ejb-local-ref>

ou

&lt;ejb-local-ref&gt;
		&lt;ejb-ref-name&gt;HelloWorld&lt;/ejb-ref-name&gt;
		&lt;ejb-ref-type&gt;Session&lt;/ejb-ref-type&gt;
		&lt;local&gt;HelloWorld&lt;/local&gt;
		&lt;ejb-link&gt;HelloWorld&lt;/ejb-link&gt;
	&lt;/ejb-local-ref&gt;

Enfim, da o seguinte erro sempre:

&lt;13/06/2013 17h12min21s BRT&gt; &lt;Error&gt; &lt;Deployer&gt; &lt;BEA-149265&gt; &lt;Failure occurred in the execution of deployment request with ID "1371154340877" for task "0". Error is: "weblogic.application.ModuleException: Could not setup environment"
weblogic.application.ModuleException: Could not setup environment
	at weblogic.servlet.internal.WebAppModule.activateContexts(WebAppModule.java:1693)
	at weblogic.servlet.internal.WebAppModule.activate(WebAppModule.java:763)
	at weblogic.application.internal.flow.ModuleStateDriver$2.next(ModuleStateDriver.java:192)
	at weblogic.application.internal.flow.ModuleStateDriver$2.next(ModuleStateDriver.java:187)
	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:35)
	Truncated. see log file for complete stacktrace
Caused By: weblogic.application.naming.ReferenceResolutionException: [J2EE:160200]Error resolving ejb-ref "HelloWorld#com.upog.demo.HelloWorld" from module "ForaDoEarDoEjbDynamicWar.war" of application "ForaDoEarDoEjb". The ejb-ref does not have an ejb-link and the JNDI name of the target bean has not been specified. Attempts to automatically link the ejb-ref to its target bean failed because no EJBs in the application were found to implement the "com.upog.demo.HelloWorld" interface. Link or map this ejb-ref to its target EJB and ensure the interfaces declared in the ejb-ref are correct.
	at weblogic.application.naming.EnvUtils.findInfo(EnvUtils.java:832)
	at weblogic.application.naming.EnvUtils.findInfoByReferenceClass(EnvUtils.java:783)
	at weblogic.application.naming.EjbReferenceResolver.resolveEjbRef(EjbReferenceResolver.java:92)
	at weblogic.application.naming.EjbReferenceResolver.resolve(EjbReferenceResolver.java:71)
	at weblogic.application.naming.EjbReferenceResolver.get(EjbReferenceResolver.java:58)
	Truncated. see log file for complete stacktrace
&gt; 
&lt;13/06/2013 17h12min21s BRT&gt; &lt;Error&gt; &lt;Deployer&gt; &lt;BEA-149202&gt; &lt;Encountered an exception while attempting to commit the 1 task for the application "ForaDoEarDoEjb".&gt; 
&lt;13/06/2013 17h12min21s BRT&gt; &lt;Warning&gt; &lt;Deployer&gt; &lt;BEA-149004&gt; &lt;Failures were detected while initiating deploy task for application "ForaDoEarDoEjb".&gt; 
&lt;13/06/2013 17h12min21s BRT&gt; &lt;Warning&gt; &lt;Deployer&gt; &lt;BEA-149078&gt; &lt;Stack trace for message 149004
weblogic.application.ModuleException: Could not setup environment
	at weblogic.servlet.internal.WebAppModule.activateContexts(WebAppModule.java:1693)
	at weblogic.servlet.internal.WebAppModule.activate(WebAppModule.java:763)
	at weblogic.application.internal.flow.ModuleStateDriver$2.next(ModuleStateDriver.java:192)
	at weblogic.application.internal.flow.ModuleStateDriver$2.next(ModuleStateDriver.java:187)
	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:35)
	Truncated. see log file for complete stacktrace
Caused By: weblogic.application.naming.ReferenceResolutionException: [J2EE:160200]Error resolving ejb-ref "HelloWorld#com.upog.demo.HelloWorld" from module "ForaDoEarDoEjbDynamicWar.war" of application "ForaDoEarDoEjb". The ejb-ref does not have an ejb-link and the JNDI name of the target bean has not been specified. Attempts to automatically link the ejb-ref to its target bean failed because no EJBs in the application were found to implement the "com.upog.demo.HelloWorld" interface. Link or map this ejb-ref to its target EJB and ensure the interfaces declared in the ejb-ref are correct.
	at weblogic.application.naming.EnvUtils.findInfo(EnvUtils.java:832)
	at weblogic.application.naming.EnvUtils.findInfoByReferenceClass(EnvUtils.java:783)
	at weblogic.application.naming.EjbReferenceResolver.resolveEjbRef(EjbReferenceResolver.java:92)
	at weblogic.application.naming.EjbReferenceResolver.resolve(EjbReferenceResolver.java:71)
	at weblogic.application.naming.EjbReferenceResolver.get(EjbReferenceResolver.java:58)
	Truncated. see log file for complete stacktrace
&gt; 

Ja li todos os links, tentei de todas as formas “Injetar um bean remoto de um ear que não é o mesmo que tem o ejb”, se alguem puder me dar uma dica, agradeço muito.

Valeu.

Acho melhor fazer o lookup mesmo :slight_smile:

Funcionou, o mais curioso é que não foi preciso usar “interface#pacote.interface”, apenas usar mappedname nos dois lados.

Cara, estou com o mesmo problema.

Caused By: weblogic.application.naming.ReferenceResolutionException: [J2EE:160199]Error resolving ejb-ref "br.com.sics.ejb.service.OperadoraServiceImpl/dao" from module "sics-business-0.0.1-SNAPSHOT.jar" of application "sics-ear". The ejb-ref does not have an ejb-link and the JNDI name of the target bean has not been specified. Attempts to automatically link the ejb-ref to its target bean failed because multiple EJBs in the application were found to implement the "br.com.sics.dao.interfaces.OperadoraDao" interface, including sics-business-0.0.1-SNAPSHOT.jar/OperadoraDaoImpl, sics-view-0.0.1-SNAPSHOT.war/OperadoraDaoImpl. Specify a qualified ejb-link for this ejb-ref to indicate which EJB is the target of this ejb-ref. at weblogic.application.naming.EnvUtils.findInfo(EnvUtils.java:856)

O que vc fez exatamente para arrumar?
Poderia me ajudar

Então, se ainda não resolveu o problema, detalhe melhor…, pois não si como esta seu código qual é o recurso que está tentando injetar…, mais no seu console está dizendo que existe mais de uma implementação para interface…, sendo assim você terá que dizer qual a classe concreta esta tenntanto injetar…, eu acabei vendo isso também nas pesquisas…

Se resolveu, poste aqui, se não resolveu vamos interagir para resolver e ajudar a comunidade.

Aguardo.