2015-05-23 1 views
5

Я хочу сделать приложение для входа в Java EE. Я думал о его реализации, используя html-страницу, сервлет и класс сущности для пользователя, но кажется, что EntityManager не является потокобезопасным (не может быть введен в сервлет, и мне нужно его для проверки базы данных).Injecting EntityManager в сервлет, кажется небезопасным потоком

Я прочитал около EntityManagerFactory, но я не хочу управлять жизнью произведенного EntityManager, когда у меня может быть контейнер. Я думаю, что некоторая реализация с использованием шаблона DAO может быть выполнена таким образом, что я могу иметь диспетчера сущностей в сервлете, что-то вроде DAOImpl, содержащего менеджера, и иметь этот класс как приватную переменную в сервлете. Но я не мог найти полезные учебники в Интернете.

Может ли кто-то обеспечить реализацию для этого?

+0

Объект может быть не только потокобезопасным, если он имеет изменяемое состояние. Итак, почему бы не выполнить аутентификацию с помощью объекта без состояния. Разве это не то, что для @Stateless Session Bean (часть EJB 3.0)? – scottb

+0

Как именно вы впрыскиваете его, из-за чего вы думаете, что он не является потокобезопасным? – BalusC

ответ

1

Путь к созданию - это создать LoginService как @Stateless. Он должен содержать EntityManager. Эта забота EJB управляет логином.

Теперь введите EJB в свой сервлет.

Контейнер будет заботиться о параллелизме.

http://www.adam-bien.com/roller/abien/entry/is_in_an_ejb_injected

+0

Также здесь: http://tamanmohamed.blogspot.cz/2012/03/jpa-thread-safety-when-injecting.html – dmatej

1

Следуйте Oracle предложила документацию here, любой подход должен сделать: Либо:

Потребители инъекционных EntityManagerFactory в вашем дао осущ через SerlvetContextListener.

@PersistenceUnit   
private EntityManagerFactory emf; 

или Внедрение EntityManager в ваш DaoImpl.

@PersistenceContext 
    private EntityManager em;