вторник, 1 мая 2007 г.

Выпущен Grails 0.5

Результатом напряжённой работы команды Grails-разработчиков стал сегодняшний выпуск 0.5 версии популярного веб-фреймворка Grails, совпавший с выходом нового релиза Groovy 1.1-beta1.

Скачать новый релиз можно здесь: http://grails.org/Download

Этот релиз включает в себя следующие основные улучшения:

  • Пользовательские URL Mappings

  • Командные объекты / проверка форм

  • List & Map поддержка в GORM

  • Поддержка композиций в доменных классах (Hibernate "components")

  • Base64 кодек

  • Отслеживание зависимостей библиотек с помощью Ivy

  • Метаданные проекта и поддержка версий

  • Механизм событий в скриптах

  • Автоматическое добавление объекта 'log' ко всем артефактам

  • Новое Artefact API доступно для плагинов



Полное описание релиза, собранное разработчиком Grails Марком Палмером, можно прочитать тут:
http://docs.codehaus.org/display/GRAILS/0.5+Release+Notes

JIRA change log можно посмотреть здесь:
http://jira.codehaus.org/browse/GRAILS?report=com.atlassian.jira.plugin.system.project:changelog-panel

Этот релиз собран с помощью Groovy 1.1 beta и включает все новые функции и улучшения последнего релиза Groovy:
http://docs.codehaus.org/display/GROOVY/2007/04/30/Groovy+1.1-beta-1+with+annotation+support

вторник, 24 апреля 2007 г.

Grails 0.5 RC1

Мы опубликовали пререлиз 0.5 версии Grails.

Сейчас самое подходящее время чтобы испробовать его, и если возникнут замечания, отразить их в Jira. Тогда исправления будут включены в финальный релиз 0.5

Скачать 0.5-RC1 можно здесь: http://grails.org/Download

При переходе на 0.5 необходимо сделать backup вашего приложения, а затем выполнить:
grails clean
grails upgrade

понедельник, 19 марта 2007 г.

Несколько новых функций в Grails

На этой неделе я добавил несколько новых функций в 0.5 snapshot Grails

Во-первых, теперь можно задать "область уникальности" для unique constraint. Допустим, я разрабатываю приложение для работы с сотрудниками. Каждый сотрудник имеет собственный логин, также сотрудники разбиты на группы, а группы в свою очередь входят в подразделения. Предположим также, что специфика моего приложения диктует мне следующие ограничения доменной модели: не может быть двух сотрудников с одинаковыми логинами в одной группе одного подразделения, и не может быть двух групп с одним именем в пределах одного подразделения. С новым функционалом подобные ограничения легко могут быть отображены в доменном классе:

class Employee {
String login
String group
String department

static constraints = {
login(unique:['group','department'])
group(unique:'department')
}
}

Вот и все. Очень просто, не правда ли? Просто указываем в качестве параметра к unique constraint имя другого поля того же класса (или список таких имён) - и в процессе валидации будет произведена проверка, что совокупность значений полей будет уникальна.

Другое изменение - это новый динамический метод 'getAll' у доменных классов. Метод принимает список идентификаторов объектов в качестве аргумента и возвращает список соответствующих сущностей в том же порядке. Если объекты для каких-либо идентификаторов не найдены, то на соответствующем месте результирующего списка будет null. При вызове без параметров метод возвращает список всех объектов.

И последнее изменение - возможность использования именованных HQL параметров в динамических методах 'find', 'findAll' и 'executeQuery'. Теперь эти методы могут принимать в качестве аргумента не только List позиционных параметров, но и Map именованных параметров в формате [имя:значение]. Примеры использования можно посмотреть в документации по приведённым ссылкам.