X-Git-Url: https://juplo.de/gitweb/?p=hibernate4-maven-plugin;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fplugins%2Fhibernate4%2FValidationConfiguration.java;fp=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fplugins%2Fhibernate4%2FValidationConfiguration.java;h=a1592f73918b396ee87e37ff8b06a5168c25d03a;hp=0000000000000000000000000000000000000000;hb=5fba40e135677130cbe0ff3c59f6055228293d92;hpb=aedcc19cfb89a8b387399a978afab1166be816e3 diff --git a/src/main/java/de/juplo/plugins/hibernate4/ValidationConfiguration.java b/src/main/java/de/juplo/plugins/hibernate4/ValidationConfiguration.java new file mode 100644 index 00000000..a1592f73 --- /dev/null +++ b/src/main/java/de/juplo/plugins/hibernate4/ValidationConfiguration.java @@ -0,0 +1,65 @@ +package de.juplo.plugins.hibernate4; + +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.Properties; +import org.hibernate.cfg.Configuration; +import org.hibernate.dialect.Dialect; +import org.hibernate.metamodel.source.MappingException; + + +/** + * This integration is usually performed by BeanValidationIntegrator. + * Unfortunately, that integration will only be activated upon + * initialization of the ServiceRegistry, which initializes + * DatasourceConnectionProviderImpl, which looks up the datasource, + * which requires a JNDI context ... + * We therefore reimplement the relevant parts of BeanValidatorIntegrator. + * Since that must occur after secondPassCompile(), which is invoked by + * Configuration.generateSchemaCreationScript, which is invoked by + * SchemaExport, some fancy subclassing is needed to invoke the integration + * at the right time. + * @author Mark Robinson + */ +public class ValidationConfiguration extends Configuration +{ + Class dialectClass; + + public ValidationConfiguration(String dialectClass) + throws + ClassNotFoundException + { + this.dialectClass = Class.forName(dialectClass); + } + + @Override + protected void secondPassCompile() throws MappingException + { + super.secondPassCompile(); + + try + { + /** Thank you, hibernate folks, for making this useful class package private ... */ + Method applyDDL = + Class + .forName("org.hibernate.cfg.beanvalidation.TypeSafeActivator") + .getMethod( + "applyRelationalConstraints", + Collection.class, + Properties.class, + Dialect.class + ); + applyDDL.setAccessible(true); + applyDDL.invoke( + null, + classes.values(), + getProperties(), + dialectClass.newInstance() + ); + } + catch (Exception e) + { + throw new RuntimeException(e); + } + } +}