/**
   * Initializes and wires up, and primes the cache based on any service classes that may have been
   * {@link #setServices(List) injected}.
   */
  @Override
  public void init() {

    ValidationFailures validationFailures = initAndValidate();

    validationFailures.assertNone();

    cacheBySpecId();
  }
 @Override
 public void validateSpecifications(ValidationFailures validationFailures) {
   final Map<ObjectSpecId, ObjectSpecification> specById = Maps.newHashMap();
   for (final ObjectSpecification objSpec : allSpecifications()) {
     final ObjectSpecId objectSpecId = objSpec.getSpecId();
     if (objectSpecId == null) {
       continue;
     }
     final ObjectSpecification existingSpec = specById.put(objectSpecId, objSpec);
     if (existingSpec == null) {
       continue;
     }
     validationFailures.add(
         "Cannot have two entities with same object type (@ObjectType facet or equivalent) Value; "
             + "both %s and %s are annotated with value of ''%s''.",
         existingSpec.getFullIdentifier(), objSpec.getFullIdentifier(), objectSpecId);
   }
 }