@Override
  public void updateMaxCounterForClass(DomainClassInfo domainClassInfo, int newCounterValue) {
    Transaction current = FenixFramework.getTransaction();

    Set<DomainClassInfo> infos = current.getFromContext(KEY_INSTANTIATED_CLASSES);
    if (infos == null) {
      infos = new HashSet<DomainClassInfo>();
      current.putInContext(KEY_INSTANTIATED_CLASSES, infos);
    }

    if (infos.add(domainClassInfo)) {
      logger.debug(
          "Will update counter for instances of {} upon commit.", domainClassInfo.domainClassName);
    }
  }
  // only correct if invoked within a backing transaction.  Also this code
  // assumes a single global commit lock. Otherwise the counter might be set
  // backwards by a late-running thread.
  private void updatePersistentInstanceCounters() {
    Transaction current = FenixFramework.getTransaction();

    Set<DomainClassInfo> infos = current.getFromContext(KEY_INSTANTIATED_CLASSES);

    if (infos != null) {
      for (DomainClassInfo info : infos) {
        String key = makeKeyForMaxCounter(info);
        Integer max = (Integer) dataGrid.get(key);

        int newCounterValue = info.getLastKey();

        if (max == null || max < newCounterValue) {
          dataGrid.put(key, newCounterValue);
          logger.debug(
              "Update persistent counter for class {}: {}", info.domainClassName, newCounterValue);
        }
      }
    }
  }