Я изучал JPA 2 с гибернацией на ejb3.Поэтому я сделал примерный класс для проверки функциональности.Я пытался использовать транзакции BMT, но столкнулся с проблемой транзакции.Из приведенного ниже примера кода, если что-то пойдет не так в dosomething()
, будет сгенерировано исключение и откат UserTransaction.Тем не менее, я считаю, что отредактированный объект обновляется в БД, даже если выбрасывается исключение.Кто-нибудь может указать мне, если я что-то упустил в настройках?
@Stateless(mappedName = "MyManagementBean")
@Local
@TransactionManagement(TransactionManagementType.BEAN)
public class MyManagement implements MyManagementLocal,MyManagementRemote {
@PersistenceUnit(unitName="MyEjb") EntityManagerFactory emf;
@Resource UserTransaction utx;
@Resource SessionContext ctx;
/**
* Default constructor.
*/
public MyManagement () {
// TODO Auto-generated constructor stub
}
public void dosomething(String id) throws Exception
{
try {
utx.begin();
em = emf.createEntityManager();
Myline line = em.find(Myline.class, id);
line.setStatus("R");
em.flush();
utx.commit();
}
catch (Exception e) {
e.printStackTrace();
if (utx != null) utx.rollback();
throw e; // or display error message
}
finally {
em.close();
}
}