View Javadoc

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    private Class<Dialect> dialectClass;
30  
31    public ValidationConfiguration(final String dialectClass)
32    {
33      try {
34          this.dialectClass = (Class<Dialect>) Class.forName(dialectClass);
35      } catch (ClassNotFoundException e) {
36          throw new RuntimeException(e);
37      }
38    }
39  
40    @Override
41    protected void secondPassCompile() throws MappingException
42    {
43      super.secondPassCompile();
44  
45      try
46      {
47        TypeSafeActivatorAccessor.applyRelationalConstraints(
48            Validation.buildDefaultValidatorFactory(),
49            classes.values(),
50            getProperties(),
51            dialectClass.newInstance()
52            );
53      }
54      catch (Exception e)
55      {
56        throw new RuntimeException(e);
57      }
58    }
59  }