@Override
    public void bootstrapBeanValidation(
        Map puProperties, AbstractSession session, ClassLoader appClassLoader) {

      ValidatorFactory validatorFactory = getValidatorFactory(puProperties);

      // Check user/environment has specified the validator factory
      if (validatorFactory != null) {
        // We could obtain a validator factory => Bean Validation API is available at runtime. It is
        // ok to cast now
        ValidatorFactory beanValidatorFactory = validatorFactory;

        Class[] groupPrePersit =
            translateValidationGroups(
                (String) puProperties.get(PersistenceUnitProperties.VALIDATION_GROUP_PRE_PERSIST),
                appClassLoader);
        Class[] groupPreUpdate =
            translateValidationGroups(
                (String) puProperties.get(PersistenceUnitProperties.VALIDATION_GROUP_PRE_UPDATE),
                appClassLoader);
        Class[] groupPreRemove =
            translateValidationGroups(
                (String) puProperties.get(PersistenceUnitProperties.VALIDATION_GROUP_PRE_REMOVE),
                appClassLoader);

        BeanValidationListener validationListener =
            new BeanValidationListener(
                beanValidatorFactory, groupPrePersit, groupPreUpdate, groupPreRemove);
        // Install BeanValidationListener on the desc
        for (ClassDescriptor descriptor : session.getProject().getOrderedDescriptors()) {
          if (descriptor.isDescriptorTypeNormal()) {
            // add only to entities
            descriptor.getEventManager().addInternalListener(validationListener);
          }
        }
      }
    }