How to inject PersistenceContext defined in an entity-class-only jar
glsilver May 18, 2012 12:30 PMI want to separate my entity classes from EJBs into two separate libraries. Testing with the jboss-as-login example in Jboss Quickstarts, I removed User.java and put it in its own jar, called login.model. The jar contains the persistence.xml in META-INF, and I deploy it directly in standalone/deployments in JBOSS AS7. Then, I create a dependency to login.model.jar in jboss-as-login's MANIFEST.INF, as well as add a dependency in the POM file with provided scope so it will compile. I even added unitName="loginDatabase" to the PersistenceContext annotation in Resources.java. However, when I deploy jboss-as-login and try to login as a user in the running application, I get the following error:
08:45:24,460 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (http-localhost-127.0.0.1-8080-1) Error Rendering View[/users.xhtml]: java.lang.IllegalArgumentException: JBAS016069: Error injecting persistence unit into CDI managed bean. Can't find a persistence unit named loginDatabase in deployment jboss-as-login.war
at org.jboss.as.weld.services.bootstrap.WeldJpaInjectionServices.getScopedPUName(WeldJpaInjectionServices.java:96) [jboss-as-weld-7.1.2.Final-SNAPSHOT.jar:7.1.2.Final-SNAPSHOT]
at org.jboss.as.weld.services.bootstrap.WeldJpaInjectionServices.resolvePersistenceContext(WeldJpaInjectionServices.java:61) [jboss-as-weld-7.1.2.Final-SNAPSHOT.jar:7.1.2.Final-SNAPSHOT]
at org.jboss.weld.util.Beans.injectEEFields(Beans.java:622) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1$1.proceed(ManagedBean.java:160) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1.work(ManagedBean.java:157) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.ManagedBean$FixInjectionPoint.run(ManagedBean.java:131) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.inject(ManagedBean.java:153) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:293) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:61) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:636) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.AbstractReceiverBean.getReceiver(AbstractReceiverBean.java:75) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.ProducerMethod$1.produce(ProducerMethod.java:131) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.AbstractProducerBean.create(AbstractProducerBean.java:307) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:61) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:636) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:702) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:123) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:698) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:707) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1$1.proceed(ManagedBean.java:161) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1.work(ManagedBean.java:157) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.ManagedBean$FixInjectionPoint.run(ManagedBean.java:131) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.inject(ManagedBean.java:153) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:293) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:107) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:636) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.AbstractReceiverBean.getReceiver(AbstractReceiverBean.java:75) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.ProducerMethod$1.produce(ProducerMethod.java:131) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.AbstractProducerBean.create(AbstractProducerBean.java:307) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:107) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:90) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:104) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.jboss.weld.proxies.Collection$Iterable$List$-1869897006$Proxy$_$$_WeldClientProxy.size(Collection$Iterable$List$-1869897006$Proxy$_$$_WeldClientProxy.java) [weld-core-1.1.7.Final.jar:]
at javax.faces.model.ListDataModel.isRowAvailable(ListDataModel.java:110) [jboss-jsf-api_2.1_spec-2.0.2.Final.jar:2.0.2.Final]
at javax.faces.model.ListDataModel.setRowIndex(ListDataModel.java:185) [jboss-jsf-api_2.1_spec-2.0.2.Final.jar:2.0.2.Final]
at javax.faces.model.ListDataModel.setWrappedData(ListDataModel.java:220) [jboss-jsf-api_2.1_spec-2.0.2.Final.jar:2.0.2.Final]
at javax.faces.model.ListDataModel.<init>(ListDataModel.java:79) [jboss-jsf-api_2.1_spec-2.0.2.Final.jar:2.0.2.Final]
at javax.faces.component.UIData.getDataModel(UIData.java:1804) [jboss-jsf-api_2.1_spec-2.0.2.Final.jar:2.0.2.Final]
at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484) [jboss-jsf-api_2.1_spec-2.0.2.Final.jar:2.0.2.Final]
at javax.faces.component.UIData.setRowIndex(UIData.java:473) [jboss-jsf-api_2.1_spec-2.0.2.Final.jar:2.0.2.Final]
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820) [jboss-jsf-api_2.1_spec-2.0.2.Final.jar:2.0.2.Final]
at javax.faces.component.UIData.encodeBegin(UIData.java:1118) [jboss-jsf-api_2.1_spec-2.0.2.Final.jar:2.0.2.Final]
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1777) [jboss-jsf-api_2.1_spec-2.0.2.Final.jar:2.0.2.Final]
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782) [jboss-jsf-api_2.1_spec-2.0.2.Final.jar:2.0.2.Final]
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) [jboss-jsf-api_2.1_spec-2.0.2.Final.jar:2.0.2.Final]
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) [jboss-jsf-api_2.1_spec-2.0.2.Final.jar:2.0.2.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.14.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.14.Final.jar:]
at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) [weld-core-1.1.7.Final.jar:2012-04-09 10:12]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.14.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.14.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.14.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.14.Final.jar:]
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.2.Final-SNAPSHOT.jar:7.1.2.Final-SNAPSHOT]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.2.Final-SNAPSHOT.jar:7.1.2.Final-SNAPSHOT]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.14.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.14.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.14.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.14.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.14.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.14.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931) [jbossweb-7.0.14.Final.jar:]
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_26]
How else can I set things up so that PersistenceContext injection will work?