2012-06-14 7 views
0

У меня есть 3 EJB фанатичных боба. A - на бизнес-слое. B, C - слой устойчивости.EJB 3.1 Распространение транзакций

Bean A вызывает B и C для обновления некоторых данных в базе данных (DB2).

Но, к несчастью, при вызове bean C блокировки базы данных. Возможно ли, что B и C выполняются в транзакциях дефранта? В противном случае я не могу понять, почему блокировки DB2 ...

ответ

0

Если вы используете hibernate в качестве поставщика персистентности, он предоставляет транзакционную аннотацию, называемую @TransactionAttribute(REQUIRES_NEW), по бизнес-методу. Эта аннотация обрабатывает метод в отдельной транзакции. Поэтому я думаю, что в JPA должна быть альтернатива. Но не уверен.

+0

Итак, если я не поставил эту аннотацию на бизнес-метод, то никакая транзакция не будет запущена. Отдельные транзакции будут для B и C? – obogoliy

+0

Если вы не разместите эту аннотацию, тогда метод будет выполняться в родительской транзакции, то есть транзакция будет завершена, если родительский метод, вызвавший этот метод, завершится. И я предполагаю, что вы вызываете методы в B & C от A до тех пор, пока A не завершит выполнение B и C в той же транзакции –

+0

Также вы можете отправить свой код, если он не является конфиденциальным? –

0

У меня есть JBoss AS 7. У меня есть два субъекта Работодатель и сотрудник. Сотрудник имеет ссылку на работодателя.

У меня

@Stateless 
EployerService { 
.... 
public void lockEmployer (long id) { 
    Employer employer = employerDAO.findById(id); 
    employer.setLocked(true); 
    employerDAO.updateEmployer(employer); 
    employeeDAO.updateEmployeesByEmployerId(id); 
} 
} 

в EmployeeDAO

updateEmployeesByEmployerId (long empId) { 
    em.createQuery("update Employee set locked = true where emplopyerId=:id").setParameter("id", empId).executeUpdate(); 

} 

в EmployerDAO

udpateEmplopyer(Employer employer) { 
    em.merge(employer); 
} 

Когда я положил всю логику как от дао в одном DAO - нет замков!

 Смежные вопросы

  • Нет связанных вопросов^_^