Problemas ao remover um Entity com o metodo remove do JPA  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
rafaelmeireles
JavaTeenager

Membro desde: 13/01/2004 16:12:22
Mensagens: 151
Offline

Pessoal estou tentando rodar o exemplo simples de JSF com EJB3 e JPA(Implementação do Hibernate) no Glassfish, consigo realizar consultas com o metodo find, inserção com o persist, porem nao consigo remover com o metodo remove, toda vez que tento da o seguinte erro:


[#|2007-09-13T14:20:55.854-0300|INFO|sun-appserver-pe9.0|javax.enterprise.system.container.ejb|_ThreadID=13;_ThreadName=httpWorkerThread-8080-0;EnderecoSessionFacade;|EJB5018: An exception was thrown during an ejb invocation on [EnderecoSessionFacade]|#]

[#|2007-09-13T14:20:55.854-0300|INFO|sun-appserver-pe9.0|javax.enterprise.system.container.ejb|_ThreadID=13;_ThreadName=httpWorkerThread-8080-0;|
javax.ejb.EJBException
at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:3730)
at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:3630)
at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:3431)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1247)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:192)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:11
at $Proxy36.remove(Unknown Source)
at br.unifor.compraobras.managedbean.Index.testar(Index.java:63)
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:151)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:283)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:8
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:77)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:776)
at javax.faces.component.UICommand.broadcast(UICommand.java:36
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:450)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:759)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:244)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:113)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:397)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:27
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:536)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:179)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:73)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:182)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at com.sun.enterprise.web.VirtualServerPipeline.invoke(VirtualServerPipeline.java:120)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:137)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:536)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:239)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.invokeAdapter(ProcessorTask.java:667)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.processNonBlocked(ProcessorTask.java:574)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:844)
at com.sun.enterprise.web.connector.grizzly.ReadTask.executeProcessorTask(ReadTask.java:287)
at com.sun.enterprise.web.connector.grizzly.ReadTask.doTask(ReadTask.java:212)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:252)
at com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:75)
Caused by: java.lang.IllegalArgumentException: Removing a detached instance br.unifor.compraobras.entity.Endereco#1
at org.hibernate.ejb.event.EJB3DeleteEventListener.performDetachedEntityDeletionCheck(EJB3DeleteEventListener.java:45)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:86)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:52)
at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:766)
at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:744)
at org.hibernate.ejb.AbstractEntityManagerImpl.remove(AbstractEntityManagerImpl.java:246)
at com.sun.enterprise.util.EntityManagerWrapper.remove(EntityManagerWrapper.java:461)
at br.unifor.compraobras.dao.EnderecoSessionFacade.remove(EnderecoSessionFacade.java:39)
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.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1050)
at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:165)
at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2766)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:3847)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:184)
... 43 more
|#]

[#|2007-09-13T14:20:55.854-0300|SEVERE|sun-appserver-pe9.0|javax.faces.event|_ThreadID=13;_ThreadName=httpWorkerThread-8080-0;javax.ejb.EJBException;#{index.testar};j_id_id31;_RequestID=4de6665a-dbbf-4b8d-b9d4-d141d0584582;|Received 'javax.ejb.EJBException' when invoking action listener '#{index.testar}' for component 'j_id_id31'|#]

[#|2007-09-13T14:20:55.870-0300|SEVERE|sun-appserver-pe9.0|javax.faces.event|_ThreadID=13;_ThreadName=httpWorkerThread-8080-0;_RequestID=4de6665a-dbbf-4b8d-b9d4-d141d0584582;|javax.ejb.EJBException
at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:3730)
at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:3630)
at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:3431)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1247)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:192)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:11
at $Proxy36.remove(Unknown Source)
at br.unifor.compraobras.managedbean.Index.testar(Index.java:63)
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:151)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:283)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:8
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:77)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:776)
at javax.faces.component.UICommand.broadcast(UICommand.java:36
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:450)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:759)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:244)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:113)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:397)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:27
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:536)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:179)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:73)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:182)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at com.sun.enterprise.web.VirtualServerPipeline.invoke(VirtualServerPipeline.java:120)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:137)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:536)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:239)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.invokeAdapter(ProcessorTask.java:667)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.processNonBlocked(ProcessorTask.java:574)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:844)
at com.sun.enterprise.web.connector.grizzly.ReadTask.executeProcessorTask(ReadTask.java:287)
at com.sun.enterprise.web.connector.grizzly.ReadTask.doTask(ReadTask.java:212)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:252)
at com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:75)
Caused by: java.lang.IllegalArgumentException: Removing a detached instance br.unifor.compraobras.entity.Endereco#1
at org.hibernate.ejb.event.EJB3DeleteEventListener.performDetachedEntityDeletionCheck(EJB3DeleteEventListener.java:45)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:86)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:52)
at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:766)
at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:744)
at org.hibernate.ejb.AbstractEntityManagerImpl.remove(AbstractEntityManagerImpl.java:246)
at com.sun.enterprise.util.EntityManagerWrapper.remove(EntityManagerWrapper.java:461)
at br.unifor.compraobras.dao.EnderecoSessionFacade.remove(EnderecoSessionFacade.java:39)
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.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1050)
at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:165)
at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2766)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:3847)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:184)
... 43 more
|#]


Ele fica reclamando de:
Caused by: java.lang.IllegalArgumentException: Removing a detached instance

Já tentei usar o merge para funcionar mais naum adianta, eu uso o find para recuperar o entity endereco e o objeto obtido com o find eu repasso para o remove.

já pesquisei na net mais não encontrei a solução, se alguem já tiver tido esse problema ou souber da solução agradeço, pois não sei mais o que tentar?

Rafael Meireles
[Email]
kartler
JavaEvangelist
[Avatar]

Membro desde: 22/09/2002 13:16:11
Mensagens: 479
Localização: Fortal-CE
Offline



Vamos lá



"...Em verdade Elias virá primeiro e restaurará todas as coisas." MT:17-11
http://www.google.co.il/search?q=java&hl=iw&lr=lang_iw&start=30&sa=N
marcelo_mococa
Virtual Machine Man
[Avatar]

Membro desde: 03/03/2005 10:03:32
Mensagens: 622
Localização: São Paulo
Offline

procure entender os estados de uma entidade gerenciada pelo EntityManager.
A maioria dos erros é porque o desenvolvedor não sabe o que é uma entidade detached ou managed...



Marcelo Madeira - TCS
SCJP 1.5
SCWCD 1.4
blog

rafaelmeireles
JavaTeenager

Membro desde: 13/01/2004 16:12:22
Mensagens: 151
Offline


Vamos lá
view plaincopy to clipboardprint?

1. Object c=em.merge(objeto)
2. em.remove(c);


kartler valeu pela ajuda deu certo, porém gostaria de saber pq um objeto que é recuperado com o metodo find fica detached?

Pois no meu codigo estava assim:

Endereco endereco = this.enderecoSessionFacadeLocal.findByPrimaryKey(new Integer(2));
this.enderecoSessionFacadeLocal.remove(endereco);

em findByPrimaryKey uso o find e em remove uso o remove

até onde sei não tem motivos para ele ficar detached, lembrando que esses codigos estão dentro de um managed bean do JSF.

Agradeço desde já se puderem explicar.

Rafael Meireles
[Email]
kartler
JavaEvangelist
[Avatar]

Membro desde: 22/09/2002 13:16:11
Mensagens: 479
Localização: Fortal-CE
Offline

rafaelmeireles wrote:

Vamos lá
view plaincopy to clipboardprint?

1. Object c=em.merge(objeto)
2. em.remove(c);


kartler valeu pela ajuda deu certo, porém gostaria de saber pq um objeto que é recuperado com o metodo find fica detached?

Pois no meu codigo estava assim:

Endereco endereco = this.enderecoSessionFacadeLocal.findByPrimaryKey(new Integer(2));
this.enderecoSessionFacadeLocal.remove(endereco);

em findByPrimaryKey uso o find e em remove uso o remove

até onde sei não tem motivos para ele ficar detached, lembrando que esses codigos estão dentro de um managed bean do JSF.

Agradeço desde já se puderem explicar.



Muito provável seu EM de onde você retirou o objeto já ter sido fechado (Isso tira o objeto do contexto de persistencia), isso torna objeto detached... por isso ao você "Amarrar" novamente o seu objeto ao EM ele se torna reattach, executando assim em.remove(o) com sucesso.

This message was edited 1 time. Last update was at 13/09/2007 15:54:29


"...Em verdade Elias virá primeiro e restaurará todas as coisas." MT:17-11
http://www.google.co.il/search?q=java&hl=iw&lr=lang_iw&start=30&sa=N
rafaelmeireles
JavaTeenager

Membro desde: 13/01/2004 16:12:22
Mensagens: 151
Offline

isso eu já entendi, o que não entendi ainda é como funciona a politica para o fechamento do EntityManager, eu suspeito que como é via servidor de aplicação o Contexto de Persistencia tem escopo de transação, ai vem a pergunta, quando eu realizo um find ele conta isso como transação e ao final do find ele é fechado?

Rafael Meireles
[Email]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team