Статьи

Отрывок книги: Грифон в действии

Grails — безусловно лучший вариант для создания веб-приложений в JVM, позволяющий использовать функции, которые можно найти в популярных библиотеках Java, и функции, доступные только на языке Groovy. Эта статья, основанная на главе 13 «Гриффон в действии», показывает немного о том, как Grails и Griffon могут быть объединены для создания приложений, которые касаются настольных компьютеров и серверов, с подходом, нацеленным на высокую производительность и снова превращающим программирование в увлекательное занятие.

Трудно найти веб-разработчика, который не сталкивался с веб-сайтом на основе Ajax или RIA. Эти технологии стали настолько повсеместными, что трудно вспомнить времена, когда Web 2.0 не существовало. Существует множество вариантов создания веб-приложения со встроенным Ajax или с богатым интерфейсом как на уровне внешнего, так и внутреннего уровня. Grails, оказывается, один из лидеров в работе с JVM.

Если вы разработчик веб-приложений и не попробовали Grails, вы обязаны сделать это сами. Мы можем гарантировать, что вы не будете разочарованы.
Grails — это полнофункциональная платформа для веб-разработки, основа которой лежит в Spring и Hibernate, поэтому для разработчика Java не составит труда подобрать его и приступить к работе. Но что действительно делает его революционным, так это выбор языка разработки по умолчанию: Groovy — такой же, как в Griffon.
У Grails есть еще один туз: готовый к работе командный инструмент, который также можно расширять с помощью плагинов. Именно благодаря этой системе плагинов создание приложения Grails очень просто. Нужен способ поиска по вашим данным? Установите поисковый плагин. Ваши требования требуют CouchDB вместо традиционного хранилища SQL? Нет проблем, установите плагин CouchDB. Это что? Вам необходимо защитить определенные части приложения, используя области безопасности? Плагин Shiro здесь, чтобы помочь. Вы поняли идею.

Из огромного набора плагинов Grails (по текущим подсчетам команды их более 500) вы найдете большое количество, которые имеют дело с Ajax и RIA. Они довольно хороши. Но независимо от того, какой из них вы выберете, будут моменты, когда вам потребуется функция, которая не может быть реализована из-за ограничений браузера. Вот когда пришло время посмотреть за пределы окна браузера на пространство, которое позволяет вам запустить браузер. Да, это среда рабочего стола вашего компьютера. Вот тут и вступает Гриффон.
В этой статье вы увидите, как настроить свою среду, чтобы воспользоваться преимуществами мощных функций Grails.

Начало работы с Grails

Настроить Grails так же просто, как настроить Griffon.

  1. Укажите в браузере http://grails.org/Download, выберите последний стабильный релиз zip и распакуйте его в каталог по вашему выбору.
  2. Установите переменную окружения GRAILS_HOME, указывающую на папку установки Grails.
  3. Добавьте GRAILS_HOME / bin на свой путь. В OS X и Linux это обычно делается путем редактирования файла конфигурации оболочки (например, ~ / .profile) путем добавления следующих строк:
    export GRAILS_HOME=/opt/grails
    export PATH=$PATH:$GRAILS_HOME/bin
    

    В Windows вам нужно зайти в окно «Свойства системы», чтобы определить переменную GRAILS_HOME и обновить настройки пути.

Готово? Отлично. Вы можете проверить правильность установки Grails, введя команду grails help в командной строке. Это должно отобразить список доступных команд Grails, подобный следующему:

$ grails help
| Environment set to development.....

Usage (optionals marked with *):
grails [environment]* [target] [arguments]*

Examples:
grails dev run-app
grails create-app books

Это подтвердит, что ваш GRAILS_HOME был установлен правильно и что команда grails доступна на вашем пути.
После завершения установки вы готовы приступить к созданию приложения Grails.

 

Сборка серверного приложения Grails

Мы выберем домен книга / автор из-за его простоты. Создание нашего примера приложения Bookstore выполняется с помощью простой команды:

$ grails create-app bookstore

Эта команда создаст структуру приложения и загрузит минимальный набор плагинов, если вы запускаете Grails впервые.
Эта команда выглядит странно похожей на команду Гриффона, не так ли? Помните, что Гриффон родился как ответвление кодовой базы Grails? Сейчас мы проверим эту претензию.

Помимо некоторых уникальных концепций для Grails и Griffon, почти все команды, найденные в обеих платформах, обеспечивают одинаковое поведение.
Вы можете запустить приложение сейчас, но поскольку оно пустое, вы не увидите ничего полезного. Давайте немного его заполнить.

 

Создание доменных классов

Классы предметной области раскрывают некоторые различия между Grails и Griffon. Одно из больших отличий заключается в том, что доменные классы Grails имеют доступ к реализации объектно-реляционного отображения (GORM) Grails, и Griffon по умолчанию не предоставляет эту функциональность:

Создайте два класса домена: Книга и Автор. Убедитесь, что вы находитесь в каталоге приложения, прежде чем вызывать следующие команды:

$ grails create-domain-class Author
$ grails create-domain-class Book

Этот набор команд создает пару файлов в grails-app / domain / bookstore, метко названных Author.groovy и Book.groovy. Каждый из этих двух классов представляет объект домена вашей модели домена. Они оба пусты в данный момент. Гриффон, напротив, не поддерживает классы доменов из коробки. Эта проблема остается за плагинами, поскольку доменные классы не являются универсальным атрибутом всех приложений Griffon.

Откройте два класса в своем любимом редакторе или, если хотите, в своей любимой IDE; Grails не придирчив и будет с удовольствием работать с любой IDE или редактором, который вы к нему добавите. Убедитесь, что содержимое классов домена Author и Book совпадает с приведенным в следующих списках.

Сначала давайте посмотрим на домен Grails Author (grails-app / domain / bookstore / Author.groovy):

package bookstore
class Author {
    static hasMany = [books: Book]                  #A
    static constraints = {
        name(blank: false)
        lastname(blank: false)
    }

    String name
    String lastname

    String toString() { "$name $lastname" }
}

# Отношение один-ко-многим
Теперь давайте посмотрим на домен Книги Граилс (grails-app / domain / bookstore / Book.groovy):

package bookstore
class Book {
    static belongsTo = Author
    static constraints = {
        title(unique: true)
    }

    String title
    Author author

    String toString() { title }
}

Не вдаваясь в подробности, классы Author и Book определяют пару сущностей, которые можно сохранить в хранилище данных по умолчанию. Если вы впервые столкнулись с классом домена Grails, не волнуйтесь, они не кусаются. Помимо простых свойств в каждом классе, вы заметите, что существует отношение «один ко многим» от автора к книге. Вы можете сделать это отношениями «многие ко многим», чтобы более точно отразить реальный мир, но давайте пока все упростим.

Есть еще один шаг, который необходимо выполнить, прежде чем пытаться запустить приложение в первый раз. Вы должны каким-то образом предоставить пользователю доменные классы.

Создание контроллеров

С платформой, отличной от Grails, вам потребуется написать HTML или использовать какой-либо другой механизм шаблонов для представления классов вашего домена. С Grails вы можете позволить фреймворку вступать во владение, пока вы придерживаетесь соглашений. Если вы создаете только пару классов контроллеров, по одному на класс домена, больше ничего делать не нужно. Ура для строительных лесов!

Вернитесь в командную строку и введите следующее:

$ grails create-controller Author
$ grails create-controller Book

Найдите каждый контроллер в grails-app / controllers / bookstore и отредактируйте его, аккуратно скопировав следующий код в соответствующий файл.
Во-первых, вот контроллер Grails Author (grails-app / controllers / AuthorController.groovy):

package bookstore
class AuthorController {
    static scaffold = true 
}

Далее, контроллер Grails Book (grails-app / controllers / BookController.groovy):

package bookstore
class BookController {
    static scaffold = true 
}

Это все, что вам нужно на данный момент. Однако не дайте себя одурачить — за каждым из этих контроллеров стоит полноценный компонент на базе Spring MVC.
Отлично. Тебе хорошо идти.

Запуск приложения Книжный магазин

Запустите приложение с помощью следующей команды:

$ grails run-app

Через несколько секунд, в течение которых команда компилирует и упаковывает приложение, вам будет предложено посетить следующий адрес: http: // localhost: 8080 / bookstore. Используйте ваш любимый браузер, чтобы перейти к этому URL. Вы должны увидеть страницу, которая выглядит как на рисунке 1.

Вы увидите страницу по умолчанию со списком некоторых внутренних деталей приложения, таких как установленные в настоящее время плагины и их версии. Вы также заметите пару ссылок, которые указывают на контроллер, который вы написали.

Нажмите на ссылку AuthorController. Теперь вы находитесь на начальной странице для всех операций создания, чтения, обновления и удаления (CRUD), которые влияют на автора. Как это возможно? Это сила конвенций. Когда вы указываете каждому контроллеру, что класс домена должен находиться в скаффолде, он генерирует (во время компиляции) минимально необходимый код и шаблоны для выполнения базовых операций CRUD в этом конкретном классе домена.
Теперь вы можете поиграть с авторами и книгами. Попробуйте создать и удалить некоторые. Вы можете получить экран, похожий на рисунок 2.

Резюме

Grails — безусловно лучший вариант для создания веб-приложений в JVM, позволяющий использовать функции, которые можно найти в популярных библиотеках Java, и функции, доступные только на языке Groovy. Griffon идет по стопам Grails и стремится обеспечить такой же прирост производительности, но в пространстве рабочего стола. Их можно объединить для создания приложений, которые касаются рабочего стола и сервера с одинаковым подходом к разработке: подход, нацеленный на высокую производительность и снова делающий программирование увлекательным.