EntityManager потокобезопасность и Java EE


Я новичок в EJB и hibernate, и следующее сбивает меня с толку, потому что кажется, что есть противоречие, когда я ищу определенный ответ. Вопрос:

Это потокобезопасным, чтобы придать лицу прямо в зернах без гражданства, следующим образом?

@Stateless
public class SomeBean implements SomeInterface {

//..    
@Inject
private EntityManager entityManager;

//... non related transaction1()
//... non related transaction2()

Будет ли каждый безгосударственный Боб иметь свой собственный экземпляр EntityManager или общий экземпляр может быть введен?

Согласно Hibernate docs:

An EntityManager - это недорогой, не потокобезопасный объект, который должен используется один раз, для одного бизнес-процесса, одной единицы работы, а затем отбрасывается.

Делает ли контейнер EJB потокобезопасным?

И согласно документам EJB, безгосударственные сеансовые бобы по своей сути потокобезопасны, поскольку не позволяют разным клиентам работать с одним и тем же Бобом в одно и то же время.

Однако я читал примеры, в которых EntityManagerFactory следует вводить вместо EntityManager, и если EntityManager вводится непосредственно, это должно быть сделано в Stateful bean.

Будет ли это безопасно всегда вводить EJB непосредственно в Апатридный боб, как показано выше, или что будет в случае использования, когда он не будет работать?

1 3

1 ответ:

будет ли каждый компонент без состояния иметь свой собственный экземпляр EntityManager или общий экземпляр может быть введен ?

Ни то, ни другое. @Inject@PersistenceContext и @EJB) вводит экземплярпрокси , а не фактический экземпляр.

Прокси будет при каждом вызове метода делегировать нужный доступный экземпляр в текущем потоке и контексте. Другими словами, контейнер беспокоится обо всем этом, а не вы.

См. также: