EntityManager
is небезопасно по определению. Характеристики сервлетов говорят, что в нераспределенной среде и без реализации SingleThreadModel
существует только один экземпляр сервлета за определение.@PersistenceContext EntityManager потоковая безопасность в Spring и Java EE
Поэтому в Java EE, когда вы инжектировать EntityManager
через @PersistenceContext
в поле сервлета - это не поточно:
public class MyServlet extends HttpServlet {
// Not thread-safe, should be using EMF instead.
@PersistenceContext
private EntityManager em;
}
Является ли это правильно сказать, что, несмотря на масштабы по умолчанию Spring фасолью является одноточечным,
EntityManager
является потокобезопасным, так как Spring используетThreadLocal
для привязки его транзакций иEntityManager
к нему?Является ли приведенный выше пример сервлетов действительным весной? Не по-прежнему ли это небезопасно?
Подходит ли подход
ThreadLocal
только для управляемых фасолей Spring и простого сервлета, не является ли это одним из них?Насколько я помню, в контейнер входит ответственность за введение
EntityManager
. В реализации Java EE Glassfish именно сервер приложений обнаружил@PersistenceContext
как точку впрыска.
Как это выглядит весной? Является ли Spring Framework ответственным за обнаружение этих аннотаций или это ответственность разработчика JPA?
Спасибо Ralph. Поэтому, говоря «2», нет «вы имеете в виду, что он не является потокобезопасным, потому что этот сервлет не является весенним бобом, так что на самом деле ** никакой инъекции вообще не будет **? Можно ли пометить такой сервлет как весенний боб? Я как-то чувствую, что это довольно редко, не рекомендуется и беспорядочная идея - это просто теоретический вопрос, чтобы понять механизм Весны. –
Я имею в виду, что это не фасоль весны (вот что такое первый абзац), поэтому нет инъекции, а 'em' будет пустым. - Проверьте это, если это не пустое, тогда что-то действительно странное продолжается. Один из способов, по которым вы можете попытаться сделать это весенним бобом, - '@ Configurable', но для этого требуется реальный AspectJ, и я действительно не знаю, работает ли это для Servlets. – Ralph