Injeção de Ejb em um Componente Spring

Estou tendo que injetar um EJB dentro de uma classe gerenciada pelo Spring (WebService).

Pesquisando no google, achei este link:
http://www.guj.com.br/java/123928-injetando-um-ejb-stateless-em-um-spring-pojo-resolvido

Mas não resolveu o meu problema, toda vez que o spring tenta chamar o meu EJB recebo o seguinte erro:

[code][org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/central-atendimento-mosaico]] StandardWrapper.Throwable: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘mosaicoService’ defined in URL [vfs:/D:/opt/jboss-as-distribution-6.0.0.Final/jboss-6.0.0.Final/server/default/deploy/central-atendimento-mosaico-ear-1.0-SNAPSHOT.ear/central-atendimento-mosaico-0.1.1-SNAPSHOT.war/WEB-INF/classes/spring-ws-servlet.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: MosaicoService not bound
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567) [:3.1.1.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) [:3.1.1.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) [:3.1.1.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631) [:3.1.1.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588) [:3.1.1.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645) [:3.1.1.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508) [:3.1.1.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449) [:3.1.1.RELEASE]
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) [:3.1.1.RELEASE]
at javax.servlet.GenericServlet.init(GenericServlet.java:242) [:1.0.0.Final]
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1208) [:6.0.0.Final]
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:955) [:6.0.0.Final]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:188) [:6.0.0.Final]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) [:6.0.0.Final]
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181) [:6.0.0.Final]
at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285) [:1.1.0.Final]
at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261) [:1.1.0.Final]
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88) [:6.0.0.Final]
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100) [:6.0.0.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) [:6.0.0.Final]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.0.0.Final]
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.0.0.Final]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.0.0.Final]
at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.0.0.Final]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.0.0.Final]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.0.0.Final]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.0.0.Final]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.0.0.Final]
at java.lang.Thread.run(Thread.java:722) [:1.7.0_09]
Caused by: javax.naming.NameNotFoundException: MosaicoService not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java:771) [:5.0.5.Final]
at org.jnp.server.NamingServer.getBinding(NamingServer.java:779) [:5.0.5.Final]
at org.jnp.server.NamingServer.getObject(NamingServer.java:785) [:5.0.5.Final]
at org.jnp.server.NamingServer.lookup(NamingServer.java:443) [:5.0.5.Final]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:728) [:5.0.5.Final]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:688) [:5.0.5.Final]
at javax.naming.InitialContext.lookup(InitialContext.java:411) [:1.7.0_09]
at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:154) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiObjectTargetSource.afterPropertiesSet(JndiObjectTargetSource.java:97) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiObjectFactoryBean$JndiObjectProxyFactory.createJndiObjectProxy(JndiObjectFactoryBean.java:285) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiObjectFactoryBean$JndiObjectProxyFactory.access$0(JndiObjectFactoryBean.java:276) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:177) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) [:3.1.1.RELEASE]
… 35 more

15:35:55,001 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/central-atendimento-mosaico].[spring-ws]] Allocate exception for servlet spring-ws: javax.naming.NameNotFoundException: MosaicoService not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java:771) [:5.0.5.Final]
at org.jnp.server.NamingServer.getBinding(NamingServer.java:779) [:5.0.5.Final]
at org.jnp.server.NamingServer.getObject(NamingServer.java:785) [:5.0.5.Final]
at org.jnp.server.NamingServer.lookup(NamingServer.java:443) [:5.0.5.Final]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:728) [:5.0.5.Final]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:688) [:5.0.5.Final]
at javax.naming.InitialContext.lookup(InitialContext.java:411) [:1.7.0_09]
at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:154) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiObjectTargetSource.afterPropertiesSet(JndiObjectTargetSource.java:97) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiObjectFactoryBean$JndiObjectProxyFactory.createJndiObjectProxy(JndiObjectFactoryBean.java:285) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiObjectFactoryBean$JndiObjectProxyFactory.access$0(JndiObjectFactoryBean.java:276) [:3.1.1.RELEASE]
at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:177) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) [:3.1.1.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567) [:3.1.1.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) [:3.1.1.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) [:3.1.1.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631) [:3.1.1.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588) [:3.1.1.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645) [:3.1.1.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508) [:3.1.1.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449) [:3.1.1.RELEASE]
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) [:3.1.1.RELEASE]
at javax.servlet.GenericServlet.init(GenericServlet.java:242) [:1.0.0.Final]
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1208) [:6.0.0.Final]
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:955) [:6.0.0.Final]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:188) [:6.0.0.Final]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) [:6.0.0.Final]
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181) [:6.0.0.Final]
at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285) [:1.1.0.Final]
at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261) [:1.1.0.Final]
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88) [:6.0.0.Final]
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100) [:6.0.0.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) [:6.0.0.Final]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.0.0.Final]
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.0.0.Final]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.0.0.Final]
at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.0.0.Final]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.0.0.Final]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.0.0.Final]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.0.0.Final]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.0.0.Final]
at java.lang.Thread.run(Thread.java:722) [:1.7.0_09]
[/code]

eu acho que o @Qualifier pode te ajuda
tinha o mesmo problema e a alternativa foi essa

está tentando injetar o que com o EJB?

passe essa parte ai

Segue o código.

Interface Remota:

@Remote public interface MosaicoServiceInterface { public ResultadoCadastraAdesao cadastraAdesao( final String tipo, final String valor, final String id_campanha, final EntradaDados entradaDados); }

Ejb:

[code]
@WebService
@Stateless
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public class MosaicoService implements MosaicoServiceInterface, MosaicoServiceInterfaceLocal{

private static final long serialVersionUID = -3801666408223906655L;
private static final Logger logger = Logger.getLogger(MosaicoService.class);
private static MosaicoProperties mosaicoProperties = MosaicoProperties.getInstance();
@PersistenceContext(unitName = "CentralAtendimentoPU")
EntityManager manager;
@Resource
UserTransaction tx;

@WebMethod
public ResultadoCadastraAdesao cadastraAdesao(
        @WebParam(name = "tipo") final String tipo,
        @WebParam(name = "valor") final String valor,
        @WebParam(name = "id_campanha") final String id_campanha,
        @WebParam(name = "camposAdesao") final EntradaDados entradaDados) ....

}[/code]

Componente Spring:

[code]@Endpoint
public class ClienteEndpoint {

@Autowired
private ClienteDAO clienteDAO;

@Autowired
private CartaoDAO cartaoDAO;

@Autowired
private CadastroClienteDAO cadastroClienteDAO;

private MosaicoServiceInterface mosaico; ....

}[/code]

O spring está dentro de um war e o ejb dentro de um jar, que estão dentro de um ear.

Tentei o @Qualifier mas deu NullPointerException.

complico

vc injeta o dao com a injeção do spring e não do EJB

Concordo… Isso ai está um samba do criolo doido né…

Infelizmente, essa pemba caiu no meu colo e agora estou tendo que resolver.

Estou pensando em clolocar td sendo gerenciado pelo spring, mas antes queria ver se teria alguma alternativa, mas acho que não vai ter para onde fugir.

eu sei como é isso
cai e vc tem que correr atras

mas usar EJB e Spring nesse caso está estranho
no meu caso era pq qria usar o spring security
e eu usava injeção do EJB

espero que apareça alguem ai para te ajuda

flw