我是个ejb初学者,我写了个程序,但当我把persist()写在SessionBean里一切正常,但在SessionBean中创建另一个类的一个对象,将要persist()的东西作为参数传入那个对象,在那个对象里persist()就不行,会报一个空指针错误。我想知道是怎么回事。SessionBean的代码大致是这样
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.FlushModeType;
import javax.persistence.PersistenceContext;import org.hibernate.FlushMode;import entity.Course;
import entity.TestEntity;@Stateless
@Remote({TestSessionBeanRemote.class})
public class TestSessionBean implements TestSessionBeanRemote 
{
public void createCourse(Course cor)
{
CourseManager cm = new CourseManager();
cm.createCourse(cor);
}
}CourseManager的代码是这样import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import entity.Course;
public class CourseManager 
{
@PersistenceContext
private EntityManager manager;

void createCourse(Course cor)
{
cor.setID((int)System.nanoTime());
manager.persist(cor);
manager.flush();
}
}

解决方案 »

  1.   

    用new CourseManager()创建CourseManager实例, 容器不会执行@PersistenceContext private EntityManager manager;注入, 所以new出来的cm.manager是null. 要由容器创建CourseManager实例.
      

  2.   

    谢谢楼上,那么能不能讲下如何由容器创建CourseManager实例呢?
      

  3.   

    程序运行时怎么创建TestSessionBean的实例, 也怎么创建CourseManager的实例. 比如, 把CourseManager也标注为@Stateless(同时也为它定义一个接口), 然后使用context.lookup()得到CourseManager的实例.