Транзакцията не се върна назад, но се ангажира с помощта на Hibernate JPA 2.0 и EJB3 с BMT

Учих за JPA 2 с хибернация на ejb3. Затова направих примерен клас, за да тествам функционалностите. Опитах да използвам BMT транзакции, но се сблъсках с проблем при транзакция. От примерния код по-долу, ако нещо се обърка в dosomething(), ще бъде хвърлено изключение и така UserTransaction ще бъде върната назад. Откривам обаче, че редактираният обект се актуализира до DB, дори изключението да е хвърлено. Може ли някой да ме посочи, ако пропускам нещо в настройката?

@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();
            }       
        } 

person Quincy    schedule 28.06.2011    source източник


Отговори (1)


Какъв е типът на изключението?. Програмата някога натиска ли обаждането до

utx.rollback();

опитвам

e.printStackTrace();
if (utx != null) {
    utx.rollback();
    system.error.println("Rolled Back");
}                
throw e; // or display error message
person Luke    schedule 29.06.2011
comment
Няма изключение. Изглежда, че целият код работи добре. Освен преди извършване на JPA заявката, тя автоматично изтрива и предава предишните промени в DB. - person Quincy; 30.06.2011
comment
Съжалявам, че съм разбрал погрешно въпроса, но откривам, че редактираният обект се актуализира до DB, дори изключението да е хвърлено. Може ли някой да ме посочи, ако пропускам нещо в настройката? - person Luke; 30.06.2011
comment
stackoverflow.com/questions/6516973/ - свързан въпрос с повече подробности - person Luke; 30.06.2011