问题描述
我正在将JSF2与Pure JPA2一起使用.但是问题出在EntityManager上,
I am using JSF2 with Pure JPA2.But the problem is with entityManager,
@PersistenceContext
private EntityManager entityManager;
在这里,entityManager没有被注入,并且始终为null.有人可以帮帮我,我的代码有什么问题吗?
Here entityManager is not getting injected and always null.Can some one please help me what is wrong in my code.
这是我的配置.
User.java
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
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>
Tomcat Server.xml
Tomcat Server.xml
<Context docBase="usertools" path="/usertools" reloadable="true">
<ResourceLink name="testDS"
global="testDS"
type="javax.sql.DataSource"/>
</Context>
TestBean.java
TestBean.java
@ManagedBean(name="testBean")
@ViewScoped
public class TestBean implements Serializable{
@ManagedProperty("#{testService}")
private ITestService testService;
public void saveData(User user){
testService.saveUser(user);
}
public void setTestService(ITestService testService){
this.testService = testService;
}
public ITestService getTestService(){
return testService;
}
}
TestServiceImpl.java
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
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名称& unitName属性.但是仍然无法正常工作.还尝试了web.xml
I have tried with @PersistenceContext name & unitName attributes. But still it is not working. Also tried with resource config in 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>
还是没有运气.有人可以帮帮我吗.
Still No Luck.Can some one please help me.
推荐答案
Tomcat不是Java EE容器,因此存在与容器管理的工厂和依赖项注入相关的限制.除其他外,您需要手动创建EntityManagerFactory
和EntityManager
.
Tomcat is not a Java EE container, so there are limitations related to container managed factories and dependency injection. Among others, you need to manually create the EntityManagerFactory
and the EntityManager
.
尚不清楚Hibernate文档,因此这是Eclipselink之一: Tomcat/JPA教程.选中对JPA的限制"部分,这对Hibernate同样适用.
Hibernate documentation isn't clear on that, so here's the Eclipselink one: Tomcat/JPA tutorial. Check the "Limitations to JPA" section, this applies as good to Hibernate.
这篇关于在Tomcat 6中使用JPA2:@PersitenceContext不起作用,EntityManager为null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!