未注入PersistenceContext

时间:2017-01-08 23:08:02

标签: java hibernate jpa jboss

我在WildFly 10上运行了Java8 / Spring4 webapp,我想使用JPA 2.1。

我创建了一个persitence.xml文件,并使用从jboss reference guide中获取的小代码段创建了一个dao类:

@Stateful  // will use container managed transactions
public class UserDao {

  @PersistenceContext(unitName = "customerPU") // default type is PersistenceContextType.TRANSACTION
  EntityManager em;

  public customer createCustomer(String name, String address) {
    Customer customer = new Customer(name, address);
    em.persist(customer);
}

不幸的是,实体经理没有按照预期注入。我读了in a tutorial

  

@PersistenceContext注释可用于任何CDI bean,EJB,   Servlet,Servlet侦听器,Servlet过滤器或JSF ManagedBean。

我认为使用@Stateful注释会自动使我的dao类成为一个(ej)bean,因此注入将由jboss容器进行,但它不会发生,当我得到NullPointerException时调用.persist方法。为什么这样,我可以解决它吗?我已经尝试使用@Stateless注释而是尝试使用PersistenceContextType.EXTENDED而不是默认的TRANSACTIONAL注释,但这似乎没有改变任何东西。请清楚地描述这个问题的解决方案是否需要额外的库(spring,hibernate),或者只是配置问题(persistence.xml,standalone.xml ......)

我在记录中看到了这一点,我不确定它的含义:

  

INFO [] [org.jboss.as.ejb3.deployment] WFLYEJB0473:JNDI绑定   会话bean在部署单元的部署中名为“UserDao”   “BasicWebapp.war”'如下:

     

Java的:全球/ BasicWebapp / userDAO的com.company.project.data.UserDao     Java的:应用程序/ BasicWebapp / userDAO的com.company.project.data.UserDao     Java的:模块/ userDAO的com.company.project.data.UserDao     java:global / BasicWebapp / UserDao java:app / BasicWebapp / UserDao     的java:模块/ userDAO的

我知道我的数据源和persistence.xml已经正确配置,因为我设法通过将代码片段放在我的ServletContextListener类中来完成注入工作(就像一个小测试,我知道它没有有理由在那里)。仅供参考,这里是简洁的persistence.xml文件,它主要使用jboss提供的默认值:

<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

    <persistence-unit name="customerPU" transaction-type="JTA">

        <jta-data-source>java:jboss/datasources/customerdb</jta-data-source>

        <class>com.company.project.data.Customer</class>

    </persistence-unit> 

</persistence>

0 个答案:

没有答案