Требуется совет по дизайну EJB 3.1 Singleton + JPA + JSF

Дано: простое веб-приложение JSF (без шва), имея JSF-бины, вызывающие несколько EJB, которые, в свою очередь, загружают и сохраняют объекты JPA. Я хочу использовать аннотацию @Singleton для ejb и ввести EntityManager вместо EntityManagerFactory :

@Singleton
public class MyEJB {
  @PersistenceContext(unitName = PERSISTENCE_UNIT_NAME)
  protected EntityManager em; // not EntityManagerFactory
}

Spec говорит, что @Singleton является потокобезопасным, поддерживает атрибуты параллелизма и транзакции, которые (из моего обзора) делают его безопасным для вызова из JSF beans. Я ожидаю также повышения производительности из-за того, что EntityManager не воссоздается для каждого вызова и его возможности внутреннего кэширования.

Меня больше всего беспокоит операция создания / обновления сущностей JPA в ситуации, когда у меня есть несколько синглтонов и, как следствие, такое же количество долгоживущих EntityManager.

  • Что произойдет, если один синглтон обновит экземпляр JPA и как эти изменения вносятся в другие синглтоны?
  • Поскольку я не могу закрыть диспетчер сущностей, нужно ли мне сбрасывать его на каждое обновление сущности?
  • Было бы лучше, если бы эти несколько синглтонов использовали бы одну и ту же сущность менеджер?
  • Я видел всего несколько примеров такой конструкции. Зачем? Есть ли серьезные недостатки?

Заранее большое спасибо!

5
задан mispointer 15 August 2011 в 08:38
поделиться