Контейнер отвечает за сканирование аннотаций @PersistenceContext
и внедрение EntityManagers
.Он может проксировать экземпляры EntityManager
.
В EJB, где контейнер отвечает за внедрение зависимостей, вы можете быть уверены, что вы потокобезопасны.Контекст постоянства будет совместно использоваться несколькими компонентами в рамках одной транзакции.
Однако, если вы введете этот EntityManager
, используя @PersistenceContext
в среде сервлетов (где важен параллелизм), вы не потокобезопасный.Вы должны использовать @PersistenceUnit
вместо этого.Вы можете обратиться к этой части Справочного руководства по JBoss 7 JPA :
Имейте в виду, что менеджер сущностей не должен быть безопасным для потоков (невставьте его в переменную класса сервлета, которая видна нескольким потокам) .
Некоторое время назад я подытожил то, что я знаю о совместном использовании постоянного контекста между транзакциями JTA и прокси EntityManagers
контейнером и опубликовал его здесь .Я надеюсь, что вы найдете это полезным.