boolean basicUpdate(final EntryEventImpl event, final boolean ifNew, final boolean ifOld,
      final long lastModified, final boolean overwriteDestroyed, final boolean invokeCallbacks,
      final boolean throwConcurrentModificationException)
      throws TimeoutException, CacheWriterException {

    // check validity of key against keyConstraint
    if (keyConstraint != null) {
      if (!keyConstraint.isInstance(event.getKey())) {
        throw new ClassCastException(
            String.format("key ( %s ) does not satisfy keyConstraint ( %s )",
                event.getKey().getClass().getName(), keyConstraint.getName()));
      }
    }

    validateValue(event.basicGetNewValue());

    return getDataView().putEntry(event, ifNew, ifOld, null, false, lastModified,
        overwriteDestroyed, invokeCallbacks, throwConcurrentModificationException);
  }
Allows null as new value to accommodate create with a null value.

@param event the event object for this operation, with the exception that the oldValue
       parameter is not yet filled in. The oldValue will be filled in by this operation.
@param ifNew true if this operation must not overwrite an existing key
@param ifOld true if this operation must not create a new entry
@param lastModified the lastModified time to set with the value; if 0L, then the lastModified
       time will be set to now.
@param overwriteDestroyed true if okay to overwrite the DESTROYED token: when this is true has
       the following effect: even when ifNew is true will write over DESTROYED token when
       overwriteDestroyed is false and ifNew or ifOld is true then if the put doesn't occur
       because there is a DESTROYED token present then the entry flag blockedDestroyed is set.
@param invokeCallbacks true if this operation should notify bridge clients and gateway senders
       in the event of a ConcurrentCacheModificationException being thrown during the update
@param throwConcurrentModificationException true if this operation should be allowed to throw
       any ConcurrentCacheModificationException that occurs during the update. If false, any
       ConcurrentCacheModificationExceptions that are thrown will be suppressed
@return false if ifNew is true and there is an existing key, or ifOld is true and there is no
        existing entry; otherwise return true.
geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java