Дано: простое веб-приложение JSF (без шва), имеющее JSF-бины, вызывающие несколько EJB-компонентов, которые в свою очередь загружают и сохраняют сущности JPA. Я хочу использовать @Singleton
аннотацию для ejb и inject EntityManager
вместо EntityManagerFactory
:
@Singleton
public class MyEJB {
@PersistenceContext(unitName = PERSISTENCE_UNIT_NAME)
protected EntityManager em; // not EntityManagerFactory
}
Спецификация говорит, что @Singleton
является поточно-ориентированным, поддерживает параллелизм и атрибуты транзакции, что (из моего pov) делает его безопасным для вызова из bean-компонентов JSF. Я ожидаю также повышения производительности из-за того, что EntityManager
не воссоздается при каждом вызове, и его внутренние возможности кэширования.
Моя главная задача здесь - это операции создания / обновления сущностей JPA в ситуации, когда у меня есть несколько синглтонов и, как результат, одинаковое количество долгоживущих EntityManager.
- Что произойдет, если один синглтон обновит экземпляр JPA и как они
изменения заселены в другие синглтоны?
- Поскольку я не могу закрыть менеджер сущностей, нужно ли мне его сбрасывать
каждое обновление сущности?
- Было бы лучше, если бы эти несколько синглетонов имели одну и ту же сущность
менеджер
- Я видел только несколько примеров такого дизайна. Зачем? Есть ли серьезные
недостатки?
Заранее большое спасибо!