...

вторник, 6 мая 2014 г.

Spring Roo — что за зверь и с чем его едят?

Warning




Внимание, описаное ниже является мнением автора и не претендует на звание догмы.

Так что же такое Spring Roo?




Spring Roo, как пишут в той же википедии — framework, который позволяет быстро разработать бизнес приложение, точнее его структурную часть. По моему мнению, приложением то, что получается на выходе назвать сложно, но как инструмент прототипирования на начальной стадии разработки — весьма полезная вещь. Вообще, говорить о чем-то техническом можно долго, красиво и напридумать кучу доводов как «за», так и «против». Но чтобы решить для себя надобность технологии, стоит сначала попробовать ее, ну или как минимум подумать о процессе применения ее в «быту», так сказать. Чем мы дальше и займемся.

С места в карьер




Качаем Spring Roo, распаковываем архив и запускаем консоль roo. Дальше начинается самое интересное. Стоит сразу сказать — у консоли roo есть замечательная команда hint, она подскажет вам, что именно можно и нужно делать на каждом конкретном этапе разработки. Дальше по пунктам рассмотрим создание простейшего CRUD веб-приложения.
Создание проекта


project --topLevelPackage com.getauft.library --java 7 --projectName library




После каждой команды, roo будет выводить ответ из которого будет понятно, что именно произошло и произошло ли…

Пример ответа на команду создания проекта указанную выше:

Created ROOT/pom.xml
Created SRC_MAIN_RESOURCES
Created SRC_MAIN_RESOURCES/log4j.properties
Created SPRING_CONFIG_ROOT
Created SPRING_CONFIG_ROOT/applicationContext.xml




Механизм персистентности



Странно, если наше приложение будет хранить данные в сессии только. Для того, чтобы работать с БД, нам нужно использовать механизмы персистентности. В данном примере мы будем использовать базу которая разворачивается и хранит все данные в оперативной памяти — HYPERSONIC. Для тех кто захочет использовать mysql или что-то другое — не составит труда изменить конфигурацию.

jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY




Так просто.
Класс



Наше приложение должно оперировать какими-то сущностями, иначе зачем оно еще нужно?! Сущности создаются так же просто как и все что здесь описано.

entity jpa --class com.getauft.library.Book --testAutomatically
entity jpa --class com.getauft.library.Genre --testAutomatically




Мы создали два класса, и указали, что они будут тестироваться автоматически(об этом в самом конце).
Поля класса


field string --fieldName title --notNull --class ~.Book
field string --fieldName description
field string --fieldName caption --notNull --class ~.Genre




Мы создали три поля: title и description для класса Book, и caption для Genre. Когда вам необходимо создать несколько полей для одного класса, то каждый раз указывать класс нет необходимости, можно опускать этот параметр после того, как создали первое поле в этом классе.
Связи между объектами


field set --fieldName genres --type ~.Genre --class ~.Book --cardinality MANY_TO_MANY




Связь простая: Много книг может содержать много жанров. Жанры ничего не знают о существовании книг.
Контроллеры


controller all --package ~.web




Данная команда создаст нам все необходимые контроллеры чтобы осуществлять CRUD операции с нашими объектами.
Логирование и тесты


logging setup --level INFO --package ALL_SPRING
perform tests




Логирование понятно, но что за тесты?! Помните в самом начале мы использовали при создании классов ключ --testAutomatically? Так вот Spring Roo сам покроет простыми тестами эти классы, и как раз последней командой они и будут выполнены.
Запуск получившегося



Для запуска получившегося приложения нам необходимо выполнить следующую команду:

mvn tomcat:run




Выполнение этой команды подразумевает, что на вашей машине стоит maven. После запуска, maven сам подтянет все необходимые зависимости, не пугайтесь — их много. Далее нам просто нужно будет перейти по ссылке http://localhost:8080/library/ и о чудо, почти полноценное приложение! Почему почти? Все просто — никакого функционала кроме операций CRUD здесь вы не увидите… Пока не увидите. В идеале с помощью Spring Roo можно сделать кучу полезных вещей, таких как поиск и прочее. Но в этой ознакомительной статье мы касаться этого не будем. Если будет интересно уважаемому хабросообществу, то я напишу продолжение, с более серьезным примером и расширенным функционалом.

А теперь для ленивых...




Те кто читают по диагонали и не хотят разбираться, а желают видеть сразу результат, то им нужно скопировать код в файл с названием log.roo (название на самом деле не важно), запустить консоль roo и выполнить команду script --file log.roo, а затем в обычной консоли mvn tomcat:run
Содержимое log.roo


project --topLevelPackage com.getauft.library --java 7 --projectName library
jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
entity jpa --class com.getauft.library.Book --testAutomatically
entity jpa --class com.getauft.library.Genre --testAutomatically
field string --fieldName title --notNull --class ~.Book
field string --fieldName description --class ~.Book
field string --fieldName caption --class ~.Genre
field set --fieldName genres --type ~.Genre --class ~.Book --cardinality MANY_TO_MANY
controller all --package ~.web
logging setup --level INFO --package ALL_SPRING
perform tests


Так зачем же он нужен?




Можно говорить много о том, что код сгенерированный машиной никогда не приблизится к коду написанному человеком (даже не знаю, всегда ли это плохо). Можно говорить о том, что это применимо только в суровом и консервативном enterprise, где есть требования к функционалу продукта, а не удобству и дизайну. Много можно придумать «за» и «против». Но одно точно — скорость создания модели приложения сокращается в разы. Да и кто сказал, что обязательно использовать Spring Roo для создания Web MVC?

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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий