2015-07-13 4 views
6

В моем проекте я использую JSF + JPA + CDI + WildFly 8.2 в уровне сохранения. У меня есть BasicDao, как это:Как внедрить EntityManager в CDI (сварка)?

public class BasicDao<M, K> { 
    private org.jboss.logging.Logger logger = org.jboss.logging.Logger 
      .getLogger("BasicDao"); 

    @Inject 
    @Primary 
    protected EntityManager em; 
    Class<M> mclass; 

    public EntityManager getEm() { 
     return em; 
    } 

    public void setEm(EntityManager em) { 
     this.em = em; 
    } 

    @Transactional(value=TxType.NOT_SUPPORTED) 
    public M find(K id){ 
     return em.find(mclass, id); 
    } 

    @Transactional(value=TxType.REQUIRED) 
    public void insert(M inst){ 
     this.em.persist(inst); 
    } 

    @SuppressWarnings("unchecked") 
    @Transactional(value=TxType.REQUIRED) 
    public K insertWithAutoId(M inst){ 
     this.em.persist(inst); 
     return (K) this.em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(inst); 
    } 

    @Transactional(value=TxType.REQUIRED) 
    public M update(M updated){ 
     return this.em.merge(updated); 
    } 


    @Transactional(value=TxType.REQUIRED) 
    public void delete(M nonUsed){ 
     this.em.remove(nonUsed); 
    } 
} 

и другие объекты DAO, как это:

@RequestScoped 
public class UserDao extends BasicDao<User, Integer>{ 

    @Transactional(value = TxType.NOT_SUPPORTED) 
    public User find(Integer id) { 
     return em.find(User.class, id); 
    } 

    @Transactional(value = TxType.REQUIRED) 
    public void insert(User inst) { 
     this.em.persist(inst); 
    } 

    @Transactional(value = TxType.REQUIRED) 
    public Integer insertWithAutoId(User inst) { 
     this.em.persist(inst); 
     return (Integer) this.em.getEntityManagerFactory() 
       .getPersistenceUnitUtil().getIdentifier(inst); 
    } 

    @Transactional(value = TxType.REQUIRED) 
    public User update(User updated) { 
     return this.em.merge(updated); 
    } 

    @Transactional(value = TxType.REQUIRED) 
    public void delete(User nonUsed) { 
     this.em.remove(nonUsed); 
    } 

    @SuppressWarnings("unchecked") 
    @Transactional(value = TxType.NOT_SUPPORTED) 
    public User findByName(String loginName) { 

     Query query = em.createQuery("select u from User u where u.loginName=:loginName"); 
     List<User> users = (List<User>) query.setParameter("loginName", 
       loginName).getResultList(); 
     return users.isEmpty() ? null : users.get(0); 
    } 
} 

В моей ManageredBean код любит это:

@Inject 
private UserDao userDao; 

но часто бросает исключение , не всегда. Я был очень смущен. Исключительный стек выглядит следующим образом:

09:50:59,945 FATAL [javax.enterprise.resource.webcontainer.jsf.context] (default task-27) JSF1073:在 RENDER_RESPONSE 6 的处理过程中捕捉到 com.sun.faces.mgbean.ManagedBeanCreationException:UIComponent-ClientId=,Message=对受管 bean resumeAudit 执行资源注入 (resource injection) 时发生错误 
09:50:59,946 FATAL [javax.enterprise.resource.webcontainer.jsf.context] (default task-27) 对受管 bean resumeAudit 执行资源注入 (resource injection) 时发生错误: com.sun.faces.mgbean.ManagedBeanCreationException: 对受管 bean resumeAudit 执行资源注入 (resource injection) 时发生错误 
    at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:227) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:103) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:257) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:117) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:116) [javax.el-3.0.1-b05.jar:] 
    at com.sun.el.parser.AstValue.getBase(AstValue.java:151) [javax.el-3.0.1-b05.jar:] 
    at com.sun.el.parser.AstValue.getValue(AstValue.java:200) [javax.el-3.0.1-b05.jar:] 
    at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226) [javax.el-3.0.1-b05.jar:] 
    at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.component.UIOutput.getValue(UIOutput.java:174) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.renderkit.html_basic.LabelRenderer.encodeBegin(LabelRenderer.java:120) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:864) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:302) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at com.wangyin.hzcrp.auth.AuthFilter.doFilter(AuthFilter.java:109) [classes:] 
    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final] 
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197) [undertow-core-1.1.0.Final.jar:1.1.0.Final] 
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759) [undertow-core-1.1.0.Final.jar:1.1.0.Final] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_75] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_75] 
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_75] 
Caused by: com.sun.faces.spi.InjectionProviderException: java.lang.IllegalStateException: JBAS011048: Failed to construct component instance 
    at org.jboss.as.jsf.injection.JSFInjectionProvider.invokePostConstruct(JSFInjectionProvider.java:63) [wildfly-jsf-injection-8.2.0.Final.jar:8.2.0.Final] 
    at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:221) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    ... 70 more 
Caused by: java.lang.IllegalStateException: JBAS011048: Failed to construct component instance 
    at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:162) 
    at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:133) 
    at org.jboss.as.ee.component.BasicComponent.createInstance(BasicComponent.java:100) 
    at org.jboss.as.ee.component.ComponentRegistry$ComponentManagedReferenceFactory.getReference(ComponentRegistry.java:171) 
    at org.jboss.as.ee.component.ComponentRegistry.createInstance(ComponentRegistry.java:87) 
    at org.jboss.as.web.common.WebInjectionContainer.newInstance(WebInjectionContainer.java:77) 
    at org.jboss.as.jsf.injection.JSFInjectionProvider.invokePostConstruct(JSFInjectionProvider.java:61) [wildfly-jsf-injection-8.2.0.Final.jar:8.2.0.Final] 
    ... 71 more 
Caused by: org.jboss.weld.exceptions.WeldException: WELD-000049: Unable to invoke public void com.wangyin.hzcrp.controller.ResumeAudit.init() on [email protected] 
    at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.invokeMethods(DefaultLifecycleCallbackInvoker.java:100) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.postConstruct(DefaultLifecycleCallbackInvoker.java:81) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.injection.producer.BasicInjectionTarget.postConstruct(BasicInjectionTarget.java:126) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.injection.producer.BeanInjectionTarget.postConstruct(BeanInjectionTarget.java:70) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.as.weld.deployment.processors.WeldComponentIntegrationProcessor$3.run(WeldComponentIntegrationProcessor.java:196) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final] 
    at org.jboss.as.weld.deployment.processors.WeldComponentIntegrationProcessor$AbstractInjectionTargetDelegatingInterceptor.processInvocation(WeldComponentIntegrationProcessor.java:260) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final] 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
    at org.jboss.as.weld.injection.WeldInjectionInterceptor.processInvocation(WeldInjectionInterceptor.java:53) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final] 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
    at org.jboss.as.ee.component.AroundConstructInterceptorFactory$1.processInvocation(AroundConstructInterceptorFactory.java:28) 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
    at org.jboss.as.weld.injection.WeldInterceptorInjectionInterceptor.processInvocation(WeldInterceptorInjectionInterceptor.java:56) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final] 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
    at org.jboss.as.weld.injection.WeldInjectionContextInterceptor.processInvocation(WeldInjectionContextInterceptor.java:43) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final] 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
    at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final] 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
    at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64) 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
    at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326) 
    at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80) 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
    at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
    at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:160) 
    ... 77 more 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_75] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_75] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_75] 
    at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_75] 
    at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.invokeMethods(DefaultLifecycleCallbackInvoker.java:98) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    ... 100 more 
Caused by: java.lang.IllegalArgumentException: Can not set javax.persistence.EntityManager field com.wangyin.hzcrp.storage.dao.BasicDao.em to com.wangyin.hzcrp.storage.dao.ResumeDao$Proxy$_$$_WeldSubclass 
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164) [rt.jar:1.7.0_75] 
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168) [rt.jar:1.7.0_75] 
    at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:55) [rt.jar:1.7.0_75] 
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:75) [rt.jar:1.7.0_75] 
    at java.lang.reflect.Field.set(Field.java:741) [rt.jar:1.7.0_75] 
    at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:94) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:370) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:381) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.injection.producer.ResourceInjector$1.proceed(ResourceInjector.java:70) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:72) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:121) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:150) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:98) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:78) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
    at com.wangyin.hzcrp.storage.dao.ResumeDao$Proxy$_$$_WeldClientProxy.find(Unknown Source) [crp-storage-1.0.0-SNAPSHOT.jar:] 
    at com.wangyin.hzcrp.controller.ResumeAudit.init(ResumeAudit.java:81) [classes:] 
    ... 105 more 

Может кто-нибудь мне помочь? Бесконечно благодарен.

+0

Вам необходимо использовать производителя CDI, чтобы создать экземпляр 'EntityManager', доступный в ваших управляемых бинами CDI. См. [Здесь] (http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#declaring_disposer_method) и [здесь] (http://docs.oracle.com/javaee/7/tutorial/ КДИ-ADV-examples003.htm # JEETT01139). Не вызывайте 'EntityManager # close()' в управляемом контейнером 'EntityManager' (используя' @ Dispose'). В противном случае контейнер будет вызывать 'java.lang.IllegalStateException' по спецификации. – Tiny

+0

@Tiny Спасибо, что ответили. Вот мой prodecer, 'общественный класс UtilResource { \t @Produces \t @Primary \t @PersistenceContext (UnitName = "первичный") \t частных EntityManager эм; } 'Я сделал, как вы сказали, но также выбрал исключение. Надеюсь, вы можете мне помочь, спасибо. – SuperChia

+0

См. [Здесь] (http://stackoverflow.com/q/8763115/1391249) для конкретного примера использования. Пример Oracle в предыдущем комментарии не является правдоподобным - использование производителя в компоненте '@ Singleton' может выставить' EntityManager' для многих потоков. Кроме того, контейнер не требуется для поддержки какой-либо другой области, кроме '@ Dependent' (по умолчанию) при использовании поля ** ** **. Пойдите для ** метода ** производителя вместо использования '@ RequestScoped', как указано в этом примере. – Tiny

ответ

10

Соответствующий способ придать Persistent контекст в управляемом Bean является следующее:

@PersistenceContext(unitName = "my-pu-name") 
private EntityManager em; 

Обратите внимание, что это может быть сделано только на управляемых компонентов, то есть бобы, которые создаются/уничтоженные контейнера.

Наилучшей практики является добавление это как в качестве продюсера, так что вы можете просто использовать @Inject в управляемой фасоль:

@ApplicationScoped 
public class ApplicationResources { 
    @Produces 
    @PersistenceContext(unitName = "my-pu-name") 
    private EntityManager em; 
} 

Затем, вы можете вводить его в JAX-RS конечных точках, EJBs и любой другой компонент, который управляется контейнером:

@Stateless 
public class FooService { 
    @Inject 
    EntityManager em; 
} 
+0

где я должен положить persistence.xml? – donlys

+0

С этим классом необходимо закрыть EntityManager? – Krismorte