Settings in a hibernate.cfg.xml are read
[hibernate4-maven-plugin] / src / main / java / de / juplo / plugins / hibernate4 / ValidationConfiguration.java
1 package de.juplo.plugins.hibernate4;
2
3 import javax.validation.Validation;
4
5 import org.hibernate.cfg.Configuration;
6 import org.hibernate.cfg.beanvalidation.TypeSafeActivatorAccessor;
7 import org.hibernate.dialect.Dialect;
8 import org.hibernate.metamodel.source.MappingException;
9
10
11 /**
12  * This integration is usually performed by BeanValidationIntegrator.
13  * Unfortunately, that integration will only be activated upon
14  * initialization of the ServiceRegistry, which initializes
15  * DatasourceConnectionProviderImpl, which looks up the datasource,
16  * which requires a JNDI context ...
17  * We therefore reimplement the relevant parts of BeanValidatorIntegrator.
18  * Since that must occur after secondPassCompile(), which is invoked by
19  * Configuration.generateSchemaCreationScript, which is invoked by
20  * SchemaExport, some fancy subclassing is needed to invoke the integration
21  * at the right time.
22  * @author Mark Robinson <mark@mrobinson.ca>
23  * @author Frank Schimmel <frank.schimmel@cm4all.com>
24  */
25 public class ValidationConfiguration extends Configuration
26 {
27   private static final long serialVersionUID = 1L;
28
29
30   @Override
31   protected void secondPassCompile() throws MappingException
32   {
33     super.secondPassCompile();
34
35     try
36     {
37       TypeSafeActivatorAccessor.applyRelationalConstraints(
38           Validation.buildDefaultValidatorFactory(),
39           classes.values(),
40           getProperties(),
41           ((Class<Dialect>)Class.forName(getProperty(Hbm2DdlMojo.DIALECT))).newInstance()
42           );
43     }
44     catch (Exception e)
45     {
46       throw new RuntimeException(e);
47     }
48   }
49
50   public String getTypeDefs()
51   {
52     return typeDefs.entrySet().toString();
53   }
54 }