我试图制作“客户”的JEE版本。教程应用程序(https://github.com/vaadin/tutorial)。
我尝试转换' CustomerForm' (https://github.com/vaadin/tutorial/blob/master/src/main/java/my/vaadin/app/CustomerForm.java)到有状态会话bean。我已将构造函数的内容移动到使用@PostConstruct注释的函数,并将@Stateful添加到类中。
当访问使用该表单的页面时,我收到以下错误(注意:在PatientForm下面的日志中实际上是CustomerForm)
引起:org.jboss.weld.exceptions.WeldException:Class org.jboss.weld.util.reflection.Reflections无法访问其成员 class com.vaadin.server.AbstractClientConnector with modifiers "保护" 在org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:437) 在org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:127) 在org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56) 在org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:67) 在org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100) at com.tekliko.forensic.view.PatientForm $ Proxy $ _ $$ _ Weld $ EnterpriseProxy $ .isThis(Unknown 资源) 在com.vaadin.server.AbstractClientConnector.equals(AbstractClientConnector.java:1075) 在com.vaadin.ui.AbstractComponent.isOrHasAncestor(AbstractComponent.java:1377) 在com.vaadin.ui.AbstractComponentContainer.addComponent(AbstractComponentContainer.java:168) 在com.vaadin.ui.AbstractOrderedLayout.addComponent(AbstractOrderedLayout.java:95) 在com.vaadin.ui.AbstractComponentContainer.addComponents(AbstractComponentContainer.java:57) 在com.vaadin.ui.HorizontalLayout。(HorizontalLayout.java:50) 在com.tekliko.forensic.view.PatientListView.initComponent(PatientListView.java:58) ... 78更多
@Stateful注释导致问题。如果我删除注释,令人惊讶的是,在视图中注入CustomerForm并在CustomerForm中注入持久性单元也可以工作(使用@PersistenceContext注入)。不过我无法调用EntityManager' merge'函数可能是因为bean不是一个合适的JEE bean。
0:39:53,306严重[com.vaadin.server.DefaultErrorHandler](默认 task-24):javax.persistence.TransactionRequiredException: WFLYJPA0060:执行此操作需要交易(或者 使用事务或扩展持久化上下文)