diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/beanvalidation/BeanValidationEventListener.java b/hibernate-core/src/main/java/org/hibernate/cfg/beanvalidation/BeanValidationEventListener.java index 93baed4662..8c71f0dbe8 100644 --- a/hibernate-core/src/main/java/org/hibernate/cfg/beanvalidation/BeanValidationEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/cfg/beanvalidation/BeanValidationEventListener.java @@ -22,6 +22,7 @@ * Boston, MA 02110-1301 USA */ package org.hibernate.cfg.beanvalidation; + import java.util.HashSet; import java.util.Properties; import java.util.Set; @@ -36,7 +37,6 @@ import javax.validation.ValidatorFactory; import org.jboss.logging.Logger; import org.hibernate.EntityMode; -import org.hibernate.cfg.Configuration; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.event.spi.PreDeleteEvent; import org.hibernate.event.spi.PreDeleteEventListener; @@ -53,12 +53,13 @@ import org.hibernate.persister.entity.EntityPersister; * @author Emmanuel Bernard * @author Hardy Ferentschik */ -//FIXME review exception model public class BeanValidationEventListener implements PreInsertEventListener, PreUpdateEventListener, PreDeleteEventListener { - private static final CoreMessageLogger LOG = Logger.getMessageLogger(CoreMessageLogger.class, - BeanValidationEventListener.class.getName()); + private static final CoreMessageLogger LOG = Logger.getMessageLogger( + CoreMessageLogger.class, + BeanValidationEventListener.class.getName() + ); private ValidatorFactory factory; private ConcurrentHashMap> associationsPerEntityPersister = @@ -76,17 +77,16 @@ public class BeanValidationEventListener * Constructor used in an environment where validator factory is injected (JPA2). * * @param factory The {@code ValidatorFactory} to use to create {@code Validator} instance(s) - * @param properties Configued properties + * @param properties Configured properties */ public BeanValidationEventListener(ValidatorFactory factory, Properties properties) { init( factory, properties ); } - public void initialize(Configuration cfg) { + public void initialize(Properties properties) { if ( !initialized ) { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); - Properties props = cfg.getProperties(); - init( factory, props ); + init( factory, properties ); } } @@ -135,34 +135,38 @@ public class BeanValidationEventListener if ( groups.length > 0 ) { final Set> constraintViolations = validator.validate( object, groups ); if ( constraintViolations.size() > 0 ) { - Set> propagatedViolations = - new HashSet>( constraintViolations.size() ); - Set classNames = new HashSet(); - for ( ConstraintViolation violation : constraintViolations ) { - LOG.trace( violation ); - propagatedViolations.add( violation ); - classNames.add( violation.getLeafBean().getClass().getName() ); - } - StringBuilder builder = new StringBuilder(); - builder.append( "Validation failed for classes " ); - builder.append( classNames ); - builder.append( " during " ); - builder.append( operation.getName() ); - builder.append( " time for groups " ); - builder.append( toString( groups ) ); - builder.append( "\nList of constraint violations:[\n" ); - for (ConstraintViolation violation : constraintViolations) { - builder.append( "\t" ).append( violation.toString() ).append("\n"); - } - builder.append( "]" ); - - throw new ConstraintViolationException( - builder.toString(), propagatedViolations - ); + throw createConstraintViolationException( operation, groups, constraintViolations ); } } } + private ConstraintViolationException createConstraintViolationException(GroupsPerOperation.Operation operation, Class[] groups, Set> constraintViolations) { + Set> propagatedViolations = + new HashSet>( constraintViolations.size() ); + Set classNames = new HashSet(); + for ( ConstraintViolation violation : constraintViolations ) { + LOG.trace( violation ); + propagatedViolations.add( violation ); + classNames.add( violation.getLeafBean().getClass().getName() ); + } + StringBuilder builder = new StringBuilder(); + builder.append( "Validation failed for classes " ); + builder.append( classNames ); + builder.append( " during " ); + builder.append( operation.getName() ); + builder.append( " time for groups " ); + builder.append( toString( groups ) ); + builder.append( "\nList of constraint violations:[\n" ); + for ( ConstraintViolation violation : constraintViolations ) { + builder.append( "\t" ).append( violation.toString() ).append( "\n" ); + } + builder.append( "]" ); + + return new ConstraintViolationException( + builder.toString(), propagatedViolations + ); + } + private String toString(Class[] groups) { StringBuilder toString = new StringBuilder( "[" ); for ( Class group : groups ) { diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/beanvalidation/BeanValidationIntegrator.java b/hibernate-core/src/main/java/org/hibernate/cfg/beanvalidation/BeanValidationIntegrator.java index 7b6a8be839..46ed915c9e 100644 --- a/hibernate-core/src/main/java/org/hibernate/cfg/beanvalidation/BeanValidationIntegrator.java +++ b/hibernate-core/src/main/java/org/hibernate/cfg/beanvalidation/BeanValidationIntegrator.java @@ -50,12 +50,13 @@ import org.hibernate.service.spi.SessionFactoryServiceRegistry; * @author Steve Ebersole */ public class BeanValidationIntegrator implements Integrator { - private static final CoreMessageLogger LOG = Logger.getMessageLogger(CoreMessageLogger.class, BeanValidationIntegrator.class.getName()); + private static final CoreMessageLogger LOG = Logger.getMessageLogger( + CoreMessageLogger.class, + BeanValidationIntegrator.class.getName() + ); public static final String APPLY_CONSTRAINTS = "hibernate.validator.apply_to_ddl"; - public static final String BV_CHECK_CLASS = "javax.validation.Validation"; - public static final String MODE_PROPERTY = "javax.persistence.validation.mode"; private static final String ACTIVATOR_CLASS = "org.hibernate.cfg.beanvalidation.TypeSafeActivator"; @@ -63,116 +64,136 @@ public class BeanValidationIntegrator implements Integrator { private static final String ACTIVATE_METHOD = "activateBeanValidation"; private static final String VALIDATE_METHOD = "validateFactory"; - public static void validateFactory(Object object) { - try { - final Class activatorClass = BeanValidationIntegrator.class.getClassLoader().loadClass( ACTIVATOR_CLASS ); - try { - final Method validateMethod = activatorClass.getMethod( VALIDATE_METHOD, Object.class ); - if ( ! validateMethod.isAccessible() ) { - validateMethod.setAccessible( true ); - } - try { - validateMethod.invoke( null, object ); - } - catch (InvocationTargetException e) { - if ( e.getTargetException() instanceof HibernateException ) { - throw (HibernateException) e.getTargetException(); - } - throw new HibernateException( "Unable to check validity of passed ValidatorFactory", e ); - } - catch (IllegalAccessException e) { - throw new HibernateException( "Unable to check validity of passed ValidatorFactory", e ); - } - } - catch (HibernateException e) { - throw e; - } - catch (Exception e) { - throw new HibernateException( "Could not locate method needed for ValidatorFactory validation", e ); - } - } - catch (HibernateException e) { - throw e; - } - catch (Exception e) { - throw new HibernateException( "Could not locate TypeSafeActivator class", e ); - } - } - @Override + // TODO Can be removed once the switch to the new metamodel is complete. See also HHH-7470 (HF) public void integrate( Configuration configuration, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { - // determine requested validation modes. + final Set modes = ValidationMode.getModes( configuration.getProperties().get( MODE_PROPERTY ) ); - final ClassLoaderService classLoaderService = serviceRegistry.getService( ClassLoaderService.class ); - Dialect dialect = serviceRegistry.getService( JdbcServices.class ).getDialect(); - // try to locate a BV class to see if it is available on the classpath - boolean isBeanValidationAvailable; - try { - classLoaderService.classForName( BV_CHECK_CLASS ); - isBeanValidationAvailable = true; - } - catch ( Exception e ) { - isBeanValidationAvailable = false; - } - - // locate the type safe activator class + final Dialect dialect = serviceRegistry.getService( JdbcServices.class ).getDialect(); + final boolean isBeanValidationAvailable = isBeanValidationOnClasspath( classLoaderService ); final Class typeSafeActivatorClass = loadTypeSafeActivatorClass( serviceRegistry ); - // todo : if this works out, probably better to simply alter TypeSafeActivator into a single method... applyRelationalConstraints( modes, isBeanValidationAvailable, typeSafeActivatorClass, configuration, - dialect + dialect ); applyHibernateListeners( modes, isBeanValidationAvailable, typeSafeActivatorClass, - configuration, sessionFactory, serviceRegistry ); } - /** - * {@inheritDoc} - * - * @see org.hibernate.integrator.spi.Integrator#integrate(org.hibernate.metamodel.spi.source.MetadataImplementor, org.hibernate.engine.spi.SessionFactoryImplementor, org.hibernate.service.spi.SessionFactoryServiceRegistry) - */ @Override - public void integrate( MetadataImplementor metadata, - SessionFactoryImplementor sessionFactory, - SessionFactoryServiceRegistry serviceRegistry ) { -// Properties props = sessionFactory.getProperties(); -// final Set modes = ValidationMode.getModes(props.get(MODE_PROPERTY)); -// final ClassLoaderService classLoaderService = serviceRegistry.getService( ClassLoaderService.class ); -// // try to locate a BV class to see if it is available on the classpath -// boolean isBeanValidationAvailable; -// try { -// classLoaderService.classForName( BV_CHECK_CLASS ); -// isBeanValidationAvailable = true; -// } catch (Exception error) { -// isBeanValidationAvailable = false; -// } -// // locate the type safe activator class -// final Class typeSafeActivatorClass = loadTypeSafeActivatorClass(serviceRegistry); -// // todo : if this works out, probably better to simply alter TypeSafeActivator into a single method... -// applyRelationalConstraints(modes, isBeanValidationAvailable, typeSafeActivatorClass, props, metadata); -// applyHibernateListeners(modes, isBeanValidationAvailable, typeSafeActivatorClass, sessionFactory, serviceRegistry); + public void integrate(MetadataImplementor metadata, + SessionFactoryImplementor sessionFactory, + SessionFactoryServiceRegistry serviceRegistry) { + final Set modes = ValidationMode.getModes( + sessionFactory.getProperties() + .get( MODE_PROPERTY ) + ); + final ClassLoaderService classLoaderService = serviceRegistry.getService( ClassLoaderService.class ); + final boolean isBeanValidationAvailable = isBeanValidationOnClasspath( classLoaderService ); + final Class typeSafeActivatorClass = loadTypeSafeActivatorClass( serviceRegistry ); + + // TODO apply relational constraints. Depends on HHH-7472 (HF) +// applyRelationalConstraints( modes, isBeanValidationAvailable, typeSafeActivatorClass, props, metadata ); + applyHibernateListeners( + modes, + isBeanValidationAvailable, + typeSafeActivatorClass, + sessionFactory, + serviceRegistry + ); + } + + @Override + public void disintegrate(SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { + // nothing to do here afaik + } + + public static void validateFactory(Object object) { + Class activatorClass; + try { + activatorClass = BeanValidationIntegrator.class.getClassLoader().loadClass( ACTIVATOR_CLASS ); + } + catch ( HibernateException e ) { + throw e; + } + catch ( Exception e ) { + throw new HibernateException( "Could not locate TypeSafeActivator class", e ); + } + + try { + final Method validateMethod = getValidateMethod( activatorClass ); + invokeValidateMethod( object, validateMethod ); + } + catch ( HibernateException e ) { + throw e; + } + catch ( Exception e ) { + throw new HibernateException( "Could not locate method needed for ValidatorFactory validation", e ); + } + } + + private static void invokeValidateMethod(Object object, Method validateMethod) { + try { + validateMethod.invoke( null, object ); + } + catch ( InvocationTargetException e ) { + if ( e.getTargetException() instanceof HibernateException ) { + throw ( HibernateException ) e.getTargetException(); + } + throw new HibernateException( "Unable to check validity of passed ValidatorFactory", e ); + } + catch ( IllegalAccessException e ) { + throw new HibernateException( "Unable to check validity of passed ValidatorFactory", e ); + } + } + + private static Method getValidateMethod(Class activatorClass) throws NoSuchMethodException { + final Method validateMethod = activatorClass.getMethod( VALIDATE_METHOD, Object.class ); + if ( !validateMethod.isAccessible() ) { + validateMethod.setAccessible( true ); + } + return validateMethod; + } + + /** + * Try to locate a BV class to see if it is available on the classpath + * + * @param classLoaderService the class loader service + * + * @return {@code true} if the Bean Validation classes are on the classpath, {@code false otherwise} + */ + private boolean isBeanValidationOnClasspath(ClassLoaderService classLoaderService) { + // try to locate a BV class to see if it is available on the classpath + boolean isBeanValidationAvailable; + try { + classLoaderService.classForName( BV_CHECK_CLASS ); + isBeanValidationAvailable = true; + } + catch ( Exception error ) { + isBeanValidationAvailable = false; + } + return isBeanValidationAvailable; } private Class loadTypeSafeActivatorClass(SessionFactoryServiceRegistry serviceRegistry) { try { return serviceRegistry.getService( ClassLoaderService.class ).classForName( ACTIVATOR_CLASS ); } - catch (Exception e) { + catch ( Exception e ) { return null; } } @@ -182,169 +203,153 @@ public class BeanValidationIntegrator implements Integrator { boolean beanValidationAvailable, Class typeSafeActivatorClass, Configuration configuration, - Dialect dialect) { - if ( ! ConfigurationHelper.getBoolean( APPLY_CONSTRAINTS, configuration.getProperties(), true ) ){ + Dialect dialect) { + if ( !ConfigurationHelper.getBoolean( APPLY_CONSTRAINTS, configuration.getProperties(), true ) ) { LOG.debug( "Skipping application of relational constraints from legacy Hibernate Validator" ); return; } - if ( ! ( modes.contains( ValidationMode.DDL ) || modes.contains( ValidationMode.AUTO ) ) ) { + if ( !( modes.contains( ValidationMode.DDL ) || modes.contains( ValidationMode.AUTO ) ) ) { return; } - if ( ! beanValidationAvailable ) { + if ( !beanValidationAvailable ) { if ( modes.contains( ValidationMode.DDL ) ) { throw new HibernateException( "Bean Validation not available in the class path but required in " + MODE_PROPERTY ); } - else if (modes.contains( ValidationMode.AUTO ) ) { + else if ( modes.contains( ValidationMode.AUTO ) ) { //nothing to activate return; } } try { - Method applyDDLMethod = typeSafeActivatorClass.getMethod( DDL_METHOD, Collection.class, Properties.class, Dialect.class ); + Method applyDDLMethod = typeSafeActivatorClass.getMethod( + DDL_METHOD, + Collection.class, + Properties.class, + Dialect.class + ); try { applyDDLMethod.invoke( null, configuration.createMappings().getClasses().values(), configuration.getProperties(), - dialect + dialect ); } - catch (HibernateException e) { + catch ( HibernateException e ) { throw e; } - catch (Exception e) { + catch ( Exception e ) { throw new HibernateException( "Error applying BeanValidation relational constraints", e ); } } - catch (HibernateException e) { + catch ( HibernateException e ) { throw e; } - catch (Exception e) { + catch ( Exception e ) { throw new HibernateException( "Unable to locate TypeSafeActivator#applyDDL method", e ); } } -// private void applyRelationalConstraints( Set modes, -// boolean beanValidationAvailable, -// Class typeSafeActivatorClass, -// Properties properties, -// MetadataImplementor metadata ) { -// if (!ConfigurationHelper.getBoolean(APPLY_CONSTRAINTS, properties, true)){ -// LOG.debug("Skipping application of relational constraints from legacy Hibernate Validator"); -// return; -// } -// if (!(modes.contains(ValidationMode.DDL) || modes.contains(ValidationMode.AUTO))) return; -// if (!beanValidationAvailable) { -// if (modes.contains(ValidationMode.DDL)) -// throw new HibernateException("Bean Validation not available in the class path but required in " + MODE_PROPERTY); -// if(modes.contains(ValidationMode.AUTO)) return; //nothing to activate -// } -// try { -// Method applyDDLMethod = typeSafeActivatorClass.getMethod(DDL_METHOD, Iterable.class, Properties.class, ClassLoaderService.class); -// try { -// applyDDLMethod.invoke(null, metadata.getEntityBindings(), properties, -// metadata.getServiceRegistry().getService(ClassLoaderService.class)); -// } catch (HibernateException error) { -// throw error; -// } catch (Exception error) { -// throw new HibernateException("Error applying BeanValidation relational constraints", error); -// } -// } catch (HibernateException error) { -// throw error; -// } catch (Exception error) { -// throw new HibernateException("Unable to locate TypeSafeActivator#applyDDL method", error); -// } -// } - - private void applyHibernateListeners( - Set modes, - boolean beanValidationAvailable, - Class typeSafeActivatorClass, - Configuration configuration, - SessionFactoryImplementor sessionFactory, - SessionFactoryServiceRegistry serviceRegistry) { - // de-activate not-null tracking at the core level when Bean Validation is present unless the user explicitly - // asks for it - if ( configuration.getProperty( Environment.CHECK_NULLABILITY ) == null ) { - sessionFactory.getSettings().setCheckNullability( false ); - } - - if ( ! ( modes.contains( ValidationMode.CALLBACK ) || modes.contains( ValidationMode.AUTO ) ) ) { + private void applyRelationalConstraints(Set modes, + boolean beanValidationAvailable, + Class typeSafeActivatorClass, + Properties properties, + MetadataImplementor metadata) { + if ( !ConfigurationHelper.getBoolean( APPLY_CONSTRAINTS, properties, true ) ) { + LOG.debug( "Skipping application of relational constraints from legacy Hibernate Validator" ); return; } + if ( !( modes.contains( ValidationMode.DDL ) || modes.contains( ValidationMode.AUTO ) ) ) { + return; + } + if ( !beanValidationAvailable ) { + if ( modes.contains( ValidationMode.DDL ) ) { + throw new HibernateException( "Bean Validation not available in the class path but required in " + MODE_PROPERTY ); + } + if ( modes.contains( ValidationMode.AUTO ) ) { + return; //nothing to activate + } + } + try { + Method applyDDLMethod = typeSafeActivatorClass.getMethod( + DDL_METHOD, + Iterable.class, + Properties.class, + ClassLoaderService.class + ); + try { + applyDDLMethod.invoke( + null, metadata.getEntityBindings(), properties, + metadata.getServiceRegistry().getService( ClassLoaderService.class ) + ); + } + catch ( HibernateException error ) { + throw error; + } + catch ( Exception error ) { + throw new HibernateException( "Error applying BeanValidation relational constraints", error ); + } + } + catch ( HibernateException error ) { + throw error; + } + catch ( Exception error ) { + throw new HibernateException( "Unable to locate TypeSafeActivator#applyDDL method", error ); + } + } - if ( ! beanValidationAvailable ) { + private void applyHibernateListeners(Set modes, + boolean beanValidationAvailable, + Class typeSafeActivatorClass, + SessionFactoryImplementor sessionFactory, + SessionFactoryServiceRegistry serviceRegistry) { + // de-activate not-null tracking at the core level when Bean Validation is present unless the user explicitly + // asks for it + if ( sessionFactory.getProperties().getProperty( Environment.CHECK_NULLABILITY ) == null ) { + sessionFactory.getSettings().setCheckNullability( false ); + } + if ( !( modes.contains( ValidationMode.CALLBACK ) || modes.contains( ValidationMode.AUTO ) ) ) { + return; + } + if ( !beanValidationAvailable ) { if ( modes.contains( ValidationMode.CALLBACK ) ) { throw new HibernateException( "Bean Validation not available in the class path but required in " + MODE_PROPERTY ); } - else if (modes.contains( ValidationMode.AUTO ) ) { - //nothing to activate - return; + if ( modes.contains( ValidationMode.AUTO ) ) { + return; //nothing to activate } } - try { - Method activateMethod = typeSafeActivatorClass.getMethod( ACTIVATE_METHOD, EventListenerRegistry.class, Configuration.class ); + Method activateMethod = typeSafeActivatorClass.getMethod( + ACTIVATE_METHOD, + EventListenerRegistry.class, + Properties.class + ); try { activateMethod.invoke( null, serviceRegistry.getService( EventListenerRegistry.class ), - configuration + sessionFactory.getProperties() ); } - catch (HibernateException e) { + catch ( HibernateException e ) { throw e; } - catch (Exception e) { + catch ( Exception e ) { throw new HibernateException( "Error applying BeanValidation relational constraints", e ); } } - catch (HibernateException e) { + catch ( HibernateException e ) { throw e; } - catch (Exception e) { + catch ( Exception e ) { throw new HibernateException( "Unable to locate TypeSafeActivator#applyDDL method", e ); } } -// private void applyHibernateListeners( Set modes, -// boolean beanValidationAvailable, -// Class typeSafeActivatorClass, -// SessionFactoryImplementor sessionFactory, -// SessionFactoryServiceRegistry serviceRegistry ) { -// // de-activate not-null tracking at the core level when Bean Validation is present unless the user explicitly -// // asks for it -// if (sessionFactory.getProperties().getProperty(Environment.CHECK_NULLABILITY) == null) -// sessionFactory.getSettings().setCheckNullability( false ); -// if (!(modes.contains( ValidationMode.CALLBACK) || modes.contains(ValidationMode.AUTO))) return; -// if (!beanValidationAvailable) { -// if (modes.contains(ValidationMode.CALLBACK)) -// throw new HibernateException("Bean Validation not available in the class path but required in " + MODE_PROPERTY); -// if (modes.contains(ValidationMode.AUTO)) return; //nothing to activate -// } -// try { -// Method activateMethod = typeSafeActivatorClass.getMethod(ACTIVATE_METHOD, EventListenerRegistry.class); -// try { -// activateMethod.invoke(null, serviceRegistry.getService(EventListenerRegistry.class)); -// } -// catch (HibernateException e) { -// throw e; -// } -// catch (Exception e) { -// throw new HibernateException( "Error applying BeanValidation relational constraints", e ); -// } -// } -// catch (HibernateException e) { -// throw e; -// } -// catch (Exception e) { -// throw new HibernateException( "Unable to locate TypeSafeActivator#applyDDL method", e ); -// } -// } - // Because the javax validation classes might not be on the runtime classpath private static enum ValidationMode { AUTO, @@ -353,19 +358,19 @@ public class BeanValidationIntegrator implements Integrator { DDL; public static Set getModes(Object modeProperty) { - Set modes = new HashSet(3); - if (modeProperty == null) { - modes.add(ValidationMode.AUTO); + Set modes = new HashSet( 3 ); + if ( modeProperty == null ) { + modes.add( ValidationMode.AUTO ); } else { final String[] modesInString = modeProperty.toString().split( "," ); for ( String modeInString : modesInString ) { - modes.add( getMode(modeInString) ); + modes.add( getMode( modeInString ) ); } } if ( modes.size() > 1 && ( modes.contains( ValidationMode.AUTO ) || modes.contains( ValidationMode.NONE ) ) ) { StringBuilder message = new StringBuilder( "Incompatible validation modes mixed: " ); - for (ValidationMode mode : modes) { + for ( ValidationMode mode : modes ) { message.append( mode ).append( ", " ); } throw new HibernateException( message.substring( 0, message.length() - 2 ) ); @@ -374,7 +379,7 @@ public class BeanValidationIntegrator implements Integrator { } private static ValidationMode getMode(String modeProperty) { - if (modeProperty == null || modeProperty.length() == 0) { + if ( modeProperty == null || modeProperty.length() == 0 ) { return AUTO; } else { @@ -387,9 +392,4 @@ public class BeanValidationIntegrator implements Integrator { } } } - - @Override - public void disintegrate(SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { - // nothing to do here afaik - } } diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/beanvalidation/TypeSafeActivator.java b/hibernate-core/src/main/java/org/hibernate/cfg/beanvalidation/TypeSafeActivator.java index d4bba1cec4..b2bc5a143c 100644 --- a/hibernate-core/src/main/java/org/hibernate/cfg/beanvalidation/TypeSafeActivator.java +++ b/hibernate-core/src/main/java/org/hibernate/cfg/beanvalidation/TypeSafeActivator.java @@ -48,7 +48,6 @@ import org.jboss.logging.Logger; import org.hibernate.AssertionFailure; import org.hibernate.HibernateException; import org.hibernate.MappingException; -import org.hibernate.cfg.Configuration; import org.hibernate.dialect.Dialect; import org.hibernate.event.service.spi.EventListenerRegistry; import org.hibernate.event.spi.EventType; @@ -82,8 +81,7 @@ class TypeSafeActivator { } @SuppressWarnings( {"UnusedDeclaration"}) - public static void activateBeanValidation(EventListenerRegistry listenerRegistry, Configuration configuration) { - final Properties properties = configuration.getProperties(); + public static void activateBeanValidation(EventListenerRegistry listenerRegistry, Properties properties) { ValidatorFactory factory = getValidatorFactory( properties ); BeanValidationEventListener listener = new BeanValidationEventListener( factory, properties @@ -95,25 +93,9 @@ class TypeSafeActivator { listenerRegistry.appendListeners( EventType.PRE_UPDATE, listener ); listenerRegistry.appendListeners( EventType.PRE_DELETE, listener ); - listener.initialize( configuration ); + listener.initialize( properties ); } -// public static void activateBeanValidation( EventListenerRegistry listenerRegistry ) { -// final Properties properties = configuration.getProperties(); -// ValidatorFactory factory = getValidatorFactory( properties ); -// BeanValidationEventListener listener = new BeanValidationEventListener( -// factory, properties -// ); -// -// listenerRegistry.addDuplicationStrategy( DuplicationStrategyImpl.INSTANCE ); -// -// listenerRegistry.appendListeners( EventType.PRE_INSERT, listener ); -// listenerRegistry.appendListeners( EventType.PRE_UPDATE, listener ); -// listenerRegistry.appendListeners( EventType.PRE_DELETE, listener ); -// -// listener.initialize( configuration ); -// } - @SuppressWarnings( {"UnusedDeclaration"}) public static void applyDDL(Collection persistentClasses, Properties properties, Dialect dialect) { ValidatorFactory factory = getValidatorFactory( properties );