001    package railo.runtime.orm.hibernate;
002    
003    import org.hibernate.Session;
004    import org.hibernate.Transaction;
005    
006    import railo.runtime.orm.ORMTransaction;
007    
008    public class HibernateORMTransaction implements ORMTransaction {
009            
010            private Transaction trans;
011            private Session session;
012            private boolean doRollback;
013            private boolean autoManage;
014    
015            public HibernateORMTransaction(Session session, boolean autoManage){
016                    this.session=session;
017                    this.autoManage=autoManage;
018            }
019    
020            /**
021             * @see railo.runtime.orm.ORMTransaction#begin()
022             */
023            public void begin() {
024                    if(autoManage)session.flush();
025                    trans=session.beginTransaction();
026                    
027            }
028    
029            /**
030             * @see railo.runtime.orm.ORMTransaction#commit()
031             */
032            public void commit() {
033                    // do nothing
034            }
035    
036            /**
037             * @see railo.runtime.orm.ORMTransaction#rollback()
038             */
039            public void rollback() {
040                    doRollback=true;
041            }
042    
043            /**
044             * @see railo.runtime.orm.ORMTransaction#end()
045             */
046            public void end() {
047                    if(doRollback){
048                            trans.rollback();
049                            if(autoManage)session.clear();
050                    }
051                    else{
052                            trans.commit();
053                            session.flush();
054                    }
055            }
056    }