- Я знаю, что
EntityManager
, созданный мной самим, не является поточно-ориентированным. - Я знаю, что
EntityManager
, введенный через @PersistenceContext
в EJB, ведет себя как защищенный от взлома, потому что контейнер EJB сериализуетдоступ к EJB-компонентам. - Я знаю, что в EJB-инъекции
EntityManager
действительно является прокси. - Я знаю, что когда я внедряю
EntityManager
через @PersistenceContext
в @Dependent
компонент CDIи внедрить этот боб в EJB, он ведет себя как потокобезопасный из-за покрытия EJB (я считаю, что в этом случае EntityManager
также является прокси).
Но:
- Что происходит, когда я внедряю
EntityManager
через @PersistenceContext
в компонент CDI и использую этот компонент напрямую, например, в Servlet?Я считаю, что этот EntityManager
является прокси, поэтому этот прокси гарантирует безопасность потоков?
Редактировать: Подобный вопрос Java CDI @PersistenceContext и безопасность потоков делает 'Это не решает мою проблему, потому что принятый ответ показывает примеры EJB, а не примеры CDI.
Edit: Я проверил исходный код сервера приложений WildFly и похоже, что WildFly использует поточно-ориентированныйпрокси в CDI.Этот прокси выбирает настоящий EntityManager, когда это необходимо.Настоящие EntityManager хранятся в специальной структуре - стек карт EntityManager в ThreadLocal.