| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Выбор архитектуры проекта |
| Автор: 4epT 31.5.2012, 16:05 |
| Всем привет) Начинаю свой проект. Будет это веб сайт. Всегда хотел научиться писать приложения с красивой архитектурой... поэтому сейчас стал задумываться над архитектурой. Предполагается большая нагрузка как на базу так и на сервер. На данный момент используется: 1) БД - PostgreSQL 2) ORM - Hibernate 3) EJB 3.0 4) Servlet 5) XSLT 6) JSP Пункты 1, 2, 3 иду как отдельный модуль, что то вроде API. 4, 5, 6 это View, то есть делается запрос к сервлету, он вытягивает xsl шаблон и на основе какой то XML генерируется html который просто выгружается на страницу. Таким образом некоторые части страницы можно подгружать через ajax. Последняя часть, не очень нравиться ... трудоемко менять шаблоны, для каждого xsl пишется свой xml, и др. Покритикуйте пожалуйста данное решение и посоветуйте что нибудь ) |
| Автор: jk1 31.5.2012, 21:39 |
| Вызывает некоторые сомнения использование EJB для сайта, ведь E не зря означает "Enterprise". Хостинг придется искать с Application Server'ом |
| Автор: 4epT 1.6.2012, 10:16 | ||
Можно в двух словах об отличиях Enterprise и обычного веб сайта. Может быть я просто не правильно выразился.. в этом проекте я не пишу какой нибудь "сайт визитка", предполагается большая система, с высокой нагрузкой, которая постоянно будет развиваться. |
| Автор: AntonSaburov 1.6.2012, 14:51 |
Здесь важно понимать. что EJB 3.0 - это специальная технология написания, деплоя и запуска классов, для поддержки которой надо использовать ПО, которое соответствует спецификации Java EE 1.5. А наиболее известный хостинг Tomcat такого не умеет - ему надо давать дополнительные библиотеки - тот же OpenEJB. В принципе не проблема, но тем не менее. Или брать что-то более мощное - JBoss например. |
| Автор: 4epT 1.6.2012, 15:00 |
| Планирую разворачивать на Glassfish... тестирую на нем же, все прекрасно работает) |
| Автор: Старовъръ 1.6.2012, 15:33 |
| EJB как правило имеет смысл применять если нужны транзакции инициализируемые клиентами, что в твоем (и в остальных 99%) случаев без необходимости. Более легковесным вариантом будет все-таки Spring/Guice + POJOs, прочти книгу POJOs In Action для начала. XSLT трансформация тоже кажется лишней, удобней будет просто с помощью JQuery слать AJAX запросы и получать ответ в JSON формате. PS: надеюсь проект учебный ;) |
| Автор: 4epT 1.6.2012, 15:52 | ||||
Данный проект никак не относиться к работе) занимаюсь им в свободное время, но проект не является учебным ) При использовании XSLT, никаких проблем с AJAX не испытываю, по крайней мере пока что ... Схема очень простая, посылаю запрос с параметром, какую часть мне достать, на сервере выполняются нужные действия и в ответ отдаю уже готовый HTML, после чего просто перетираю нужную область. Насчет GWT задумывался... пугает его сложность и то что не умею на нем писать красивых решений. Может можете что то посоветовать по GWT ? в плане архитектуры. Spring/Guice + POJOs посмотрю, спасибо!
можно немного разъяснить ? EJB транзакции работают на уровне СУБД ? Hibertnate может работать в режиме транзакций ? P.s. может есть по Spring/Guice + POJOs русскоязычная литература ? |
| Автор: AntonSaburov 1.6.2012, 18:42 |
Здесь речь идет о том, что несколько запросов к СУБД можно "обренуть" транзакцией. Чаще всего это выглядит как один метод класса, внутри которого делается мнго запросов Hibernate (точнее JPA) и все эти запросы внутри одной транзакции. Причем начало этой транзакции грубо говоря совпадает с началом метода, а commit - с окончанием. Если же в процессе работы вылетает exception, то происходит автоматический rollback транзакции. |
| Автор: Старовъръ 1.6.2012, 22:31 | ||||
|
| Автор: Vasay 1.6.2012, 23:23 | ||
Индексация проблема не только GWT но и любого сайта с применением Ajax. Так, что 4epT будьте осторожны с его применением. Кроме индексации есть серьезные проблемы с юзабилити - некорректная работа кнопок вперед/назад/открыть в новой вкладке/обновить страницу. Невозможность добавить ссылку на конкретный контент в избранное или передать ее другу по ICQ/почте |
| Автор: sivak 2.6.2012, 18:50 | ||
Так тоже самое происходит как в спринге так и в EJB... на спринге я такое делал, на EJB еще не успел. |
| Автор: 4epT 2.6.2012, 18:53 | ||||
GWT не индексируется ? Если не ошибаюсь, то большинство сервисов гугла, написаны на GWT...
Спасибо большое, не подумал насчет данных недостатков. подгрузку контента через AJAX уберу ... на будущее так же запомню ) За ссылки большое спасибо, много интересного ) |
| Автор: jk1 2.6.2012, 21:30 | ||
В том-то и дело, что это сервисы. Какой смысл в индексации gmail, гуглодокументов, гуглопереводчика? Имхо очень верно сказали выше по треду, любой компонентный ajax-фреймворк начисто убьет индексацию, красивые урлы, кнопку back в браузере и т.д. И пользователи сайта Вам такого пренебрежения не простят, неудобный сайт никогда не станет популярным и высоконагруженным. А раз нет нагрузки, то все рассуждения относительно EJB и преимуществ Glassfish теряют смысл сами собой. |
| Автор: 4epT 3.6.2012, 11:29 |
| Что тогда можно выбрать в качесте средства для построения UI ? Как насчет JSF ? |
| Автор: Vasay 3.6.2012, 12:10 |
JSF позволяет сделать более менее нормальный сайт, но только если Вы не будете применять *faces компоненты. Хотя, некоторые, неприятные моменты у JSF я встречал. Хотя, может, потому что я не очень хорошо в них разбираюсь. |
| Автор: 4epT 3.6.2012, 12:18 |
Можно немного подробнее ? Если применять JSF, то на сколько я понимаю получается что слой доступа к данным это EJB + Hibernate, JSF managed bean это контроллеры, а Facelets это view ? |
| Автор: Vasay 3.6.2012, 12:43 |
Я натыкался на странные проблемы связанных с соответствием URL контенту. Когда работаешь с сайтом в 2х вкладках браузера - например: прошелся в одной вкладке по страницам стр1->стр2 , потом во второй стр3->стр4. Берешь первую вкладку, нажимаешь кнопку "назад" и оказываешься вместо стр1 на стр3. Но, вероятно, я что-то не так сделал или настроил (хотя точно такие же касяки я встречал в некоторых приложениях на JSF). |
| Автор: 4epT 7.6.2012, 10:46 |
| Хочу обсудить еще один подход ... Задумался над генерацией контента на клиенте... К примеру используя шаблоны mustache и hogan.js для компиляции шаблонов в html на основе json данных. Таким образом Часть EJB + Hibernate отдает в Servlet/JSF managed bean данные а они уже в свою очередь отдают json в ответе, и на клиенте происходит генерация контента. Снизиться нагрузка на сервера, скорость работы должна повыситься ... В таком случае будет ли работать индексация ? Мало того где то находил что гугл и яндекс научились индексировать GWT и аналоги. И на сколько приемлем данный подход ? |
| Автор: Vasay 7.6.2012, 11:31 | ||
Нет. И еще Вы получите вышеописанные проблемы с юзабилити.
JS они разбирают уже давно. Но в целях борьбы с дорами и фишенгом. Качественной индексации JS сайтов, я пока не видел. |
| Автор: 4epT 7.6.2012, 14:39 |
| Как тогда у твитера работала индексация ? На сколько я знаю они раньше генерировали страницы на клиенте и только недавно вернулись к генерации на сервере. |
| Автор: Vasay 7.6.2012, 15:05 | ||
Не знаю. Могли для ботов выдавать специальную страницу с текстом. |
| Автор: Stolzen 8.6.2012, 11:14 | ||
В GWT все это решается с помощью https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsHistory. Насчет индексации, хотя, не скажу - сам лично не сталкивался, но вот прислать ссылку другу по почте вполне можно будет (она будет в виде page/#some/stuff) Добавлено через 2 минуты и 56 секунд Да, кстати, GWT еще может быть предпочтительнее потому, что много кода на клиенте выполняется, в отличие от того же ZK - последний хранит все дом-дерево в памяти, и, естественно, при большом количестве клиентов, приложение может слететь. |
| Автор: Vasay 8.6.2012, 11:45 | ||
Прикольно! Слышал, что в GWT есть такая возможность, но никогда в живую не видел. п.с. проблему с индексацией это не решит, пока боты не начнут активно разбирать JS. |
| Автор: CHEM_Eugene 8.6.2012, 14:13 | ||
Полгода разрабатываю проект на GWT. Ранее с GWT не был знаком. Сложность - минимальна, фан - максимален по сравнению со всякими mvc, jsp, xslt и прочей хер..ей. Советую: Tomcat/Spring, HIbernate, JPA, GWT+GXT, mvp4g, google-gin. Сам бы хотел еще попробовать JBoss/JavaEE+GWT и развернуть всё это в OpenShift По поводу GWT: если у вас не превосходное знание JS и кроссбраузерной валидной верстки, то GWT то что надо. Сэкономите вагон времени. Если знаете Swing, то 10 вагонов. Особенно рекомендую употреблять вместе с GXT или SmartGWT. |
| Автор: 4epT 9.6.2012, 13:30 | ||
Спасибо всем)
По поводу - Hibernate, JPA... Hibernate это уже ведь реализация JPA. Попробую что то попробовать с данной связкой ) Спасибо! |