Как стать автором
Поиск
Написать публикацию
Обновить
1.33

Groovy & Grails *

Язык программирования Groovy и фреймворк Grails

Сначала показывать
Порог рейтинга
Уровень сложности

Тестируем в браузере с помощью Geb

Время на прочтение10 мин
Количество просмотров14K

Geb на практике


Я вот, скажем, люблю, когда всю работу за меня делают роботы. Поэтому считаю необходимым всякие скрипты, inspections, проверщики орфографии и, разумеется, автоматические тесты. Кстати, как вам такой тестик:

Browser.drive(driver: new InternetExplorerDriver()) {

    go "http://www.google.com"

    $('form', action:endsWith('/search')).q = 
                    'тестирование при помощи geb и spock'
    $('button', value:'Поиск').click()
    waitFor { $('#search') }
    assert $('#search').size() == 1
    assert $('#search').find('li.g a.l').size() > 0
    println "Первый результат: " + $('#res').find('li.g a.l', 0).text()
}.quit()

Мне кажется, у таких тестов высокая степень читаемости — неважно даже, какой это язык. Можно по такому вот образцу написать еще несколько подобных же тестов, не имея вообще никакого понятия о Geb, Groovy и о том, как это работает. Но для полного понимания немного углубимся в основы.
Читать дальше →

Особенности неявного приведения типов в Groovy

Время на прочтение3 мин
Количество просмотров5.4K
Не так давно я задавал вопрос в Groovy mail-list — есть ли какой-то устойчивый список вещей, которые надо избегать при написании высокогопроизводительного на Groovy. Среди прочих советов, один из главных разработчиков Groovy, Jochen «blackdrag» Theodorou указал, что в общем случае, зачастую использование конкретного типа при объявлении переменной (например, MyType var =… вместо def var = ...) может ухудшить производительсть из-за накладных расходов на проверку типов и, если нужно, их приведение.

По утвеждениям разработчиков Groovy, многие из проблем в этом области наблюдались в версиях вплоть до 1.7 и были затем исправлены во время большой работы по общей оптимизации рантайма, проделанной в версии 1.9. Ниже, однако, небольшой эксперимент, который показывают эти накладные расходы даже на Groovy 1.8.3.

Перед этим экспериментом будет полезно просмотреть следующую статью — groovy.codehaus.org/From+source+code+to+bytecode, где рассказывается про то, как по шагам исходный код на Groovy преобразуется в байткод JVM, а так же почитать какую-нибудь вводную статью в собственно байткод, например эту — www.ibm.com/developerworks/ibm/library/it-haggar_bytecode.

Читать дальше →

Решение проблемы кодировки в GSP-страницах (без Grails)

Время на прочтение3 мин
Количество просмотров2.3K
В какой-то момент проявилась одна заметная проблема, мешающая мне осуществить абсолютно 100% замену PHP на Groovy для веба без использования относительно тяжеловесного MVC-фреймворка Grails.

Это касается *.gsp страниц (Groovy Server Pages), представляющих собой html-страницы со вставками вида <%… %> с произвольным кодом на Groovy или Java, или на языке оригинала: "GSP means GroovyServer Pages, which is similar to JSP (JavaServer Pages)."

Читать дальше →

Пишем deploy-скрипт для Grails

Время на прочтение5 мин
Количество просмотров3.5K

Зачем нужен deploy-скрипт


Grails-приложения очень легко собираются в WAR. Делается это так:

grails war

Помимо того, что WAR собирается, очень хочется этот WAR еще и установить на сервер. В нашем случае это Tomcat. Установка вручную требует некоторой возни:
  1. Остановить сервер. Убить процесс, если он не остановился сам.
  2. Удалить старые файлы приложения (на всякий случай)
  3. Скопировать новый WAR на сервер. Иногда его нужно переименовывать (скажем, в ROOT.war)
В Maven эту работу может проделать, например, cargo plugin. Но с ним много приключений и настройки, причем он не особо учитывает особенности сервере.

Мы также можем использовать shell-скрипт. Но зачем писать на неудобном языке shell, когда есть замечательный кроссплатформенный язык Groovy?

Подробности

Полнотекстовый поиск в Grails

Время на прочтение4 мин
Количество просмотров3.3K
Подключить полнотекстовый поиск в Grails — задача довольно легкая. Для этого используется плагин Searchable, который делает все сущности Grails-приложения индексируемыми. Searchable позволяет абстрагировать весь процесс индексирования и поиска. При этом сам плагин использует библиотеку Compass, которая следит за тем, чтобы при изменении объекта (т.е. при сохранении в БД) он автоматически переиндексировался. Сам по себе Compass по сути является довольно мощным средством «поискового ORM»:
Читать дальше →

Grails, jQuery, AJAX: делаем anchor-навигацию. Часть 2, финальная

Время на прочтение4 мин
Количество просмотров3.4K

Полная и неполная страницы


Продолжаем разговор про anchor-навигацию. Наша цель — сделать рабочее приложение на Grails.

Есть одна тонкость. Очень хочется, чтобы страница могла быть показана как в полном варианте (с шапкой, навигацией и т.п.), так и в сокращенном (для AJAX-вызовов). Однако набрав /my-app/do/receipts, получим полный вариант. Теперь это выглядит так:
Читать дальше →

Grails, jQuery, AJAX: делаем anchor-навигацию. Часть 1

Время на прочтение5 мин
Количество просмотров17K

AJAX и все, все, все


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

Нетрудно заметить, что все больше сайтов используют AJAX и частичные обновления страниц, причем в невероятном количестве. В частности, «начиненные» AJAX ссылки могут использоваться для внутренней навигации по странице, переключения каких-то вкладок. Это хорошо тем, что
А) меньше данных нужно перегонять от сервера — только нужный кусок страницы и
Б) веб-страницы часто загружают просто гигантские CSS и JavaScript-файлы, которые при AJAX-обновлении можно повторно не загружать.

Итак, очень распространено построение приложений по сценарию: одна большая «стартовая» страница, загружающая весь JavaScript-код и CSS и более мелкие «внутренние» функциональные блоки, загружаемые через AJAX. С этим есть ряд проблем:
  1. В результате AJAX-действий внутреннее состояние страницы не отражено в адресной строке браузера.
  2. Как следствие, внутренние страницы не могут быть запомнены в закладки, нельзя «отправить ссылку другу».
  3. Не работает Back/Forward навигация в браузере, т.к. AJAX-ссылки не попадают в историю браузера.
Однако крупные сайты нашли некое «хакерское» решение, которое мы сейчас рассмотрим и напишем небольшой свой собственный аналог на Grails и jQuery.
Читать дальше →

Grails, jQuery, AJAX: первое знакомство

Время на прочтение2 мин
Количество просмотров6.5K

Добавляем jQuery в Grails


Собственно никаких проблем с AJAX в Grails не наблюдается: контроллеры могут спокойно возвращать JSON-данные, GSP-страницы могут использовать соответствующие вспомогательные тэги.

По умолчанию Grails дружит с Prototype JS. Однако можно легким движением руки установить плагин поддержки jQuery.
Читать дальше →

Релиз Groovy 1.7

Время на прочтение1 мин
Количество просмотров860
Groovy development team и SpringSource после двух бета-версий и двух релиз кандидатов объявили о выпуске финальной версии Groovy 1.7. За годы своего существования у groovy появилось свое сообщество разработчиков, было реализовано несколько давольно крупных проектов: фреймворк Grails, Griffon, Gant и Gradle, Gaelyk — тулкит для Google APP Engine и т.д.
Продолжение

Портирование linux.org.ru на grails / приглашаю принять участие

Время на прочтение1 мин
Количество просмотров1.5K
Возможно кто-то уже знает, что исходный код сайта www.linux.org.ru уже 10 дней как доступен под открытой APL2.0 лицензией, а может кто-то даже знает, что я начал портировать его на grails. Процесс портирование — дело несложное, но интересное и, увы, небыстрое — некоторые штуки сделаны достаточно странно и порой нужно долго думать о том, как и что лучше реализовать, а свободного времени, как известно, много никогда не бывает. В связи с этим хотел бы пригласить начинающих (да и не начинающих тоже) grails/java-программистов также поучаствовать. Впрочем, знание grails/java не так важно, как желание помочь.

оригинальные исходники доступны тут:
github.com/maxcom/lorsource
порт на grails — тут:
code.google.com/p/lor-grails

upd:
я — не maxcom, но он о портировании знает и не против.

Grails 1.1 Beta 1 Released

Время на прочтение1 мин
Количество просмотров797
Сегодня была выпущена первая бета-версия full-stack java/groovy веб-фреймворка Grails
Из нового:
* многочисленные улучшения в GORM(см. ссылку)
* улучшения в системе плагинов (теперь их можно устанавливать глобально и не нужно хранить в svn)
* The Test Framework
* Dynamic Scaffolding (кстати, кто-нибудь может объяснить что именно это такое?)

Подробности, сорцы/бинарники и документация подступны по ссылке:
www.grails.org/1.1+Beta1+Release+Notes