我是JSF,Filters和JPA的新手,并且正在使用NetBeans和Glassfish。

我有一个JSF表单,该表单提交并访问一个对象的方法,该方法调用Facade对象方法来进行数据库查询。
Facade类使用注释来声明对EntityManager的访问:

@PersistenceContext(unitName = "NAMEOFAPP")
private EntityManager em;


当我尝试从Filter类(在chain.doFilter之前或之后)调用相同的Facade时,Facade类和EntityManager可以工作,但是,如果我在Filter类中实例化自己的类并调用试图访问Facade的方法,它没有实例化,调用它时会得到null异常。

那么,如何获得我的班级来访问Facade / EntityManager?我以与“过滤器类”相同的方式声明外观。

@EJB
private MyFacade myFacade;


当所有其他实例都已实例化后,为什么我必须重新上课?

谢谢。

最佳答案

如果使用JavaEE 6,则可以使用@Inject注入它-CDI提供了此功能。

如果不是,则必须通过JNDI查找它。

您不应实例化要管理的对象。如果这样做,他们将不会得到任何注入,包括实体管理器。

10-07 22:55