Транзакция не откатилась, но зафиксирована с использованием Hibernate JPA 2.0 и EJB3 с BMT - PullRequest
0 голосов
/ 28 июня 2011

Я изучал 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();
            }       
        } 

1 Ответ

0 голосов
/ 29 июня 2011

Какой тип исключения?Программа когда-нибудь нажимала на вызов

utx.rollback();

try

e.printStackTrace();
if (utx != null) {
    utx.rollback();
    system.error.println("Rolled Back");
}                
throw e; // or display error message
...