事务没有回滚但是使用Hibernate JPA 2.0和EJB3与BMT一起提交

时间:2011-06-28 10:15:02

标签: hibernate transactions ejb-3.0 jpa-2.0

我在ejb3上一直在研究有关hibernate的JPA 2。  所以我做了一个样本类来测试功能。我尝试过使用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();
            }       
        } 

1 个答案:

答案 0 :(得分:0)

例外的类型是什么?程序是否曾打过电话

utx.rollback();

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