<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>grails/src/java/grails/util/ClosureToMapPopulator.java</filename>
    </added>
    <added>
      <filename>grails/src/test/grails/util/ClosureToMapPopulatorTests.groovy</filename>
    </added>
    <added>
      <filename>grails/src/test/org/codehaus/groovy/grails/orm/hibernate/MappingDefaultsTests.groovy</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -13,7 +13,7 @@
       &lt;excludeFolder url=&quot;file://$MODULE_DIR$/target/surefire-reports&quot; /&gt;
       &lt;excludeFolder url=&quot;file://$MODULE_DIR$/target/test-classes&quot; /&gt;
     &lt;/content&gt;
-    &lt;orderEntry type=&quot;inheritedJdk&quot; /&gt;
+    &lt;orderEntry type=&quot;jdk&quot; jdkName=&quot;1.6&quot; jdkType=&quot;JavaSDK&quot; /&gt;
     &lt;orderEntry type=&quot;sourceFolder&quot; forTests=&quot;false&quot; /&gt;
     &lt;orderEntry type=&quot;library&quot; exported=&quot;&quot; name=&quot;Maven: org.apache.maven:maven-model:2.0.7&quot; level=&quot;project&quot; /&gt;
     &lt;orderEntry type=&quot;library&quot; exported=&quot;&quot; name=&quot;Maven: org.apache.maven:maven-project:2.0.7&quot; level=&quot;project&quot; /&gt;</diff>
      <filename>grails-maven-plugin/grails-maven-plugin.iml</filename>
    </modified>
    <modified>
      <diff>@@ -132,6 +132,15 @@
         &lt;/SOURCES&gt;
       &lt;/library&gt;
     &lt;/orderEntry&gt;
+    &lt;orderEntry type=&quot;module-library&quot;&gt;
+      &lt;library name=&quot;HSQLDB&quot;&gt;
+        &lt;CLASSES&gt;
+          &lt;root url=&quot;jar://$MODULE_DIR$/lib/hsqldb-1.8.0.10.jar!/&quot; /&gt;
+        &lt;/CLASSES&gt;
+        &lt;JAVADOC /&gt;
+        &lt;SOURCES /&gt;
+      &lt;/library&gt;
+    &lt;/orderEntry&gt;
     &lt;javadoc-paths&gt;
       &lt;root url=&quot;file://$MODULE_DIR$/../spring-framework-2.0/docs/api&quot; /&gt;
       &lt;root url=&quot;file://$MODULE_DIR$/../hibernate-3.2/doc/api&quot; /&gt;</diff>
      <filename>grails/Grails.iml</filename>
    </modified>
    <modified>
      <diff>@@ -554,26 +554,30 @@
       &lt;/CLASSES&gt;
       &lt;JAVADOC /&gt;
       &lt;SOURCES&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.oxm-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.test-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.asm-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.web-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.web.portlet-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.expression-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.core-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.web.servlet-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.jdbc-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.aspects-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.jms-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.instrument-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.transaction-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.context.support-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.beans-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.orm-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.instrument.classloading-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.context-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.aop-sources-3.0.0.M4.jar!/&quot; /&gt;
-        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../spring-framework-3.0.0.M4/src/org.springframework.integration-tests-sources-3.0.0.M4.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-webflow-2.0.8.RELEASE/src/org.springframework.faces-sources-2.0.8.RELEASE.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-webflow-2.0.8.RELEASE/src/org.springframework.webflow-sources-2.0.8.RELEASE.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-webflow-2.0.8.RELEASE/src/org.springframework.js-sources-2.0.8.RELEASE.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-webflow-2.0.8.RELEASE/src/org.springframework.binding-sources-2.0.8.RELEASE.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.web-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.instrument.tomcat-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.expression-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.web.servlet-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.oxm-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.aspects-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.web.portlet-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.test-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.instrument-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.integration-tests-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.asm-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.core-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.beans-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.jdbc-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.transaction-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.context-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.jms-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.orm-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.context.support-sources-3.0.0.RC1.jar!/&quot; /&gt;
+        &lt;root url=&quot;jar://$PROJECT_DIR$/../../../../springsource/spring-framework-3.0.0.RC1/src/org.springframework.aop-sources-3.0.0.RC1.jar!/&quot; /&gt;
       &lt;/SOURCES&gt;
     &lt;/library&gt;
     &lt;library name=&quot;javax.servlet&quot;&gt;</diff>
      <filename>grails/grails.ipr</filename>
    </modified>
    <modified>
      <diff>@@ -9,13 +9,6 @@ import groovy.lang.GString;
 import groovy.lang.GroovyClassLoader;
 import groovy.lang.GroovyObjectSupport;
 import groovy.util.ConfigObject;
-
-import java.io.IOException;
-import java.lang.reflect.Modifier;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -30,6 +23,7 @@ import org.codehaus.groovy.grails.compiler.injection.GrailsAwareClassLoader;
 import org.codehaus.groovy.grails.compiler.support.GrailsResourceLoader;
 import org.codehaus.groovy.grails.documentation.DocumentationContext;
 import org.codehaus.groovy.grails.exceptions.GrailsConfigurationException;
+import org.codehaus.groovy.grails.plugins.support.aware.GrailsApplicationAwareBeanPostProcessor;
 import org.codehaus.groovy.runtime.DefaultGroovyMethods;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.BeanClassLoaderAware;
@@ -37,6 +31,12 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.core.io.Resource;
 import org.springframework.util.Assert;
 
+import java.io.IOException;
+import java.lang.reflect.Modifier;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 /**
  * Default implementation of the GrailsApplication interface that manages application loading,
  * state, and artefact instances.
@@ -653,6 +653,7 @@ public class DefaultGrailsApplication extends GroovyObjectSupport implements Gra
      * @param handler The ArtefactHandler to regster
      */
     public void registerArtefactHandler(ArtefactHandler handler) {
+        GrailsApplicationAwareBeanPostProcessor.processAwareInterfaces(this, handler);        
         artefactHandlersByName.put(handler.getType(), handler);
     }
 </diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/commons/DefaultGrailsApplication.java</filename>
    </modified>
    <modified>
      <diff>@@ -15,17 +15,8 @@
 package org.codehaus.groovy.grails.commons;
 
 
-import static java.util.Collections.EMPTY_LIST;
-import static java.util.Collections.EMPTY_MAP;
-import static java.util.Collections.unmodifiableMap;
 import grails.util.GrailsNameUtils;
 import groovy.lang.GroovyObject;
-
-import java.beans.IntrospectionException;
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Modifier;
-import java.util.*;
-
 import org.apache.commons.lang.ClassUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
@@ -35,6 +26,12 @@ import org.codehaus.groovy.grails.exceptions.InvalidPropertyException;
 import org.springframework.beans.BeanUtils;
 import org.springframework.validation.Validator;
 
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Modifier;
+import java.util.*;
+import static java.util.Collections.*;
+
 /**
  * @author Graeme Rocher
  * @since 05-Jul-2005
@@ -61,7 +58,7 @@ public class DefaultGrailsDomainClass extends AbstractGrailsClass  implements Gr
     private Set subClasses = new HashSet();
     private Collection embedded;
 
-    public DefaultGrailsDomainClass(Class clazz) {
+    public DefaultGrailsDomainClass(Class clazz, Map&lt;String, Object&gt; defaultConstraints) {
         super(clazz, &quot;&quot;);
         PropertyDescriptor[] propertyDescriptors = getPropertyDescriptors();
 
@@ -109,12 +106,18 @@ public class DefaultGrailsDomainClass extends AbstractGrailsClass  implements Gr
         establishPersistentProperties();
         // process the constraints
         try {
-            this.constraints = GrailsDomainConfigurationUtil.evaluateConstraints(getReferenceInstance(), this.persistentProperties);
+            if(defaultConstraints != null) {
+                this.constraints = GrailsDomainConfigurationUtil.evaluateConstraints(getReferenceInstance(), this.persistentProperties, defaultConstraints);
+            }
+            else {
+                this.constraints = GrailsDomainConfigurationUtil.evaluateConstraints(getReferenceInstance(), this.persistentProperties);
+            }
         } catch (IntrospectionException e) {
             LOG.error(&quot;Error reading class [&quot;+getClazz()+&quot;] constraints: &quot; +e .getMessage(), e);
         }
-
-
+    }
+    public DefaultGrailsDomainClass(Class clazz) {
+        this(clazz, null);
     }
 
 </diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/commons/DefaultGrailsDomainClass.java</filename>
    </modified>
    <modified>
      <diff>@@ -15,16 +15,27 @@
 */
 package org.codehaus.groovy.grails.commons;
 
+import grails.persistence.Entity;
+import grails.util.ClosureToMapPopulator;
 import groovy.lang.Closure;
 import groovy.lang.GroovyObject;
-import grails.persistence.Entity;
+import groovy.util.Eval;
+import org.codehaus.groovy.grails.plugins.support.aware.GrailsApplicationAware;
+
+import java.util.Map;
 
 /**
+ * Evaluates the conventions that define a domain class in Grails
+ *
+ * @author Graeme Rocher
  * @author Marc Palmer (marc@anyware.co.uk)
  */
-public class DomainClassArtefactHandler extends ArtefactHandlerAdapter {
+public class DomainClassArtefactHandler extends ArtefactHandlerAdapter implements GrailsApplicationAware {
 
     public static final String TYPE = &quot;Domain&quot;;
+    private GrailsApplication grailsApplication;
+    private Map defaultConstraints;
+
 
     public DomainClassArtefactHandler() {
         super(TYPE, GrailsDomainClass.class, DefaultGrailsDomainClass.class, null);
@@ -32,6 +43,9 @@ public class DomainClassArtefactHandler extends ArtefactHandlerAdapter {
 
 
     public GrailsClass newArtefactClass(Class artefactClass) {
+        if(grailsApplication!=null) {
+            return new DefaultGrailsDomainClass(artefactClass,defaultConstraints);
+        }
         return new DefaultGrailsDomainClass(artefactClass);
     }
 
@@ -81,4 +95,15 @@ public class DomainClassArtefactHandler extends ArtefactHandlerAdapter {
         }
         return result;
     }
+
+    public void setGrailsApplication(GrailsApplication grailsApplication) {
+        this.grailsApplication = grailsApplication;
+        Object constraints = Eval.x(grailsApplication, &quot;x?.config?.grails?.gorm?.default?.constraints&quot;);
+        if(constraints instanceof Closure) {
+            ClosureToMapPopulator populator = new ClosureToMapPopulator();
+            this.defaultConstraints = populator.populate((Closure)constraints);
+        }
+    }
+
+    
 }</diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/commons/DomainClassArtefactHandler.java</filename>
    </modified>
    <modified>
      <diff>@@ -14,17 +14,20 @@
  */
 package org.codehaus.groovy.grails.commons;
 
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
+import groovy.lang.*;
 import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.commons.metaclass.DynamicMethods;
-import org.codehaus.groovy.grails.commons.metaclass.GroovyDynamicMethodsInterceptor;
-import org.codehaus.groovy.grails.exceptions.GrailsConfigurationException;
-import org.codehaus.groovy.grails.validation.metaclass.ConstraintsEvaluatingDynamicProperty;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codehaus.groovy.control.CompilationFailedException;
+import org.codehaus.groovy.grails.validation.ConstrainedProperty;
+import org.codehaus.groovy.grails.validation.ConstrainedPropertyBuilder;
 
 import java.beans.IntrospectionException;
 import java.beans.PropertyDescriptor;
+import java.io.InputStream;
 import java.io.Serializable;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.net.URI;
@@ -34,8 +37,6 @@ import java.sql.Clob;
 import java.sql.Time;
 import java.sql.Timestamp;
 import java.util.*;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
 
 /**
  * Utility methods used in configuring the Grails Hibernate integration
@@ -46,6 +47,11 @@ import java.lang.reflect.InvocationTargetException;
 public class GrailsDomainConfigurationUtil {
 
 
+
+    public static final String PROPERTY_NAME = &quot;constraints&quot;;
+    private static final String CONSTRAINTS_GROOVY = &quot;Constraints.groovy&quot;;
+
+    private static Log LOG = LogFactory.getLog(GrailsDomainConfigurationUtil.class);
     private static final Class[] EMPTY_CLASS_ARRAY = new Class[0];
 
     public static Serializable getAssociationIdentifier(Object target, String propertyName, GrailsDomainClass referencedDomainClass) {
@@ -221,10 +227,10 @@ public class GrailsDomainConfigurationUtil {
         return isBasicType(propType);
     }
 
-    private static final Set BASIC_TYPES;
+    private static final Set&lt;String&gt; BASIC_TYPES;
 
     static {
-        Set basics = new HashSet();
+        Set&lt;String&gt; basics = new HashSet&lt;String&gt;();
         basics.add(boolean.class.getName());
         basics.add(long.class.getName());
         basics.add(short.class.getName());
@@ -284,16 +290,71 @@ public class GrailsDomainConfigurationUtil {
      * @return True if it is configurational
      */
     public static boolean isNotConfigurational(PropertyDescriptor descriptor) {
-        return !descriptor.getName().equals(GrailsDomainClassProperty.META_CLASS) &amp;&amp;
-                !descriptor.getName().equals(GrailsDomainClassProperty.CLASS) &amp;&amp;
-                !descriptor.getName().equals(GrailsDomainClassProperty.TRANSIENT) &amp;&amp;
-                !descriptor.getName().equals(GrailsDomainClassProperty.RELATES_TO_MANY) &amp;&amp;
-                !descriptor.getName().equals(GrailsDomainClassProperty.HAS_MANY) &amp;&amp;
-                !descriptor.getName().equals(GrailsDomainClassProperty.EVANESCENT) &amp;&amp;
-                !descriptor.getName().equals(GrailsDomainClassProperty.CONSTRAINTS) &amp;&amp;
-                !descriptor.getName().equals(GrailsDomainClassProperty.MAPPING_STRATEGY) &amp;&amp;
-                !descriptor.getName().equals(GrailsDomainClassProperty.MAPPED_BY) &amp;&amp;
-                !descriptor.getName().equals(GrailsDomainClassProperty.BELONGS_TO);
+        final String name = descriptor.getName();
+        return !name.equals(GrailsDomainClassProperty.META_CLASS) &amp;&amp;
+                !name.equals(GrailsDomainClassProperty.CLASS) &amp;&amp;
+                !name.equals(GrailsDomainClassProperty.TRANSIENT) &amp;&amp;
+                !name.equals(GrailsDomainClassProperty.RELATES_TO_MANY) &amp;&amp;
+                !name.equals(GrailsDomainClassProperty.HAS_MANY) &amp;&amp;
+                !name.equals(GrailsDomainClassProperty.EVANESCENT) &amp;&amp;
+                !name.equals(GrailsDomainClassProperty.CONSTRAINTS) &amp;&amp;
+                !name.equals(GrailsDomainClassProperty.MAPPING_STRATEGY) &amp;&amp;
+                !name.equals(GrailsDomainClassProperty.MAPPED_BY) &amp;&amp;
+                !name.equals(GrailsDomainClassProperty.BELONGS_TO);
+    }
+
+    /**
+     * Evaluates the constraints closure to build the list of constraints
+     *
+     * @param instance   The instance to evaluate constraints for
+     * @param properties The properties of the instance
+     * @param defaultConstraints A map that defines the default constraints
+     * 
+     * @return A Map of constraints
+     * @throws java.beans.IntrospectionException
+     *          When the bean cannot be introspected
+     */
+    public static Map evaluateConstraints(Object instance, GrailsDomainClassProperty[] properties, Map&lt;String, Object&gt; defaultConstraints) {
+        LinkedList classChain = getSuperClassChain(instance);
+        Class clazz;
+
+        ConstrainedPropertyBuilder delegate = new ConstrainedPropertyBuilder(instance);
+
+        // Evaluate all the constraints closures in the inheritance chain
+        for (Object aClassChain : classChain) {
+            clazz = (Class) aClassChain;
+            Closure c = (Closure) GrailsClassUtils.getStaticPropertyValue(clazz, PROPERTY_NAME);
+            if (c == null) {
+                c = getConstraintsFromScript(instance);
+            }
+
+            if (c != null) {
+                c.setDelegate(delegate);
+                c.call();
+            }
+            else {
+                LOG.debug(&quot;User-defined constraints not found on class [&quot; + clazz + &quot;], applying default constraints&quot;);
+            }
+        }
+
+
+        Map&lt;String, ConstrainedProperty&gt; constrainedProperties = delegate.getConstrainedProperties();
+        if(properties != null) {
+            for (GrailsDomainClassProperty p : properties) {
+                final String propertyName = p.getName();
+                ConstrainedProperty cp = constrainedProperties.get(propertyName);
+                if (cp == null) {
+                    cp = new ConstrainedProperty(p.getDomainClass().getClazz(), propertyName, p.getType());
+                    cp.setOrder(constrainedProperties.size() + 1);
+                    constrainedProperties.put(propertyName, cp);
+                }
+                // Make sure all fields are required by default, unless specified otherwise by the constraints
+                applyDefaultConstraints(propertyName, p, cp, defaultConstraints);
+            }
+        }
+
+        return constrainedProperties;
+
     }
 
     /**
@@ -306,20 +367,88 @@ public class GrailsDomainConfigurationUtil {
      *          When the bean cannot be introspected
      */
     public static Map evaluateConstraints(Object instance, GrailsDomainClassProperty[] properties) throws IntrospectionException {
-        Closure constraintsClosure = (Closure) GrailsClassUtils.getPropertyOrStaticPropertyOrFieldValue(instance, GrailsDomainClassProperty.CONSTRAINTS);
-        Class objClass = instance.getClass();
-        String fullName = objClass.getName();
-        if (constraintsClosure != null &amp;&amp; !GrailsClassUtils.isStaticProperty(objClass, GrailsDomainClassProperty.CONSTRAINTS)) {
-            throw new GrailsConfigurationException(
-                    &quot;Domain class [&quot; + fullName + &quot;] has non-static constraints. Constraints must be &quot; +
-                            &quot;declared static.&quot;);
+        return evaluateConstraints(instance, properties,null);
+    }
+
+    private static void applyDefaultConstraints(String propertyName, GrailsDomainClassProperty p, ConstrainedProperty cp, Map&lt;String, Object&gt; defaultConstraints) {
+        if(defaultConstraints != null &amp;&amp; !defaultConstraints.isEmpty()) {
+
+            for(Map.Entry&lt;String, Object&gt; entry : defaultConstraints.entrySet()) {
+                String constraintName = entry.getKey();
+                Object constrainingValue = entry.getValue();
+                if(!cp.hasAppliedConstraint(constraintName) &amp;&amp; cp.supportsContraint(constraintName)) {
+                    if(ConstrainedProperty.NULLABLE_CONSTRAINT.equals(constraintName)) {
+                        if(isConstrainableProperty(p,propertyName))
+                           cp.applyConstraint(constraintName, constrainingValue);
+                    }
+                    else {
+                        cp.applyConstraint(constraintName,constrainingValue);
+                    }
+                }
+
+            }
+
+        }
+        if (!cp.hasAppliedConstraint(ConstrainedProperty.NULLABLE_CONSTRAINT)
+                &amp;&amp; isConstrainableProperty(p, propertyName)) {
+            cp.applyConstraint(ConstrainedProperty.NULLABLE_CONSTRAINT, p.isOptional() ||
+                    Collection.class.isAssignableFrom(p.getType()) ||
+                    Map.class.isAssignableFrom(p.getType())
+            );
         }
+    }
 
+    private static boolean isConstrainableProperty(GrailsDomainClassProperty p, String propertyName) {
+        return !propertyName.equals(GrailsDomainClassProperty.DATE_CREATED)
+                &amp;&amp; !propertyName.equals(GrailsDomainClassProperty.LAST_UPDATED)
+                &amp;&amp; !((p.isOneToOne() || p.isManyToOne()) &amp;&amp; p.isCircular());
+    }
 
-        GroovyObject go = (GroovyObject) instance;
-        DynamicMethods interceptor = new GroovyDynamicMethodsInterceptor(go);
-        interceptor.addDynamicProperty(new ConstraintsEvaluatingDynamicProperty(properties));
+    private static LinkedList getSuperClassChain(Object instance) {
+        LinkedList&lt;Class&gt; classChain = new LinkedList&lt;Class&gt;();
+        Class clazz = instance.getClass();
+        while (clazz != Object.class)
+        {
+            classChain.addFirst( clazz);
+            clazz = clazz.getSuperclass();
+        }
+        return classChain;
+    }
 
-        return (Map) go.getProperty(GrailsDomainClassProperty.CONSTRAINTS);
+    private static Closure getConstraintsFromScript(Object object) {
+        // Fallback to xxxxConstraints.groovy script for Java domain classes
+        String className = object.getClass().getName();
+        String constraintsScript = className.replaceAll(&quot;\\.&quot;,&quot;/&quot;) + CONSTRAINTS_GROOVY;
+        InputStream stream = GrailsDomainConfigurationUtil.class.getClassLoader().getResourceAsStream(constraintsScript);
+
+        if(stream!=null) {
+            GroovyClassLoader gcl = new GroovyClassLoader();
+            try {
+                Class scriptClass = gcl.parseClass(stream);
+                Script script = (Script)scriptClass.newInstance();
+                script.run();
+                Binding binding = script.getBinding();
+                if(binding.getVariables().containsKey(PROPERTY_NAME)) {
+                    return (Closure)binding.getVariable(PROPERTY_NAME);
+                } else {
+                    LOG.warn(&quot;Unable to evaluate constraints from [&quot;+constraintsScript+&quot;], constraints closure not found!&quot;);
+                    return null;
+                }
+            }
+            catch (CompilationFailedException e) {
+                LOG.error(&quot;Compilation error evaluating constraints for class [&quot;+object.getClass()+&quot;]: &quot; + e.getMessage(),e );
+                return null;
+            } catch (InstantiationException e) {
+                LOG.error(&quot;Instantiation error evaluating constraints for class [&quot;+object.getClass()+&quot;]: &quot; + e.getMessage(),e );
+                return null;
+            } catch (IllegalAccessException e) {
+                LOG.error(&quot;Illegal access error evaluating constraints for class [&quot;+object.getClass()+&quot;]: &quot; + e.getMessage(),e );
+                return null;
+            }
+        }
+        else {
+            return null;
+        }
     }
+
 }</diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/commons/GrailsDomainConfigurationUtil.java</filename>
    </modified>
    <modified>
      <diff>@@ -14,6 +14,8 @@
  */ 
 package org.codehaus.groovy.grails.orm.hibernate.cfg;
 
+import groovy.lang.Closure;
+import groovy.util.Eval;
 import org.codehaus.groovy.grails.commons.DomainClassArtefactHandler;
 import org.codehaus.groovy.grails.commons.GrailsApplication;
 import org.codehaus.groovy.grails.commons.GrailsClass;
@@ -84,14 +86,8 @@ public class DefaultGrailsDomainConfiguration extends Configuration implements G
         // set the class loader to load Groovy classes
         if(this.grailsApplication != null)
             Thread.currentThread().setContextClassLoader( this.grailsApplication.getClassLoader() );
-        // do Grails class configuration
-        for (GrailsDomainClass domainClass : this.domainClasses) {
-            GrailsDomainBinder.evaluateMapping(domainClass);
-        }
 
-        for (GrailsDomainClass domainClass : this.domainClasses) {
-            GrailsDomainBinder.evaluateNamedQueries(domainClass);
-        }
+        configureDomainBinder(this.grailsApplication,this.domainClasses);
 
         for (GrailsDomainClass domainClass : this.domainClasses) {
             final Mappings mappings = super.createMappings();
@@ -104,4 +100,21 @@ public class DefaultGrailsDomainConfiguration extends Configuration implements G
         super.secondPassCompile();
         this.configLocked = true;
     }
+
+    public static void configureDomainBinder(GrailsApplication grailsApplication, Set&lt;GrailsDomainClass&gt; domainClasses) {
+        Object defaultMapping = Eval.x(grailsApplication, &quot;x.config?.grails?.gorm?.default?.mapping&quot;);
+        // do Grails class configuration
+        for (GrailsDomainClass domainClass : domainClasses) {
+            if(defaultMapping instanceof Closure) {
+                GrailsDomainBinder.evaluateMapping(domainClass, (Closure)defaultMapping);                
+            }
+            else {
+                GrailsDomainBinder.evaluateMapping(domainClass);
+            }
+        }
+
+        for (GrailsDomainClass domainClass : domainClasses) {
+            GrailsDomainBinder.evaluateNamedQueries(domainClass);
+        }
+    }
 }</diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/orm/hibernate/cfg/DefaultGrailsDomainConfiguration.java</filename>
    </modified>
    <modified>
      <diff>@@ -106,13 +106,7 @@ public class GrailsAnnotationConfiguration  extends AnnotationConfiguration impl
             }
 
             // do Grails class configuration
-            for (GrailsDomainClass domainClass : this.domainClasses) {
-                GrailsDomainBinder.evaluateMapping(domainClass);
-            }
-            
-            for (GrailsDomainClass domainClass : this.domainClasses) {
-                GrailsDomainBinder.evaluateNamedQueries(domainClass);
-            }
+            DefaultGrailsDomainConfiguration.configureDomainBinder(grailsApplication,domainClasses);
 
             // do Grails class configuration
             for (GrailsDomainClass domainClass : this.domainClasses) {</diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsAnnotationConfiguration.java</filename>
    </modified>
    <modified>
      <diff>@@ -84,6 +84,7 @@ public final class GrailsDomainBinder {
     private static final String DEFAULT_ENUM_TYPE = &quot;default&quot;;
 
 
+
     /**
      * A Collection type, for the moment only Set is supported
      *
@@ -1035,12 +1036,23 @@ public final class GrailsDomainBinder {
      * @param domainClass The domain class
      */
     public static Mapping evaluateMapping(GrailsDomainClass domainClass) {
+        return evaluateMapping(domainClass,null);
+    }
 
-        try {
+    public static Mapping evaluateMapping(GrailsDomainClass domainClass, Closure defaultMapping) {
+       try {
             Object o = GrailsClassUtils.getStaticPropertyValue(domainClass.getClazz(), GrailsDomainClassProperty.MAPPING);
-            if (o instanceof Closure) {
+            if (o != null || defaultMapping != null) {
                 HibernateMappingBuilder builder = new HibernateMappingBuilder(domainClass.getFullName());
-                Mapping m = builder.evaluate((Closure) o);
+                Mapping m = null;
+                if(defaultMapping != null) {
+                    m = builder.evaluate(defaultMapping);
+                }
+
+                if(o instanceof Closure) {
+                    m = builder.evaluate((Closure) o);
+                }
+
                 MAPPING_CACHE.put(domainClass.getClazz(), m);
                 return m;
             }
@@ -1052,6 +1064,7 @@ public final class GrailsDomainBinder {
         return null;
     }
 
+
     /**
      * Evaluates a Mapping object from the domain class if it has a namedQueries closure
      *</diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainBinder.java</filename>
    </modified>
    <modified>
      <diff>@@ -55,13 +55,15 @@ class HibernateMappingBuilder {
      * @param mappingClosure The closure that defines the ORM DSL 
      */
     Mapping evaluate(Closure mappingClosure) {
-        mapping = new Mapping()
+        if(mapping==null)
+            mapping = new Mapping()
         mappingClosure.resolveStrategy = Closure.DELEGATE_ONLY
         mappingClosure.delegate = this
         mappingClosure.call()
         mapping
     }
 
+
     /**
     * &lt;p&gt;Configures the table name. Example:
     * &lt;code&gt; { table 'foo' }</diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/orm/hibernate/cfg/HibernateMappingBuilder.groovy</filename>
    </modified>
    <modified>
      <diff>@@ -20,13 +20,17 @@ public class GrailsApplicationAwareBeanPostProcessor extends BeanPostProcessorAd
     }
 
     public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
+        processAwareInterfaces(grailsApplication,bean);
+        return bean;
+    }
+
+    public static void processAwareInterfaces(GrailsApplication grailsApplication, Object bean) {
         if (bean instanceof GrailsApplicationAware) {
             ((GrailsApplicationAware)bean).setGrailsApplication(grailsApplication);
         }
         else if(bean instanceof GrailsConfigurationAware) {
             ((GrailsConfigurationAware)bean).setConfiguration(grailsApplication.getConfig());
         }
-        return bean;
     }
 
 }</diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/plugins/support/aware/GrailsApplicationAwareBeanPostProcessor.java</filename>
    </modified>
    <modified>
      <diff>@@ -24,7 +24,6 @@ import org.springframework.beans.InvalidPropertyException;
 import java.beans.PropertyDescriptor;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
 
 /**
@@ -37,7 +36,7 @@ public class ConstrainedPropertyBuilder extends BuilderSupport {
 
 	private Object target;
 	private BeanWrapper bean;
-	private Map constrainedProperties = new HashMap();
+	private Map&lt;String, ConstrainedProperty&gt; constrainedProperties = new HashMap&lt;String, ConstrainedProperty&gt;();
 	private int order = 1;
 	
 	public ConstrainedPropertyBuilder(Object target) {
@@ -55,7 +54,7 @@ public class ConstrainedPropertyBuilder extends BuilderSupport {
 			String property = (String)name;
 			ConstrainedProperty cp;
 			if(constrainedProperties.containsKey(property)) {
-				cp = (ConstrainedProperty)constrainedProperties.get(property);				
+				cp = constrainedProperties.get(property);
 			}
 			else {
 				PropertyDescriptor pd = this.bean.getPropertyDescriptor(property);
@@ -63,14 +62,15 @@ public class ConstrainedPropertyBuilder extends BuilderSupport {
 				cp.setOrder(order++);
 				constrainedProperties.put( property, cp );
 			}
-			for (Iterator i = attributes.keySet().iterator(); i.hasNext();) {
-				String constraintName = (String) i.next();
-				if(cp.supportsContraint(constraintName)) {
-					cp.applyConstraint(constraintName, attributes.get(constraintName));
-				} else {
-                    if( ConstrainedProperty.hasRegisteredConstraint( constraintName ) ) {
+            for (Object o : attributes.keySet()) {
+                String constraintName = (String) o;
+                if (cp.supportsContraint(constraintName)) {
+                    cp.applyConstraint(constraintName, attributes.get(constraintName));
+                }
+                else {
+                    if (ConstrainedProperty.hasRegisteredConstraint(constraintName)) {
                         // constraint is registered but doesn't support this property's type
-                        GrailsUtil.warn( &quot;Property [&quot; + cp.getPropertyName() + &quot;] of domain class &quot; + this.target.getClass().getName() + &quot; has type [&quot; + cp.getPropertyType().getName() + &quot;] and doesn't support constraint [&quot; + constraintName + &quot;]. This constraint will not be checked during validation.&quot; );
+                        GrailsUtil.warn(&quot;Property [&quot; + cp.getPropertyName() + &quot;] of domain class &quot; + this.target.getClass().getName() + &quot; has type [&quot; + cp.getPropertyType().getName() + &quot;] and doesn't support constraint [&quot; + constraintName + &quot;]. This constraint will not be checked during validation.&quot;);
                     }
                     else {
                         // in the case where the constraint is not supported we still retain meta data
@@ -78,7 +78,7 @@ public class ConstrainedPropertyBuilder extends BuilderSupport {
                         cp.addMetaConstraint(constraintName, attributes.get(constraintName));
                     }
                 }
-			}				
+            }
 			return cp;
 		}
 		catch(InvalidPropertyException ipe) {
@@ -101,7 +101,7 @@ public class ConstrainedPropertyBuilder extends BuilderSupport {
 		return createNode(name,Collections.EMPTY_MAP,value);
 	}	
 	
-	public Map getConstrainedProperties() {
+	public Map&lt;String, ConstrainedProperty&gt; getConstrainedProperties() {
 		return this.constrainedProperties;
 	}
 </diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/validation/ConstrainedPropertyBuilder.java</filename>
    </modified>
    <modified>
      <diff>@@ -14,156 +14,39 @@
  */ 
 package org.codehaus.groovy.grails.validation.metaclass;
 
-import groovy.lang.*;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.groovy.grails.commons.GrailsClassUtils;
 import org.codehaus.groovy.grails.commons.GrailsDomainClassProperty;
 import org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicProperty;
-import org.codehaus.groovy.grails.commons.metaclass.ProxyMetaClass;
-import org.codehaus.groovy.grails.validation.ConstrainedProperty;
-import org.codehaus.groovy.grails.validation.ConstrainedPropertyBuilder;
-
-import java.io.InputStream;
-import java.util.*;
 
 /**
  * This is a dynamic property that instead of returning the closure sets a new proxy meta class for the scope 
  * of the call and invokes the closure itself which builds up a list of ConstrainedProperty instances
- * 
+ *
+ * @deprecated This class has been deprecated and will be removed in a future version of Grails
+ *
  * @author Graeme Rocher
  * @author Sergey Nebolsin
  * @since 07-Nov-2005
  */
 public class ConstraintsEvaluatingDynamicProperty extends AbstractDynamicProperty {
 
-    private static final String CONSTRAINTS_GROOVY = &quot;Constraints.groovy&quot;;
-
-    private static final Log LOG = LogFactory.getLog(ConstraintsDynamicProperty.class);
 
     public static final String PROPERTY_NAME = &quot;constraints&quot;;
 
-	private GrailsDomainClassProperty[] properties;
 
     public ConstraintsEvaluatingDynamicProperty(GrailsDomainClassProperty[] properties) {
         super(PROPERTY_NAME);
-        this.properties = properties;
     }
     
     public ConstraintsEvaluatingDynamicProperty() {
         super(PROPERTY_NAME);
-    }    
-
-    public Object get(Object object)  {
-
-        // Suppress recursion problems if a GroovyObject
-        if (object instanceof GroovyObject)
-        {
-            GroovyObject go = (GroovyObject)object;
-
-            if (go.getMetaClass() instanceof ProxyMetaClass)
-            {
-                go.setMetaClass(((ProxyMetaClass)go.getMetaClass()).getAdaptee());
-            }
-        }
-
-        // Compile list of ancestors to query for constraints
-        LinkedList classChain = new LinkedList();
-        Class clazz = object.getClass();
-        while (clazz != Object.class)
-        {
-            classChain.addFirst( clazz);
-            clazz = clazz.getSuperclass();
-        }
-
-        ConstrainedPropertyBuilder delegate = new ConstrainedPropertyBuilder(object);
-
-        // Evaluate all the constraints closures in the inheritance chain
-        for (Iterator it = classChain.iterator(); it.hasNext();)
-        {
-            clazz = (Class)it.next();
-            Closure c = (Closure)GrailsClassUtils.getStaticPropertyValue(clazz, PROPERTY_NAME);
-            if (c == null) {
-                c = getConstraintsFromScript(object);
-            }
-
-            if (c != null) {
-                c.setDelegate(delegate);
-                c.call();
-            } else {
-                LOG.debug(&quot;User-defined constraints not found on class [&quot;+clazz+&quot;], applying default constraints&quot;);
-            }
-        }
-
-
-        Map constrainedProperties = delegate.getConstrainedProperties();
-        if(this.properties != null) {
-            for (int i = 0; i &lt; this.properties.length; i++) {
-                GrailsDomainClassProperty p = this.properties[i];
-                ConstrainedProperty cp = (ConstrainedProperty)constrainedProperties.get(p.getName());
-                if(cp == null) {
-                    cp = new ConstrainedProperty(p.getDomainClass().getClazz(), p.getName(), p.getType());
-                    cp.setOrder(constrainedProperties.size()+1);
-                    constrainedProperties.put(p.getName(), cp);
-                }
-                // Make sure all fields are required by default, unless specified otherwise by the constraints
-                if(!cp.hasAppliedConstraint(ConstrainedProperty.NULLABLE_CONSTRAINT)
-                        &amp;&amp; !p.getName().equals(GrailsDomainClassProperty.DATE_CREATED)
-                        &amp;&amp; !p.getName().equals(GrailsDomainClassProperty.LAST_UPDATED)
-                        &amp;&amp; !((p.isOneToOne() || p.isManyToOne()) &amp;&amp; p.isCircular())) {
-                	// TODO remove &quot;p.isOptional()&quot; in 0.6
-//                    cp.applyConstraint(ConstrainedProperty.NULLABLE_CONSTRAINT, Boolean.valueOf(p.isAssociation() || p.isOptional()));
-                    cp.applyConstraint(ConstrainedProperty.NULLABLE_CONSTRAINT, Boolean.valueOf(
-                            p.isOptional() ||
-                            Collection.class.isAssignableFrom( p.getType() ) ||
-                            Map.class.isAssignableFrom( p.getType() ))
-                    );
-                }
-            }
-        }
-
-        return constrainedProperties;
     }
 
-    private Closure getConstraintsFromScript(Object object) {
-        // Fallback to xxxxConstraints.groovy script for Java domain classes
-        String className = object.getClass().getName();
-        String constraintsScript = className.replaceAll(&quot;\\.&quot;,&quot;/&quot;) + CONSTRAINTS_GROOVY;
-        InputStream stream = getClass().getClassLoader().getResourceAsStream(constraintsScript);
 
-        if(stream!=null) {
-            GroovyClassLoader gcl = new GroovyClassLoader();
-            try {
-                Class scriptClass = gcl.parseClass(stream);
-                Script script = (Script)scriptClass.newInstance();
-                script.run();
-                Binding binding = script.getBinding();
-                if(binding.getVariables().containsKey(PROPERTY_NAME)) {
-                    return (Closure)binding.getVariable(PROPERTY_NAME);
-                } else {
-                    LOG.warn(&quot;Unable to evaluate constraints from [&quot;+constraintsScript+&quot;], constraints closure not found!&quot;);
-                    return null;
-                }
-            }
-            catch (CompilationFailedException e) {
-                LOG.error(&quot;Compilation error evaluating constraints for class [&quot;+object.getClass()+&quot;]: &quot; + e.getMessage(),e );
-                return null;
-            } catch (InstantiationException e) {
-                LOG.error(&quot;Instantiation error evaluating constraints for class [&quot;+object.getClass()+&quot;]: &quot; + e.getMessage(),e );
-                return null;
-            } catch (IllegalAccessException e) {
-                LOG.error(&quot;Illegal access error evaluating constraints for class [&quot;+object.getClass()+&quot;]: &quot; + e.getMessage(),e );
-                return null;
-            }
-        }
-        else {
-            return null;
-        }
+    public Object get(Object object) {
+        return null;
     }
 
     public void set(Object object, Object newValue) {
-        throw new UnsupportedOperationException(&quot;Cannot set read-only property [&quot;+PROPERTY_NAME+&quot;]&quot;);
+        // do nothing
     }
-
 }</diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/validation/metaclass/ConstraintsEvaluatingDynamicProperty.java</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>3165165fc4c8253b9f05f89bf3878b84fc36cd1f</id>
    </parent>
  </parents>
  <author>
    <name>Graeme Rocher</name>
    <email>graeme.rocher@gmail.com</email>
  </author>
  <url>http://github.com/grails/grails/commit/3c917cb8e16034e321b2470992fc51121681265b</url>
  <id>3c917cb8e16034e321b2470992fc51121681265b</id>
  <committed-date>2009-11-03T01:12:59-08:00</committed-date>
  <authored-date>2009-11-03T01:12:59-08:00</authored-date>
  <message>fix for GRAILS-5287 &quot;Allow global configuration of GORM settings (cache, identity, nullability etc.)&quot;</message>
  <tree>6db693dae77228617dfddc1de2e8e3488fda0afc</tree>
  <committer>
    <name>Graeme Rocher</name>
    <email>graeme.rocher@gmail.com</email>
  </committer>
</commit>
