Фильтры сервлетов Java и область применения других объектов и Entity Manager - PullRequest
2 голосов
/ 17 января 2011

Я новичок в JSF, Filters и JPA и использую NetBeans и Glassfish.

У меня есть форма JSF, которая отправляет и в свою очередь обращается к методу объекта, который вызывает метод объекта фасада для выполнения запроса к БД. Класс Facade использует аннотацию для объявления доступа к EntityManager:

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

Когда я пытаюсь вызвать один и тот же Facade из класса Filter (до или после chain.doFilter), класс Facade и EntityManager работают, однако, если я создаю свой собственный класс в классе Filter и вызываю метод, который пытается доступ к Фасаду, он не создан, и я получаю нулевое исключение при его вызове.

Итак, как я могу получить свой класс для доступа к Facade / EntityManager? Я объявляю Фасад так же, как в классе фильтров.

@EJB
private MyFacade myFacade;

Почему я должен Новый мой класс, когда все остальные уже созданы?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 17 января 2011

Если вы используете JavaEE 6, вы сможете внедрить его, используя @Inject - CDI предоставляет эту функцию.

Если нет, вам придется искать его через JNDI.

Вы не должны создавать экземпляры объектов, которые предназначены для управления. Если вы это сделаете, им ничего не впрыснут, включая менеджера по сущности.

0 голосов
/ 18 января 2011

Хорошо, с Божьей подсказкой, вот как я это получил. В фильтре класса I импорт:

import javax.inject.Inject;

и объявить мой Бин следующим образом:

@Inject
private MyBean myBean;

Теперь этот объект вводится. Мне также пришлось создать пустой WEB-INF / beans.xml

<beans
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd" />

Теперь он собирается и запускается без исключения.

...