5.3.2.2. Структура Groovy-скриптов
Groovy-скрипты обновления имеют следующую структуру:
-  Основная часть, содержащая код, выполняемый до старта контекста приложения. В этой части можно использовать любые классы Java, Groovy и блока Middleware приложения, но при этом необходимо иметь в виду, что никакие бины, интерфейсы инфраструктуры и прочие объекты приложения еще не инстанциированы, и с ними работать нельзя. Основная часть предназначена в первую очередь, как и обычные SQL-скрипты, для обновления схемы данных. 
-  PostUpdate часть - набор замыканий, которые будут выполнены после завершения процесса обновления и после старта контекста приложения. Внутри этих замыканий можно оперировать любыми объектами Middleware приложения. В этой части скрипта удобно, например, выполнять импорт данных, так как в ней можно использовать интерфейс Persistence и объекты модели данных. 
На вход Groovy-скриптов механизм выполнения передает следующие переменные:
-  ds- экземплярjavax.sql.DataSourceдля базы данных приложения.
-  log- экземплярorg.apache.commons.logging.Logдля вывода сообщений в журнал сервера
-  postUpdate- объект, содержащий методadd(Closure closure)для добавления замыканий, выполняющихся после старта контекста сервера.
| 
        Warning 
       | Groovy-скрипты выполняются только механизмом запуска скриптов БД сервером. | 
Пример Groovy-скрипта обновления:
import com.haulmont.cuba.core.Persistence
import com.haulmont.cuba.core.global.AppBeans
import com.haulmont.refapp.core.entity.Colour
import groovy.sql.Sql
log.info('Executing actions in update phase')
Sql sql = new Sql(ds)
sql.execute """ alter table MY_COLOR add DESCRIPTION varchar(100); """
// Add post update action
postUpdate.add({
    log.info('Executing post update action using fully functioning server')
    def p = AppBeans.get(Persistence.class)
    def tr = p.createTransaction()
    try {
        def em = p.getEntityManager()
        Colour c = new Colour()
        c.name = 'yellow'
        c.description = 'a description'
        em.persist(c)
        tr.commit()
    } finally {
        tr.end()
    }
})