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 ответ:
будет ли каждый компонент без состояния иметь свой собственный экземпляр EntityManager или общий экземпляр может быть введен ?
Ни то, ни другое.
@Inject
(и@PersistenceContext
и@EJB
) вводит экземплярпрокси , а не фактический экземпляр.Прокси будет при каждом вызове метода делегировать нужный доступный экземпляр в текущем потоке и контексте. Другими словами, контейнер беспокоится обо всем этом, а не вы.
См. также: