CDI injected EntityManager into @ConversationScoped SFSB.
justin.justinwyer.gmail.com Jan 13, 2010 11:08 AMHaving a bit of trouble using an @Produces CDI injected EntityManager. This is a pretty simple EE6 web app been deployed as a war on Glassfish v3. I think its probably a case of me just doing something wrong, but I can't for the life of me figure out what.
I have a @ConversationScoped (if I use @SessionScoped the problem does not present) stateful EJB
@Stateful @ConversationScoped @Named public class AccountController
into which I am injecting the container managed EntityManager it works fine if I inject it with @PersistenceContext
I wrote a producer to try some type safe injection of the EntityManager.
public class AccountDatabaseProducer implements Serializable { @Produces @PersistenceContext @AccountDatabase private EntityManager em; }
However when I inject the EntityManager using @Inject @AccountDatabase it works but this exception shows up on the log file (If I @ConversationScoped the EntityManager in AccountDatabaseProducer this exception is caught by JSF and thrown to the page)
javax.ejb.EJBException: java.lang.IllegalStateException at com.sun.ejb.containers.StatefulSessionContainer.removeBean(StatefulSessionContainer.java:1043) at com.sun.ejb.containers.StatefulSessionContainer.removeBean(StatefulSessionContainer.java:961) at com.sun.ejb.containers.EJBLocalObjectImpl.remove(EJBLocalObjectImpl.java:179) at com.sun.ejb.containers.EjbContainerServicesImpl.remove(EjbContainerServicesImpl.java:144) at org.glassfish.weld.ejb.SessionObjectReferenceImpl.remove(SessionObjectReferenceImpl.java:66) at org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:106) at com.voxtelecom.fireid.controller.AccountController_$$_javassist_10.destroy(AccountController_$$_javassist_10.java) at org.jboss.weld.bean.SessionBean.destroy(SessionBean.java:302) at org.jboss.weld.context.ForwardingContextual.destroy(ForwardingContextual.java:18) at org.jboss.weld.context.AbstractMapContext.destroy(AbstractMapContext.java:142) at org.jboss.weld.context.AbstractMapContext.destroy(AbstractMapContext.java:159) at org.jboss.weld.context.AbstractThreadLocalMapContext.destroy(AbstractThreadLocalMapContext.java:68) at org.jboss.weld.conversation.AbstractConversationManager.cleanupConversation(AbstractConversationManager.java:179) 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 org.jboss.weld.bean.proxy.ClientProxyMethodHandler.invoke(ClientProxyMethodHandler.java:113) at org.jboss.weld.conversation.ServletConversationManager_$$_javassist_20.cleanupConversation(ServletConversationManager_$$_javassist_20.java) at org.jboss.weld.jsf.WeldPhaseListener.afterRenderResponse(WeldPhaseListener.java:132) at org.jboss.weld.jsf.WeldPhaseListener.afterPhase(WeldPhaseListener.java:103) at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) at com.sun.grizzly.ContextTask.run(ContextTask.java:69) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) at java.lang.Thread.run(Thread.java:637) Caused by: java.lang.IllegalStateException at com.sun.enterprise.container.common.impl.EntityManagerWrapper.close(EntityManagerWrapper.java:826) 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 org.jboss.weld.bean.builtin.CallableMethodHandler.invoke(CallableMethodHandler.java:46) at javax.persistence.EntityManager_$$_javassist_8.close(EntityManager_$$_javassist_8.java) at org.jboss.weld.bean.builtin.ee.PersistenceContextProducerField.defaultDispose(PersistenceContextProducerField.java:58) at org.jboss.weld.bean.builtin.ee.PersistenceContextProducerField.defaultDispose(PersistenceContextProducerField.java:29) at org.jboss.weld.bean.ProducerField$1.dispose(ProducerField.java:88) at org.jboss.weld.bean.ProducerField.destroy(ProducerField.java:113) at org.jboss.weld.context.ForwardingContextual.destroy(ForwardingContextual.java:18) at org.jboss.weld.context.DependentInstancesStore.destroy(DependentInstancesStore.java:79) at org.jboss.weld.context.DependentInstancesStore.destroyDependentInstances(DependentInstancesStore.java:73) at org.jboss.weld.context.CreationalContextImpl.release(CreationalContextImpl.java:79) at org.glassfish.weld.services.JCDIServiceImpl$JCDIInjectionContextImpl.cleanup(JCDIServiceImpl.java:214) at com.sun.ejb.containers.BaseContainer.cleanupInstance(BaseContainer.java:1640) at com.sun.ejb.containers.StatefulSessionContainer.forceDestroyBean(StatefulSessionContainer.java:1064) at com.sun.ejb.containers.StatefulSessionContainer.removeBean(StatefulSessionContainer.java:1031) ... 48 more