Главная > Development > Опыт с Spring Roo

Опыт с Spring Roo

У меня возникла задача создать простенький веб-сайт с функциональностью доступа пользователей сайта к некоторой закрытой информации. При этом регистрация пользователей происходит третьим способом, но через сайт пользователи могут поменять свой пароль. Закрытая часть сайта содержит простенький интерактив по работе с закрытой информацией (создать, изменить, удалить), а также функционал по управлению пользователями – для админов.
Для такого проекта я решил попробовать Spring Roo.

Установка происходит просто, maven у меня уже был развернут. Далее я по инструкциями создал все необхомые вещи:

alik-kurdyukovs-computer:testportal alik$ roo
    ____  ____  ____  
   / __ \/ __ \/ __ \ 
  / /_/ / / / / / / / 
 / _, _/ /_/ / /_/ /  
/_/ |_|\____/\____/    1.0.0.RC1 [rev 198]
 
 
Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.
roo> create project -topLevelPackage ru.test.testportal -projectName testportal
Created /Users/alik/Development/projects/test/testportal/pom.xml
Created SRC_MAIN_JAVA
Created SRC_MAIN_RESOURCES
Created SRC_TEST_JAVA
Created SRC_TEST_RESOURCES
Created SRC_MAIN_WEBAPP
Created SRC_MAIN_RESOURCES/META-INF/spring
Managed ROOT/pom.xml
Created SRC_MAIN_RESOURCES/META-INF/spring/applicationContext.xml
roo> install jpa -provider HIBERNATE -database POSTGRESQL
Created SRC_MAIN_RESOURCES/META-INF/persistence.xml
Created SRC_MAIN_RESOURCES/META-INF/spring/database.properties
please enter your database details in src/main/resources/database.properties
Managed SRC_MAIN_RESOURCES/META-INF/spring/applicationContext.xml
Managed ROOT/pom.xml
roo> database properties
database.driverClassName = org.postgresql.Driver
database.password = 
database.url = jdbc:postgresql://localhost:5432
database.username = 
roo> database set -key database.url -value jdbc:postgresql://localhost:5432/testportaldb
Managed SRC_MAIN_RESOURCES/META-INF/spring/database.properties
roo> database set -key database.username -value testportal
roo> database set -key database.password -value testportalpass
roo> add dependency -groupId postgresql -artifactId postgresql -version 8.3-603.jdbc3
Managed ROOT/pom.xml
roo> new persistent class jpa -name ~.domain.PortalUser 
Created SRC_MAIN_JAVA/ru/test/testportal/domain
Created SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser.java
Created SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_Entity.aj
Created SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_ToString.aj
Created SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_Configurable.aj
roo> add field string -class ~.domain.PortalUser -fieldName phoneNumber -notNull -sizeMax 20
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser.java
Created SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_ToString.aj
roo> add field string -class ~.domain.PortalUser -fieldName password -notNull -sizeMax 50
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser.java
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_ToString.aj
roo> add field boolean -class ~.domain.PortalUser -fieldName needChangePassword -notNull 
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser.java
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_ToString.aj
roo> add field string -class ~.domain.PortalUser -fieldName lastName -sizeMax 200           
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser.java
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_ToString.aj
roo> add field string -class ~.domain.PortalUser -fieldName firstName -sizeMax 200
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser.java
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_ToString.aj
roo> add field string -class ~.domain.PortalUser -fieldName middleName -sizeMax 200
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser.java
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUser_Roo_ToString.aj
roo> new persistent class jpa -name ~.domain.Payment -testAutomatically 
Created SRC_MAIN_JAVA/ru/test/testportal/domain/Payment.java
Created SRC_TEST_JAVA/ru/test/testportal/domain
Created SRC_TEST_JAVA/ru/test/testportal/domain/PaymentDataOnDemand.java
Created SRC_TEST_JAVA/ru/test/testportal/domain/PaymentIntegrationTest.java
Created SRC_MAIN_JAVA/ru/test/testportal/domain/Payment_Roo_Entity.aj
Created SRC_MAIN_JAVA/ru/test/testportal/domain/Payment_Roo_ToString.aj
Created SRC_MAIN_JAVA/ru/test/testportal/domain/Payment_Roo_Configurable.aj
Created SRC_TEST_JAVA/ru/test/testportal/domain/PaymentDataOnDemand_Roo_Configurable.aj
Created SRC_TEST_JAVA/ru/test/testportal/domain/PaymentDataOnDemand_Roo_DataOnDemand.aj
Created SRC_TEST_JAVA/ru/test/testportal/domain/PaymentIntegrationTest_Roo_IntegrationTest.aj
Created SRC_TEST_JAVA/ru/test/testportal/domain/PaymentIntegrationTest_Roo_Configurable.aj
roo> new persistent class jpa -name ~.domain.Service -testAutomatically 
Created SRC_MAIN_JAVA/ru/test/testportal/domain/Service.java
Created SRC_TEST_JAVA/ru/test/testportal/domain/ServiceDataOnDemand.java
Created SRC_TEST_JAVA/ru/test/testportal/domain/ServiceIntegrationTest.java
Created SRC_MAIN_JAVA/ru/test/testportal/domain/Service_Roo_Entity.aj
Created SRC_MAIN_JAVA/ru/test/testportal/domain/Service_Roo_ToString.aj
Created SRC_MAIN_JAVA/ru/test/testportal/domain/Service_Roo_Configurable.aj
Created SRC_TEST_JAVA/ru/test/testportal/domain/ServiceDataOnDemand_Roo_Configurable.aj
Created SRC_TEST_JAVA/ru/test/testportal/domain/ServiceDataOnDemand_Roo_DataOnDemand.aj
Created SRC_TEST_JAVA/ru/test/testportal/domain/ServiceIntegrationTest_Roo_IntegrationTest.aj
Created SRC_TEST_JAVA/ru/test/testportal/domain/ServiceIntegrationTest_Roo_Configurable.aj
roo> add field string -class ~.domain.Service -fieldName name -notNull -sizeMax 50
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Service.java
Created SRC_MAIN_JAVA/ru/test/testportal/domain/Service_Roo_JavaBean.aj
Managed SRC_TEST_JAVA/ru/test/testportal/domain/ServiceDataOnDemand_Roo_DataOnDemand.aj
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Service_Roo_ToString.aj
roo> add field string -class ~.domain.Service -fieldName description -sizeMax 500        
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Service.java
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Service_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Service_Roo_ToString.aj
roo> add field boolean -class ~.domain.Service -fieldName isEnabled -notNull 
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Service.java
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Service_Roo_JavaBean.aj
Managed SRC_TEST_JAVA/ru/test/testportal/domain/ServiceDataOnDemand_Roo_DataOnDemand.aj
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Service_Roo_ToString.aj
roo> add field string -class ~.domain.Service -fieldName logoName -notNull -sizeMax 200 
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Service.java
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Service_Roo_JavaBean.aj
Managed SRC_TEST_JAVA/ru/test/testportal/domain/ServiceDataOnDemand_Roo_DataOnDemand.aj
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Service_Roo_ToString.aj
roo> add field reference jpa -class ~.domain.Payment -fieldName service -type ~.domain.Service
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Payment.java
Created SRC_MAIN_JAVA/ru/test/testportal/domain/Payment_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Payment_Roo_ToString.aj
roo> add field reference jpa -class ~.domain.Payment -fieldName portalUser -type ~.domain.PortalUser
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Payment.java
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Payment_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Payment_Roo_ToString.aj
roo> add field number -class ~.domain.Payment -fieldName amount -type java.math.Decimal
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Payment.java
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Payment_Roo_JavaBean.aj
Managed SRC_TEST_JAVA/ru/test/testportal/domain/PaymentDataOnDemand_Roo_DataOnDemand.aj
Managed SRC_MAIN_JAVA/ru/test/testportal/domain/Payment_Roo_ToString.aj
roo> new controller automatic -name ~.web.PortalUserController -formBackingObject ~.domain.PortalUser
Created SRC_MAIN_JAVA/ru/test/testportal/web
Created SRC_MAIN_JAVA/ru/test/testportal/web/PortalUserController.java
Created SRC_MAIN_WEBAPP/WEB-INF
Created SRC_MAIN_WEBAPP/WEB-INF/testportal-servlet.xml
Created SRC_MAIN_JAVA/ru/test/testportal/web/PortalUserController_Roo_Controller.aj
Created SRC_MAIN_WEBAPP/images
Created SRC_MAIN_WEBAPP/images/banner-graphic.png
Created SRC_MAIN_WEBAPP/images/springsource-logo.png
Created SRC_MAIN_WEBAPP/styles
Created SRC_MAIN_WEBAPP/styles/roo.css
Created SRC_MAIN_WEBAPP/WEB-INF/jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/header.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/footer.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/includes.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/dataAccessFailure.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/resourceNotFound.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/uncaughtException.jsp
Created SRC_MAIN_WEBAPP/images/list.png
Created SRC_MAIN_WEBAPP/images/show.png
Created SRC_MAIN_WEBAPP/images/create.png
Created SRC_MAIN_WEBAPP/images/update.png
Created SRC_MAIN_WEBAPP/images/delete.png
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/portaluser
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/portaluser/list.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/portaluser/show.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/portaluser/create.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/menu.jsp
Managed SRC_MAIN_WEBAPP/WEB-INF/jsp/menu.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/portaluser/update.jsp
Managed SRC_MAIN_WEBAPP/WEB-INF/jsp/menu.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/urlrewrite.xml
Created SRC_MAIN_WEBAPP/WEB-INF/web.xml
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/index.jsp
Managed SRC_MAIN_WEBAPP/WEB-INF/web.xml
Managed ROOT/pom.xml
roo> new controller automatic -name ~.web.crud.ServiceController -formBackingObject ~.domain.Service 
Created SRC_MAIN_JAVA/ru/test/testportal/web/crud
Created SRC_MAIN_JAVA/ru/test/testportal/web/crud/ServiceController.java
Managed SRC_MAIN_WEBAPP/WEB-INF/web.xml
Managed ROOT/pom.xml
Created SRC_MAIN_JAVA/ru/test/testportal/web/crud/ServiceController_Roo_Controller.aj
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/service
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/service/list.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/service/show.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/service/create.jsp
Managed SRC_MAIN_WEBAPP/WEB-INF/jsp/menu.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/service/update.jsp
Managed SRC_MAIN_WEBAPP/WEB-INF/jsp/menu.jsp
roo> new controller automatic -name ~.web.crud.PaymentController -formBackingObject ~.domain.Payment
Created SRC_MAIN_JAVA/ru/test/testportal/web/crud/PaymentController.java
Managed SRC_MAIN_WEBAPP/WEB-INF/web.xml
Managed ROOT/pom.xml
Created SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUserEditor.java
Created SRC_MAIN_JAVA/ru/test/testportal/domain/ServiceEditor.java
Created SRC_MAIN_JAVA/ru/test/testportal/web/crud/PaymentController_Roo_Controller.aj
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/payment
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/payment/list.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/payment/show.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/payment/create.jsp
Managed SRC_MAIN_WEBAPP/WEB-INF/jsp/menu.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/payment/update.jsp
Managed SRC_MAIN_WEBAPP/WEB-INF/jsp/menu.jsp
Created SRC_MAIN_JAVA/ru/test/testportal/domain/PortalUserEditor_Roo_Editor.aj
Created SRC_MAIN_JAVA/ru/test/testportal/domain/ServiceEditor_Roo_Editor.aj
roo> configure logging -level DEBUG -package PROJECT 
Created SRC_MAIN_RESOURCES/META-INF/spring/log4j.properties
Managed SRC_MAIN_WEBAPP/WEB-INF/web.xml
roo> install security
Managed ROOT/pom.xml
Created SRC_MAIN_RESOURCES/META-INF/spring/applicationContext-security.xml
Created SRC_MAIN_WEBAPP/login.jsp
Managed SRC_MAIN_WEBAPP/WEB-INF/web.xml

В результате получаем вполне работающее веб-приложение.

Следующий этап – загрузить приложение в мое любимое IDE, а именно IntelliJ IDEA. Тут меня ждал первый подвох – текущая релизная версия 8.1 не поддерживает файлы .aj, которые активно используются в полученном проекте. Единственныый вариант – сказать IDEA, что это просто текстовые файлы. Все возможности по рефакторингу и кросс-ссылочности сразу пропадают. Более того, все методы, определенные в .aj и использованые в других местах (например, в контроллерах) считаются неопределенными. Что сводит все возможности инспекции этого IDE просто бесполезными. Ладно, можно попробовать 9.0 M1 под кодовым названием Maia.

В Maia все несколько лучше – файлы .aj все считаются файлами с кодом. Но методы, определенные в .aj файлах, по прежнему не считаются «правильными» методами. И при их использование IDEA показывает ошибку. Таким образом, приходится признать, что использование Spring Roo совместно с IDEA пока не представляется возможным.

Использование «родного» инструментария SpringSource Tool Suite не наделено всеми описанными проблемами, но это Eclipse, а значит лично мне пользоваться очень неудобно.

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

alik Development , , ,

  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.