在Vaadin 7中调用EJB的NullPointerException

在Vaadin 7中调用EJB的NullPointerException,vaadin,vaadin7,java-ee-7,Vaadin,Vaadin7,Java Ee 7,我使用的是Wildfly 8.2、JavaEE 7和Vaadin 7。在用户界面层调用无状态bean findAll()方法时,我得到了NullPointerException。你知道为什么吗?下面是我的代码 @MappedSuperclass public abstract class AbstractEntity implements Serializable { @Id @Gen

我使用的是Wildfly 8.2、JavaEE 7和Vaadin 7。在用户界面层调用无状态bean findAll()方法时,我得到了NullPointerException。你知道为什么吗?下面是我的代码

            @MappedSuperclass
            public abstract class AbstractEntity implements Serializable {
                @Id
                @GeneratedValue(strategy = GenerationType.AUTO)
                private Long id;

                //Getters/Setters are here    
            }

        @Entity
        public class Patient extends AbstractEntity {
            String firstName;
            String lastName;
            Date DOB;

            public Patient() {}
            //Getters/Setters are here
        }

    @Stateless
    public class PatientService {

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

        public List<Patient> findAll() {
            CriteriaQuery<Patient> cq = em.getCriteriaBuilder().createQuery(Patient.class);
            cq.select(cq.from(Patient.class));
            return em.createQuery(cq).getResultList();
        }

    }

您会得到一个
NPE
,因为
patientService
null

问题在于
MyUI
类不是托管bean,这意味着它不是由javaee容器创建的,这就是
@Inject
注释没有任何效果的原因


使MyUI成为托管bean的最简单方法是使用插件。

谢谢。我改为使用Vaadin CDI,现在我能够执行EJB调用。但现在它说,表“病人”没有找到。我使用Wildfly 8.2附带的H2数据库,我创建了一个数据源,并成功连接。我创建了一个表“PATIENT”,它包含实体bean中的所有字段。你知道为什么它找不到它吗?@Andy也许你可以定义hibernate为你创建表,比如:in persistence.xml。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="patient-pu" transaction-type="JTA">
    <jta-data-source>java:jboss/h2</jta-data-source>
    <class>com.example.samples.backend.data.Patient</class>
  </persistence-unit>
</persistence>
@Viewport("user-scalable=no,initial-scale=1.0")
@Theme("valo")
@Widgetset("com.example.MyAppWidgetset")
public class MyUI extends UI {
    @Inject
    private PatientService patientService;

    @Override
    protected void init(VaadinRequest vaadinRequest) {
        patientService.findAll();
    }

    @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
    @VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
    public static class MyUIServlet extends VaadinServlet {
    }
}