Как стать автором
Обновить

Комментарии 52

Спасибо за статью, узнал несколько новых интересных штук…
Пожалуйста )
Я рад, если статья была полезной.
А где собственно валидация ModelAttribute и редактирование данных? Без них подобных примеров в интернете тоннами.
В статье я делаю упор на совместный запуск кучи кода. Я нашёл лишь пару вменяемых туториалов на английском, которые в одном посте учили, как подружить MVC, Security и Hibernate.

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

Можете пример считать ступенькой к изучению официальных мануалов по технологиям, в которых всё описано уже детально.
Про это написано как минимум в трех книгах которые я читал к примеру в
Spring in Action
Spring Enterprise Recipes
Pro Spring 2.5

Плюс есть такая штука как Pet Clinic и собственно Reference. Так что увы ничего нового или оригинального чего нет в интернете я тут не вижу. А вот отсутствие валидации и обновления и редактирования данных увы вижу.
Ок, я готов услышать ваши пожелания по тематике второй части данной статьи.
Валидация, редактирование данных.

Напишу пост, будем обсуждать.

Ну и чуть-чуть не в тему.
На хабре очень удобно писать статьи (мне нравится редактор и подход к публикации постов, аудитория), но имхо конструктивных комментариев по сабжу больше можно услышать всё-таки в тематических комьюнити.
Как я уже писал это: валидация данных, редактирование данных, редактирование малого объема данных (это где в форме отображаются два поля из десяти), использование REST, реализация своего UserDetailsService далеко не всегда подходит стандартный источник данных, использование GenericDAO, что такое Transaction propagation и зачем оно нужно. Достаточно? :]

PS Если что я в свое время писал как сделать свое представление в Spring и использование ModelAttribute при редактировании.
А почему бы нам не использовать Spring Roo, который избавит нас от нудного написание DAO, Контроллеров, сущностей?
Где-то в ru_java я прочитал рекомендуемый к использованию в веб стек технологий:
Core Java (I/O, Collections, Threads),
Spring 3 (MVC, Security),
JPA на базе Hibernate,
Freemarker/JSP.

С ним согласен, от него и пляшу. Если вы расскажете преимущества использования Roo, я охотно поменяю свою позицию.
Ну, вероятно тогда roo просто не существовал ))
По крайней мере, вероятно вам стоит о нем почитать.
Там, конечно, к core java прибавляется aspectJ, но ИМХО это не криминал.
Прежде чем так писать неплохобы почитать что такое Roo.
Собственно Roo никак не относится к тому стеку что вы описали. Да и вообще это не технология.
Это удобное скриптовое описание проекта.
Одной строчкой описываете вашу ентити, затем по строчке на каждое поле.
В результате генерится проект с объектами, что убирает нудное начальное описание всего.
Также генерится по желанию конфиг хибера для доступа к БД.
Ну и скаффолдинг никто не отменял. Все очень удобно.
А потом получившуюся болванку можно уже руками дописывать до нужного стостояния.
И что самое интересное — все что вы допишете руками подхватится Roo…
Т.е. если через какое-то время вам понадобится еще одна ентити например, то вы просто в консоли Roo наберете команду создать ентити и все…
В общем это скриптовый инструмент управления проектом… причем очень толковый и удобный.
Который не заменяет что-то, а дополняет существующие инструменты.

Единственно что расстраивает, это то, что он еще версии 1. Т.е. он очень активно развивается и меняется. А это непозволяет пока его юзать в продакшене.
В таком случае Roo — это инструмент, к которому следует присмотреться.

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

Спасибо вам за обстоятельный комментарий.
«офтопик»
Начинающим конечно надо все руками делать… но есть один ньюанс.
Сейчас, для бизнеса, все большую роль играет так назваемый «тайм ту продакт».
Т.е. не так важно качество как время его запуска в производство.
Отсюда столько генераторов всего что только можно…
и в этих условиях многие начинающие разработчики просто непонимают что делают.
Они научились запускать генераторы и гуевые дизайнеры… и для получения результата им больше ничего ненадо… а бизнес поддерживает это монетой…
А потом мы удивляемся, что 4-х процессорный сервак с 16 гигами памяти ложится от 100 пользователей…
В общем грустно это… думаю время настоящих джедаев потихоньку проходит…
А как же всякие ERP, биллинг-системы? Джедаи пока-что нужны. Ну а про копроэкономику и её последствия в сети уже написали целые трактаты.
Думаю надо добавить, что кроме автоматизации написания скучных сущностей и контроллеров, Roo еще умеет генерировать файндеры — методы, которые позволяют искать что-то по параметрам. И уж эти файндерыгенерируются просто отлично, причем очень гибко.
И еще Roo позволяет не думать о том, как работает база данных — все сущности нашей программы автоматически генерируются в нашей базе, что тоже весьма удобно (ИМХО, конечно)
Ну, уже 1.1 ))
В нем добавили еще такой крутой штук, как реверс инжиниринг базы данных.
А значит можно разрабатывать с уже готовой базой )
Соглашусь, сейчас в большинстве случаев очень критична гибкость на старте проекта, когда сам не понимаешь, что должно получиться в итоге (прототипирование). А вот уже когда удачная концепция нащупана (обычно это сопровождается ростом нагрузки), пора приниматься за оптимизацию. На этом этапе гибкости требуется меньше, архитектура становится более монолитная (заточенная под конкретные задачи). Думаю, это типичный цикл для приложений.
К примеру потому что Roo очень активно использует аспекты как результат то что он генерит это кхм сильное.
А мне удобно с ним работать и аспекты его не так уж и плохи, а уж генерация файндеров — это вообще что-то потрясающее.
Ну вкус и цвет фломастеры разные ;) Шибко много их там с моей точки зрения просто.
Ну так никто не мешает сделать push-in рефакторинг, ни одного аспекта не останется
правда и ру работать перестанет.
но можно сбэкапиться на всякий
Спасибо! И поддержу изпользования Roo. По сути будет тоже самое как у Вас, но многое он Вам сгенерит сам.
Это не еще одна технология, а метод генерации классов и связи между ними
Нужно где-то прописывать сервисы и дао, чтобы спринг их нашел? Или он автоматом знает, что в пакете services или dao нужно искать классы для включения их в IoC движок?
в файле root-context.xml
<context:component-scan base-package="net.schastny.contactmanager.dao"/>
<context:component-scan base-package="net.schastny.contactmanager.service"/>


Ну а в классах:
@Component

или

@Service

Не нашел использование аннотации Component. Как подхватится ContactDAO и его реализация ContactDAOImpl в сервисе ContactServiceImpl?
Тонны xml конфигов, помы, мавены, хуявены, аннотации, мапингы, какие-то слои, DAO, сервисы, 3 фреймворка, отдельная система логирования, которую опять настраивать. Плюс сборка проекта мавеном и многочисленные компиляции. Это ад и чистилище для нормального веб-разработчика.
А ну и мануальчик на несколько листов А4 со скриншотиками и 11 пунктами для тупейшего веб-приложения, которое пишется, используя правильные для веб-разработки инструменты, за 10 минут.

Зачем писать веб-приложения на Java?

<_valexey_> пока скачаешь одну библиотеку, пока другую, пока их xml конфигом на полметра склеишь, пока маппинг для hibernate настроишь, пока базу нарисуешь, пока веб-сервисы поднимешь
<_valexey_> вроде и hello world пишешь, а уже две недели прошло и всем кажется, что это учетная система для малого бизнеса

© ibash.org.ru/quote.php?id=13399

А ну и ещё кто-то умный сказал предназначение Java:
Java is a DSL for converting large XML files into Stack Traces.


Всё так и есть, как вы сказали.
Велкам ту зе ентерпрайз-ворлд. Ты прям как в первый раз это увидел :)
Мне так никто и не рассказал сакрального смысла понятия«ынтерпрайз» :(
Быть может, «ынтерпрайз» — это когда делаешь простейшее приложение несколько месяцев и потом берешь за это приложение кучу денег?
В первую очередь это действительно долгая жизнь приложения, большое количество кода и большое количество программистов. К примеру Spring за счет слабой связности позволяет без каких либо серьезных последствий добавлять функционал и осуществлять рефакторинг приложения.
Поэтому сайтеги никто на javaEE практически не делает
А чем вас не устаривает Maven? Что вы предлагаете в альтернативу? Как по мне Maven это хорошее решение, когда проект вырастает из хомпаги… Или когда работаете в команде. Все пытаюстся его повторить — для питона, пхп, руби, но я еще не видел удачных решений.

Чем вам не нравятся аннотации? Опять же в джаного они тоже появился, потому что это удобно. Очень удобная штука как замена XML конфигов. Так что тут вы тоже не правы.

Всё остальное это EE, но это не означает, что на Java нельзя сделать хорошую платформу для удобной и простой разработки. Например, я сейчас этим занимаюсь на базе Tapestry 5 (отличный веб-фреймворк, но нужно кое-что допилить) делаю простую и удобную платформу, где нет кучи XML конфигов и прочего J2EE оверхеда.
вот поэтому я и люблю SpringRoo
Все то же самое делается в двадцать строк ))
А отальное генерится автоматически )
В идеале веб разработчику нужно иметь инструмент, где для создания сайта пишем всего одну строку: «Сайт!».
Остальное генерится автоматически.

Хотим магазин с интеграцией в фейсбуке, пишем: «Сайт! Интеграция: фейсбук.»

Такое время придёт, и Spring Roo, в котором для создания приложения нужно аж двадцать строк, объявят вне игры.

Еще одна причина, почему многие остаются на PHP. Тут у нас поле не паханое, есть куда направить творческие и интелектуальные ресурсы…
Совсем не понятно, что вы хотели сказать )
На Java не надо писать веб-сайты. На нем надо писать сложные веб-приложения, тогда и будет стрелять. Иначе же использование java выливается в попытку БЕЛАЗом перевозить тачку песка.
Чего такого сложного должно быть в веб-приложении, чтобы выбрать Java?
Сложная и длинная бизнес-логика. К примеру внутренняя система автоматизации предприятия типа SAP. Java заточена именно под такие большие программные комплексы.
Я бы в пример ещё валидацию через JSR 303 прикрутил для полноты картины.
Хорошо. В следующем посте рассмотрю валидацию и редактирование данных, может быть использование Roo. Хотя это наверно должно быть два разных топика.

Чего на ваш взгляд ещё не хватает, что можно было бы дописать во второй части?
Спасибо за статью, только файлы не все открываются.
моя ошибка, все открывается. Автору спасибо!
великолепно! большое дело сделали, спасибо!
А почему javax.persistence- аннотации использованы? Это альтернатива ...hbm.xml-файлам?
Хибернейт выступает в качестве JPA провайдера. Не понравится хибер, можно заменить на другую библиотеку, реализующую Java Persistence API.
В концах jsp страниц какие-то странные фрагменты, похоже на запакованный javascript. Малварь?
Спасибо, убрал.
И спустя годы ваш пост помогает в освоении этой связки :)
У меня тут есть 2 места где посвечивает красным и никак не могу решить проблему:
1) файл «contact.jsp» строка "/logout" />">" где подсвечивает красным "/logout"
2) файл «login.jsp» строка "/index" />">">" где подсвечивает красным "/index"
Кто знает как решить проблему?

И еще: папка «resources» должна быть в папке «WEB-INF» или в папке «main»?
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.