public void commitTransaction(IObjectScope scope, ICmdbTransaction cmdbTx) {
    idCache.clear();
    aliasCache.clear();

    Session session = null;
    Transaction tx = null;
    Profiler.start("commitTx()");
    try {
      session = getSession(cmdbTx.getSession());
      tx = session.beginTransaction();
      for (ICi item : scope.getDestroyedICis()) {
        session.delete(item);
      }
      for (ICi item : scope.getNewICis()) {
        session.save(item);
      }
      for (ICi item : scope.getModifiedICis()) {
        session.update(item);
      }
      cmdbTx.setEndTs(new Date());
      storeTx(session, cmdbTx); // session.update(cmdbTx);
      tx.commit();

    } catch (HibernateException he) {
      if (tx != null) {
        tx.rollback();
      }
      throw he;
    } finally {
      closeSession(session);

      Profiler.stop("commitTx()");
    }
  }
 public List queryCriteria(ISession s, DetachedCriteria detachedCrit, PageInfo info) {
   Session session = getSession(s);
   List result = Collections.EMPTY_LIST;
   try {
     Profiler.start("QueryCriteria():");
     Criteria criteria = detachedCrit.getExecutableCriteria(session);
     criteria.addOrder(Order.asc("alias"));
     if (info != null) {
       if (info.getFirstResult() != null) {
         criteria.setFirstResult(info.getFirstResult());
       }
       if (info.getMaxResult() != null) {
         criteria.setMaxResults(info.getMaxResult());
       }
     }
     result = criteria.list();
   } finally {
     Profiler.stop();
     closeSession(session);
   }
   return (result);
 }