void firePendingCallbacks(List<EntryEventImpl> callbacks) {
    boolean isConfigError = false;
    EntryEventImpl lastTransactionEvent = null;
    try {
      lastTransactionEvent = getLastTransactionEvent(callbacks);
    } catch (ServiceConfigurationError ex) {
      logger.error(ex.getMessage());
      isConfigError = true;
    }

    for (EntryEventImpl ee : callbacks) {
      boolean isLastTransactionEvent = TXLastEventInTransactionUtils
          .isLastTransactionEvent(isConfigError, lastTransactionEvent, ee);
      try {
        if (ee.getOperation().isDestroy()) {
          ee.getRegion().invokeTXCallbacks(EnumListenerEvent.AFTER_DESTROY, ee, true,
              isLastTransactionEvent);
        } else if (ee.getOperation().isInvalidate()) {
          ee.getRegion().invokeTXCallbacks(EnumListenerEvent.AFTER_INVALIDATE, ee, true,
              isLastTransactionEvent);
        } else if (ee.getOperation().isCreate()) {
          ee.getRegion().invokeTXCallbacks(EnumListenerEvent.AFTER_CREATE, ee, true,
              isLastTransactionEvent);
        } else {
          if (!ee.hasNewValue()) { // GEODE-8964, fixes GII and TX create conflict that
            ee.getRegion(). // produces an Update with null value
                invokeTXCallbacks(EnumListenerEvent.AFTER_CREATE, ee, true, isLastTransactionEvent);
          } else {
            ee.getRegion().invokeTXCallbacks(EnumListenerEvent.AFTER_UPDATE, ee, true,
                isLastTransactionEvent);
          }
        }
      } finally {
        ee.release();
      }
    }
  }
Adds an entry op for this tx to do on the far side
geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java