Перехожу с .Net на Java, возникает масса вопросов....
Например: архитектура ВЕБ-приложений для .NET с которыми я всегда работал выглядела примерно следующим образом:
Сервисный слой — объекты для вызова хранимых процедур (ХП) из БД, кроме того содержат интерфейсы сущностей из БД, слой осуществляет обработку результата выполнения ХП, если есть необходимость то осуществлял маппинг. Вся бизнес-логика реализована на сервере БД и вызывается сервисным слоем.
Сервисный слой также решал проблемы при одновременном обновлении, а точнее обновлении "устаревших" данных, выдавая нужное исключение
Ну и UI, который "общался" с БД посредством сервисного слоя.
Вся система допускала масштабирование на кластере.
-----------------------------------------------------------
Столкнувшись с Java и иже с ним (EJB,Hibernate и проч.) в упор не понимаю зачем они нужны??!
Часто встречаю использование хибернейта в проекте — в итоге получается, что обновление данных происходит в вызывающем java коде, который загружает запись (объект), изменяет поле и сохраняет объект (запись) в БД.
Это все приводит к тому, что при клике на пункт меню в веб-приложении происходит почти 40 (!!!) обращений к базе (и это рабочая система!, в этом проекте нет ни одной хранимой процедуры!)
Ведь хп были придуманы именно для того, чтобы не было проблем для вызывающего кода, чтобы упростить работу с БД. В итоге получается, что мы идем в обратную сторону, т.к. нам уже сложно писать хранимки и работать с базой?!
При этом утверждается, что хибернейт весьма производителен. Не верю! 40 нескомпилированных запросов не могут быть производительными. Я не говорю о тупости разработчиков, там действительно сделать по-другому через хибернейт очень сложно, но можно написать одну хранимую процедуру.
Можно возразить, что хиберней удобен для маппинга и можно заставить вызывать его те же хранимки. Итого получится — сервисный слой "раздваивается".
О EJB — много читал, и придумал лишь одно применение (но весьма сомнительное) — "толстый" (в смысле обычное GUI или апплет, короче не WEB) клиент, но никак не WEB. Объясните — в каких случаях он применим? Как я понял он, кроме всего прочего, заменяет сервисный слой, но мне с трудом верится, что обойдется без ХП, в итоге — ... в итоге чушь.
Или я чего-то не понимаю? Заранее благодарен за ответ.