Как вы можете увидеть , Quarkus, как и другие проекты, работающие с конструкциями JPA, делает многое за кулисами, чтобы убедиться, что контекстная ссылка, которую вы, как конечный пользователь, получаете, ведет себя безопасно и
(Отказ от ответственности: я не эксперт Quarkus, но этот конкретный шаблон делегирования операций EntityManager
различным базовым делегатам EntityManager
в зависимости от статусов транзакций, связанных с синхронизацией и других проблем является общим для всех серверы приложений, которые были до этого.)
Внедрение так называемых «управляемых контейнером» EntityManager
, которые ведут себя так, как люди интуитивно ожидают от них, достаточно сложно. Вы правы, чтобы быть осторожным как конечный пользователь в этой области: действительно, EntityManager
, который вы получаете от EntityManagerFactory#createEntityManager()
, не является потокобезопасным. Но это не то, что вводится в такие слоты. Например, EntityManager
, введенные таким образом, будут выполнять другие захватывающие вещи, такие как автоматическое участие в транзакциях JTA, и эти транзакции по своей природе определяются потоком c, поэтому должна быть обеспечена некоторая степень безопасности потока - и так и так далее. Очевидно, что здесь происходит нечто большее, чем простое внедрение управляемой приложением EntityManager
.
. Вывод: ссылка EntityManager
, которую получает компонент ApplicationScoped
, предоставляется таким образом, что это потокобезопасно.