Resolvido - Problema com CDI em projeto separado

5 respostas
tmvolpato

Galera, estou com problema
na minha aplicação

separei a aplicação em 3 projetos

AS: Glassfish 3.1
PrimeFaces 3.1.1

Projeto pai
|
-------- EAR
|
-----EJB
|
—WEB

A aplicação faz o deploy, mas depois que eu executo o metodo salvar
ai eu recebe o erro abaixo:

AVISO: #{personFace.doSavePerson}: java.lang.IllegalStateException: Unable to convert ejbRef for ejb PersonServiceImpl to a business object of type interface br.com.erp.dao.GenericDAO
javax.faces.FacesException: #{personFace.doSavePerson}: java.lang.IllegalStateException: Unable to convert ejbRef for ejb PersonServiceImpl to a business object of type interface br.com.erp.dao.GenericDAO
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)
Caused by: javax.faces.el.EvaluationException: java.lang.IllegalStateException: Unable to convert ejbRef for ejb PersonServiceImpl to a business object of type interface br.com.erp.dao.GenericDAO
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	... 32 more
Caused by: java.lang.IllegalStateException: Unable to convert ejbRef for ejb PersonServiceImpl to a business object of type interface br.com.erp.dao.GenericDAO
	at com.sun.ejb.containers.EjbContainerServicesImpl.getBusinessObject(EjbContainerServicesImpl.java:114)
	at org.glassfish.weld.ejb.SessionObjectReferenceImpl.getBusinessObject(SessionObjectReferenceImpl.java:63)
	at org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:122)
	at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:62)
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:125)
	at br.com.erp.service.org$jboss$weld$bean-EARSystem-ejb-1$0-SNAPSHOT_jar-SessionBean-PersonServiceImpl_$$_WeldProxy.save(org$jboss$weld$bean-EARSystem-ejb-1$0-SNAPSHOT_jar-SessionBean-PersonServiceImpl_$$_WeldProxy.java)
	at br.com.erp.view.PersonFace.doSavePerson(PersonFace.java:33)
	at br.com.erp.view.org$jboss$weld$bean-EARSystem-web-1$0-SNAPSHOT_war-ManagedBean-class_br$com$erp$view$PersonFace_$$_WeldClientProxy.doSavePerson(org$jboss$weld$bean-EARSystem-web-1$0-SNAPSHOT_war-ManagedBean-class_br$com$erp$view$PersonFace_$$_WeldClientProxy.java)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:43)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:56)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 33 more

AVISO: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.el.EvaluationException: java.lang.IllegalStateException: Unable to convert ejbRef for ejb PersonServiceImpl to a business object of type interface br.com.erp.dao.GenericDAO
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.IllegalStateException: Unable to convert ejbRef for ejb PersonServiceImpl to a business object of type interface br.com.erp.dao.GenericDAO
	at com.sun.ejb.containers.EjbContainerServicesImpl.getBusinessObject(EjbContainerServicesImpl.java:114)
	at org.glassfish.weld.ejb.SessionObjectReferenceImpl.getBusinessObject(SessionObjectReferenceImpl.java:63)
	at org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:122)
	at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:62)
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:125)
	at br.com.erp.service.org$jboss$weld$bean-EARSystem-ejb-1$0-SNAPSHOT_jar-SessionBean-PersonServiceImpl_$$_WeldProxy.save(org$jboss$weld$bean-EARSystem-ejb-1$0-SNAPSHOT_jar-SessionBean-PersonServiceImpl_$$_WeldProxy.java)
	at br.com.erp.view.PersonFace.doSavePerson(PersonFace.java:33)
	at br.com.erp.view.org$jboss$weld$bean-EARSystem-web-1$0-SNAPSHOT_war-ManagedBean-class_br$com$erp$view$PersonFace_$$_WeldClientProxy.doSavePerson(org$jboss$weld$bean-EARSystem-web-1$0-SNAPSHOT_war-ManagedBean-class_br$com$erp$view$PersonFace_$$_WeldClientProxy.java)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:43)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:56)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 33 more

Procurei sobre esse erro Unable to convert ejbRef for ejb e tem haver com o CDI + Glassfish (fonte:stackOverFlow)
alguem já passou por isso

fico no aguardo

5 Respostas

Hebert_Coelho

Cara, parece que tem algum trem errado com isso aqui oh: Unable to convert ejbRef for ejb PersonServiceImpl to a business object of type interface br.com.erp.dao.GenericDAO

Tem como você coloca só como as classes estão declaradas? Desde o DAO até o MB?

Coloca apenas:
@EJB
public class…

@Named
public class…

tmvolpato

Tem

Estou usando maven
projeto EAR

Esse projeto está no inicio

Interface GenericDAO

public interface GenericDAO

Classe abstract (que implementa a interface GenericDAO )

public abstract class GenericDAOImpl<T, L extends Serializable> implements GenericDAO<T, L>

interface PersonDAO que extende a interface GnericDAO

public interface PersonDAO extends GenericDAO<Person, Serializable>,Serializable

PersonDAOImpl

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class PersonDAOImpl extends GenericDAOImpl<Person, Serializable>

Interface crianda para repassar os ManageBeans camda WEB

public interface PersonService extends GenericDAO<Person, Serializable>
@Stateless
public class PersonServiceImpl implements PersonService

Camada web

PersonMB

@Named
@SessionScoped
public class PersonFace extends BasicCDI<Person>{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Inject
	private PersonService personBean;

Estou tendando fazer desse jeito utilizando interfaces para que minha camada web nao tenha acesso direto ao PersonDAO por exemplo

mas estou errando em algo

A aplicação funciona normal se eu acessar direto o PersonDAOImpl (Tenho que tirar a interface PersonDAO para funcionar) na camada web

O erro está na interface o jeito que está implementado, mas não sei aonde

Fico no aguardo de qlqr ajuda

tmvolpato

Acho mais facil tirando uma duvida

Tem como eu ter uma classe abstrata implementando uma interface generica

e como eu usuaria ela? Porque a minha ideia ter interface com @Local e @Remote e no ManageBean passa a interface service
assim minha camada web nao acessa direto meu dao

Estou conseguindo fazer sem utilizar a classe abstrata generica.

Pergunta? Posso usar uma classe abstrata nessa situação?isso é um erro? e se sim como eu poderia fazer isso

Obrigado desde de já

Hebert_Coelho

Pelo q eu tinha olhado, funcionaria do modo como está.

Mas isso aqui eu não sei falar se atrapalha: public abstract class GenericDAOImpl<T, L extends Serializable> implements GenericDAO<T, L>

Não sei até que ponto isso influencia.

tmvolpato

O problema é que ele estava perdendo a referencia como o próprio log mostrou, add a anotação @Staless na classe serviceImpl que faz a comunicação com a minha view e resolveu.

Criado 14 de março de 2012
Ultima resposta 9 de abr. de 2012
Respostas 5
Participantes 2