Jsf 2 在Tomcat6中使用JPA2:@persistenceContext不';无法工作,EntityManager为空
我将JSF2与纯JPA2一起使用。 但问题在于entityManagerJsf 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;
@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>