/**
   * Perform appengine-specific validation on the provided meta data. Also generates cached
   * information that is needed by persistence.
   *
   * @param cmd The metadata to validate.
   */
  public void validateMetaDataForClass(AbstractClassMetaData cmd) {
    // Only validate each meta data once
    if (validatedClasses.add(cmd.getFullClassName())) {
      if (getBooleanProperty(VALIDATE_METADATA, true)) {
        // Only do if the persistence property is not set to false
        metadataValidator.validate(cmd);
      }

      AbstractMemberMetaData parentPkMmd =
          MetaDataUtils.getParentPkMemberMetaDataForClass(
              cmd,
              getMetaDataManager(),
              getNucleusContext().getClassLoaderResolver(cmd.getClass().getClassLoader()));
      if (parentPkMmd != null) {
        parentMemberMetaDataByClass.put(cmd.getFullClassName(), parentPkMmd);
      }
    }
  }