【发布时间】:2014-09-16 00:23:38
【问题描述】:
考虑以下类:
package com.deluxe.common.dao;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.faces.bean.ManagedBean;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.deluxe.jpa.Customer;
@ManagedBean(name="jpaBean")
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class JpaDao {
@PersistenceContext(unitName="EmployeeService")
EntityManager em;
public EntityManager getEntityManager() {
return em;
}
public void addEmployee(String name, String lastName) {
Customer cust = new Customer();
cust.setName(name);
cust.setLastName(lastName);
em.persist(cust);
}
}
当我通过 JSF 托管 bean 调用 addEmployee 时,entitymanager 为空,但是当我在 jsf bean 中打印 entitymanager 时,它会显示出来。这是jsf托管bean的代码:
@EJB JpaDao psb;
public void addCustomer() {
EntityManager em = psb.getEntityManager();
JpaDao jpa = new JpaDao();
jpa.addEmployee("Some..", "Thing.."); // Throwing err, em in JpaDao is null.
System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"+em); //This line show em is there.
Customer cust = new Customer();
cust.setLastName("Krishnawat");
cust.setName("Nagendra");
em.persist(cust);
}
为什么会这样?我是不是错过了什么。
【问题讨论】:
-
您以前使用过 EJB 吗?你为什么选择实例化你的
JpaDao?