Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 在Tomcat6中使用JPA2:@persistenceContext不';无法工作,EntityManager为空_Jsf 2_Jpa 2.0 - Fatal编程技术网

Jsf 2 在Tomcat6中使用JPA2:@persistenceContext不';无法工作,EntityManager为空

Jsf 2 在Tomcat6中使用JPA2:@persistenceContext不';无法工作,EntityManager为空,jsf-2,jpa-2.0,Jsf 2,Jpa 2.0,我将JSF2与纯JPA2一起使用。 但问题在于entityManager @PersistenceContext private EntityManager entityManager; 此处entityManager未被注入,并且始终为空。 谁能帮我一下我的代码有什么问题吗 这是我的配置 User.java @Entity @Table(name="USER") public class User { private int id;

我将JSF2与纯JPA2一起使用。 但问题在于entityManager

@PersistenceContext
private EntityManager entityManager;
此处entityManager未被注入,并且始终为空。 谁能帮我一下我的代码有什么问题吗

这是我的配置

User.java

    @Entity
    @Table(name="USER")
    public class User {

        private int id;
        private String name;
        private String surname;

        @Id
        @SequenceGenerator(name="user_id_seq_gen", sequenceName="USER_ID_GEN_SEQ", allocationSize=1)
        @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="user_id_seq_gen")
        @Column(name="ID", unique = true, nullable = false)
        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        @Column(name="NAME", unique = true, nullable = false)
        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Column(name="SURNAME", unique = true, nullable = false)
        public String getSurname() {
            return surname;
        }

        public void setSurname(String surname) {
            this.surname = surname;
        }   

    }
persistence.xml

   <?xml version="1.0" encoding="UTF-8"?>
        <persistence 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" version="2.0">
           <persistence-unit name="testUnit" transaction-type="RESOURCE_LOCAL">
              <provider>org.hibernate.ejb.HibernatePersistence</provider>
              <non-jta-data-source>java:/comp/env/testDS</non-jta-data-source>
              <class>com.user.external.test.User</class>
              <exclude-unlisted-classes>false</exclude-unlisted-classes>
              <properties>
                 <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
                 <property name="hibernate.max_fetch_depth" value="6"/>
                 <property name="hibernate.show_sql" value="false"/>
                 <property name="hibernate.format_sql" value="true"/>
              </properties>
           </persistence-unit>
        </persistence>
TestServiceImpl.java

    @ManagedBean(name="testService")
    @ApplicationScoped
    public class TestServiceImpl implements ITestService {

        @ManagedProperty(value="#{testDAO}")
        private ITestDAO testDAO;

        public void saveUser(User user){
            testDAO.saveUser(user);
        }

        public void setTestDAO(ITestDAO testDAO){
            this.testDAO = testDAO;
        }

        public ITestDAO getTestDAO(){
            return testDAO;
        }

    }   
TestDao.java

    @ManagedBean(name = "testDAO")
    @ApplicationScoped
    public class TestDAO implements ITestDAO {

        @PersistenceContext
        private EntityManager entityManager; // is null

        public void saveUser(User user){
            entityManager.persist(user); // Getting Null Pointer Here....
        }   

        public void setEntityManager(EntityManager entityManager) {
            this.entityManager = entityManager;
        }

        public EntityManager getEntityManager() {
            return entityManager;
        }

    }
我尝试过@PersistenceContext name和unitName属性。但它仍然不起作用。还尝试了web.xml中的资源配置

    <persistence-context-ref>
            <persistence-context-ref-name>testUnit</persistence-context-ref-name>
            <persistence-unit-name>testUnit</persistence-unit-name>
        </persistence-context-ref>

        <resource-ref>
            <description>DB Connection</description>
            <res-ref-name>testUnit</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>

测试单元
测试单元
数据库连接
测试单元
javax.sql.DataSource
容器
还是不走运。
有人能帮我一下吗。

Tomcat不是JavaEE容器,因此在容器管理的工厂和依赖注入方面存在一些限制。其中,您需要手动创建
EntityManager工厂
EntityManager

Hibernate文档对此并不清楚,所以这里是Eclipselink一个:。检查“JPA的限制”部分,这同样适用于Hibernate

另见:

如果您使用Java EE版本的Tomcat,BaluC,它会起作用。我如何能够使用spring/Tomcat,但在JEE 6/Tomcat中,使用@PersistenceContext注入实体管理器?当做
    @ManagedBean(name = "testDAO")
    @ApplicationScoped
    public class TestDAO implements ITestDAO {

        @PersistenceContext
        private EntityManager entityManager; // is null

        public void saveUser(User user){
            entityManager.persist(user); // Getting Null Pointer Here....
        }   

        public void setEntityManager(EntityManager entityManager) {
            this.entityManager = entityManager;
        }

        public EntityManager getEntityManager() {
            return entityManager;
        }

    }
    <persistence-context-ref>
            <persistence-context-ref-name>testUnit</persistence-context-ref-name>
            <persistence-unit-name>testUnit</persistence-unit-name>
        </persistence-context-ref>

        <resource-ref>
            <description>DB Connection</description>
            <res-ref-name>testUnit</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>