Показаны сообщения с ярлыком Roo. Показать все сообщения
Показаны сообщения с ярлыком Roo. Показать все сообщения

четверг, 11 ноября 2010 г.

Spring Roo. Что за зверь?

Spring Roo - набор утилит и плагинов, который позволяет ускорить и упростить разработку Spring-приложений. Особенно хорошо он подходит для людей, которые впервые сталкиваются с разработкой приложений на Spring.

Установка
  1. Необходимо скачать набор бинарных утилит - это ядро самого Spring Roo - http://www.springsource.com/products/spring-community-download. Необходимо добавить /bin папку данных утилит в PATH.
  2. Если вы работаете под Eclipse, то поставить SpringSource Tool Suite, как плагин или в виде отдельной сборки - http://www.springsource.com/developer/sts. Я рекомендую вариант плагина.
  3. Maven - http://maven.apache.org/download.html, а также плагин к Eclipse m2Eclipse.
Вы можете просмотреть видео по установке Spring Roo, если возникли какие-то затруднения http://s3.springsource.com/MRKT/roo/2010-01-Five_Minutes_Roo.mov.

Первый проект
Инструкция по созданию тестового проекта представлена на http://static.springsource.org/spring-roo/reference/html/intro.html#intro-first-steps. Думаю, что там нет ничего сложного.

Мой опыт работы
Консоль
Центральным элементом Roo является её консоль. В консоли качественно реализована функция suggest. Единственное, что иногда консоль может выдавать большее количество подсказок.

Использование аспектов AspectJ и кодогенерация
В Roo аспекты использованы очень удачно. Они генерируются автоматически по аннотациям классов. Если какой-либо из этих аспектов не нужен, то необходимо удалить соответствующую аннотацию. В случае изменения данных в классе, эти аспекты автоматически пересоздаются. Редактировать вручную их можно, но изменения не сохранятся, при любом изменении произойдет перегенерация аспектов.
Например, Roo может выносить в аспекты следующие вещи:
  • геттеры и сеттеры
  • метод toString (с возможностью настройки того, какие поля будут в нем прописываться)
  • базовые вещи для Entity классов. Это например id поле, аннотация того, что класс является сущностью. EntityManager и т.д.
  • стандартные методы контроллеров
  • генерация finder-методов. Roo может генерировать практически любые комбинации полей, по которым необходимо искать. 
Единственное, что тут непонятно для меня, так это почему автоматически не генерируются методы equals и hashCode.  UPDATE: Генерация данных методов вынесена в отдельный плагин http://code.google.com/p/spring-roo-equals-roo-addon/. Возможно, этот плагин войдет в новый релиз.
С аспектами возможно появление непредсказуемых багов в плане отладки. Там возможны некоторые затруднения с дебагом.

Добавление полей сущностям
Эта функция реализована на ура. Можно добавлять новые поля, как из консоли, так и из IDE. Roo все подхватывает и исправляет.

Scaffold
Roo предоставляет возможность Scaffold. Реализуется это при помощи установки аннотации @RooWebScaffold на класс модели. Scaffold - это автоматическая генерация UI по моделям. Это функция очень хороша, когда надо создать скелет UI в проекте с новыми технологиями. Можно посмотреть, как все работает и исправить на свой вкус. 
Сам скаффолд генерируется в виде *.jspx файлов и небольшой библиотечки тегов.
Хотя с исправлением скаффолда сейчас не все гладко, например, если вы в скаффолде укажете русские символы, то при следующем обновлении увидите заместо них "???". Это связано с тем, что проект ещё сыроват, особенно в плане поддержки других языков.
Естественно, что в каких-либо реальных проектах будет просто необходимо отказываться от скаффолда. 
С версии 1.1.0 возможен scaffold при помощи GWT.

Maven
Maven используется, как для поддержания зависимостей проекта от сторонних библиотек, так и для запуска проекта в сервлет-контейнере. 

Обновление
Начинал я работу со Spring Roo с версии 1.0.0. Во время моей работы Roo успел обновиться до версии 1.1.0. Изменения очень сильные, по сути пришлось пересоздавать проект. Подозреваю, что такая нестабильность сохранится и в ближайшее время, поэтому для серьезных проектов использовать Roo рано. 

Документация
Как и в Spring, документация здесь далеко не всегда полная и полезная.

Баги
Сталкивался с парой багов, связанных с UTF-8 кодировками. Они до сих пор не решены в 1.1.0 и будут решены в 1.1.1. Одна из них, кстати, благодаря мне.