Make BeforeValidateHelper Serializable

Related to grails/grails-core#9986
diff --git a/grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/support/BeforeValidateHelper.java b/grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/support/BeforeValidateHelper.java
index 7c3342a..289b457 100644
--- a/grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/support/BeforeValidateHelper.java
+++ b/grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/support/BeforeValidateHelper.java
@@ -16,11 +16,12 @@
 
 import groovy.lang.MetaClass;
 
+import java.io.Serializable;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-public class BeforeValidateHelper {
+public class BeforeValidateHelper implements Serializable {
     public static final String BEFORE_VALIDATE = "beforeValidate";
     private Map<Class<?>, BeforeValidateEventTriggerCaller> eventTriggerCallerCache = new ConcurrentHashMap<Class<?>, BeforeValidateEventTriggerCaller>();
     
diff --git a/grails-datastore-gorm/src/test/groovy/org/grails/datastore/gorm/BeforeValidateHelperSerializationSpec.groovy b/grails-datastore-gorm/src/test/groovy/org/grails/datastore/gorm/BeforeValidateHelperSerializationSpec.groovy
new file mode 100644
index 0000000..4becca9
--- /dev/null
+++ b/grails-datastore-gorm/src/test/groovy/org/grails/datastore/gorm/BeforeValidateHelperSerializationSpec.groovy
@@ -0,0 +1,54 @@
+package org.grails.datastore.gorm
+
+import org.grails.datastore.gorm.support.BeforeValidateHelper
+import spock.lang.Specification
+
+
+class BeforeValidateHelperSerializationSpec extends Specification {
+
+    void "test serializing an instance of BeforeValidateHelper"() {
+        given:
+        def helper = new BeforeValidateHelper()
+
+        def bos = new ByteArrayOutputStream()
+        def oos = new ObjectOutputStream(bos)
+
+        when:
+        oos.writeObject(helper)
+        oos.flush()
+
+        def bis = new ByteArrayInputStream(bos.toByteArray())
+        def ois = new ObjectInputStream(bis)
+        def helper2 = ois.readObject()
+
+        then:
+        helper2 instanceof BeforeValidateHelper
+    }
+
+    void "test serializing an instance which references BeforeValidateHelper"() {
+        given:
+        def obj = new SomethingThatReferencesBeforeValidateHelper(firstName: 'Jeff', lastName: 'Brown')
+
+        def bos = new ByteArrayOutputStream()
+        def oos = new ObjectOutputStream(bos)
+
+        when:
+        oos.writeObject(obj)
+        oos.flush()
+
+        def bis = new ByteArrayInputStream(bos.toByteArray())
+        def ois = new ObjectInputStream(bis)
+        def obj2 = ois.readObject()
+
+        then:
+        obj2 instanceof SomethingThatReferencesBeforeValidateHelper
+        obj2.firstName == 'Jeff'
+        obj2.lastName == 'Brown'
+    }
+}
+
+class SomethingThatReferencesBeforeValidateHelper implements Serializable {
+    String firstName
+    String lastName
+    private BeforeValidateHelper helper = new BeforeValidateHelper()
+}