public void rollbackTx(Set<Long> acked) throws Exception {
    MessageInfo lastMi = null;

    MessageInfo mi = null;
    Iterator<MessageInfo> iter = deliveringRefs.iterator();
    while (iter.hasNext()) {
      mi = iter.next();
      if (mi.isLocalAcked()) {
        acked.add(mi.nativeId);
        lastMi = mi;
      }
    }

    if (lastMi != null) {
      session.getCoreSession().acknowledge(nativeId, lastMi.nativeId);
    }
  }
  // this is called before session commit a local tx
  public void finishTx() throws Exception {
    MessageInfo lastMi = null;

    MessageInfo mi = null;
    Iterator<MessageInfo> iter = deliveringRefs.iterator();
    while (iter.hasNext()) {
      mi = iter.next();
      if (mi.isLocalAcked()) {
        iter.remove();
        lastMi = mi;
      }
    }

    if (lastMi != null) {
      session.getCoreSession().acknowledge(nativeId, lastMi.nativeId);
    }
  }