Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата(jk1 @ 31.5.2012,  21:39)
Вызывает некоторые сомнения использование EJB для сайта, ведь E не зря означает "Enterprise". Хостинг придется искать с Application Server'ом

Можно в двух словах об отличиях Enterprise и обычного веб сайта.

Может быть я просто не правильно выразился.. в этом проекте я не пишу какой нибудь "сайт визитка", предполагается большая система, с высокой нагрузкой, которая постоянно будет развиваться.

Автор: AntonSaburov 1.6.2012, 14:51
Цитата(4epT @  1.6.2012,  10:16 Найти цитируемый пост)
Можно в двух словах об отличиях Enterprise и обычного веб сайта.

Здесь важно понимать. что 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: надеюсь проект учебный ;)

Автор: AntonSaburov 1.6.2012, 15:35
Цитата(4epT @  1.6.2012,  15:00 Найти цитируемый пост)
Планирую разворачивать на Glassfish...

Ну вполне пристойно.

Цитата(Старовъръ @  1.6.2012,  15:33 Найти цитируемый пост)
EJB как правило имеет смысл применять если нужны транзакции инициализируемые клиентами

Это не совсем так - EJB работает с аннотациями для транзакций и не на клиентском уровне подобно тому же Spring.

Касаемо XSLT - надо действительно четко решить  какую архитектуру UI будешь использовать. Например для простых страниц (без AJAX) для нескольких типов экранов - почему бы не попробовать. Мы такое делали.
Но если хочется повозиться с AJAX - JQuery или вообще GWT, ZK или еще что - то тут XSLT вряд ли имеет смысл использовать.

Автор: 4epT 1.6.2012, 15:52
Цитата

PS: надеюсь проект учебный ;) 


Данный проект никак не относиться к работе) занимаюсь им в свободное время, но проект не является учебным )

При использовании XSLT, никаких проблем с AJAX не испытываю, по крайней мере пока что ... Схема очень простая, посылаю запрос с параметром, какую часть мне достать, на сервере выполняются нужные действия и в ответ отдаю уже готовый HTML, после чего просто перетираю нужную область.

Насчет GWT задумывался... пугает его сложность и то что не умею на нем писать красивых решений. Может можете что то посоветовать по GWT ? в плане архитектуры.

Spring/Guice + POJOs посмотрю, спасибо!


Цитата

Это не совсем так - EJB работает с аннотациями для транзакций и не на клиентском уровне подобно тому же Spring.


можно немного разъяснить ? EJB транзакции работают на уровне СУБД ?

Hibertnate может работать в режиме транзакций ?

P.s. может есть по Spring/Guice + POJOs русскоязычная литература ?

Автор: AntonSaburov 1.6.2012, 18:42
Цитата(4epT @  1.6.2012,  15:52 Найти цитируемый пост)
можно немного разъяснить ? EJB транзакции работают на уровне СУБД ?

Здесь речь идет о том, что несколько запросов к СУБД можно "обренуть" транзакцией. Чаще всего это выглядит как один метод класса, внутри которого делается мнго запросов Hibernate (точнее JPA) и все эти запросы внутри одной транзакции. Причем начало этой транзакции грубо говоря совпадает с началом метода, а commit - с окончанием. Если же в процессе работы вылетает exception, то происходит автоматический rollback транзакции.

Автор: Старовъръ 1.6.2012, 22:31
Цитата
Это не совсем так - EJB работает с аннотациями для транзакций и не на клиентском уровне подобно тому же Spring.
Я неправильно выразился - говорил о том, что в EJB возможно делать вызовы к remote beans и это может происходить внутри транзакции. Со спрингом такое, думаю, не легко провернуть.
Цитата
Насчет GWT задумывался... пугает его сложность и то что не умею на нем писать красивых решений. Может можете что то посоветовать по GWT ? в плане архитектуры.
Если готов пожертвовать возможностью индексацией гуглом, то можешь попробовать, но это не тривиальный фреймворк. http://www.javatalks.ru/ftopic22893/ можешь найти обзор некоторых технологий, http://www.javatalks.ru/ftopic31109 обсуждаются разные подходы к построению веб приложений.

Автор: Vasay 1.6.2012, 23:23
Цитата(Старовъръ @  1.6.2012,  22:31 Найти цитируемый пост)
Если готов пожертвовать возможностью индексацией гуглом, то можешь попробовать, но это не тривиальный фреймворк


Индексация проблема не только GWT но и любого сайта с применением Ajax. Так, что 4epT будьте осторожны с его применением.

Кроме индексации есть серьезные проблемы с юзабилити - некорректная работа кнопок вперед/назад/открыть в новой вкладке/обновить страницу.

Невозможность добавить ссылку на конкретный контент в избранное или передать ее другу по ICQ/почте 

Автор: sivak 2.6.2012, 18:50
Цитата(AntonSaburov @  1.6.2012,  18:42 Найти цитируемый пост)
Здесь речь идет о том, что несколько запросов к СУБД можно "обренуть" транзакцией. Чаще всего это выглядит как один метод класса, внутри которого делается мнго запросов Hibernate (точнее JPA) и все эти запросы внутри одной транзакции. Причем начало этой транзакции грубо говоря совпадает с началом метода, а commit - с окончанием. Если же в процессе работы вылетает exception, то происходит автоматический rollback транзакции. 


Так тоже самое происходит как в спринге так и в EJB... на спринге я такое делал, на EJB еще не успел.

Автор: 4epT 2.6.2012, 18:53
Цитата(Старовъръ @  1.6.2012,  22:31 Найти цитируемый пост)
Если готов пожертвовать возможностью индексацией гуглом, то можешь попробовать, но это не тривиальный фреймворк.


GWT не индексируется ? Если не ошибаюсь, то большинство сервисов гугла, написаны на GWT...

Цитата(Vasay @  1.6.2012,  23:23 Найти цитируемый пост)
Кроме индексации есть серьезные проблемы с юзабилити - некорректная работа кнопок вперед/назад/открыть в новой вкладке/обновить страницу.

Невозможность добавить ссылку на конкретный контент в избранное или передать ее другу по ICQ/почте  


Спасибо большое, не подумал насчет данных недостатков. подгрузку контента через AJAX уберу ... на будущее так же запомню )

За ссылки большое спасибо, много интересного )

Автор: jk1 2.6.2012, 21:30
Цитата

GWT не индексируется ? Если не ошибаюсь, то большинство сервисов гугла, написаны на GWT...


В том-то и дело, что это сервисы. Какой смысл в индексации gmail, гуглодокументов, гуглопереводчика? 

Имхо очень верно сказали выше по треду, любой компонентный ajax-фреймворк начисто убьет индексацию, красивые урлы, кнопку back в браузере и т.д. И пользователи сайта Вам такого пренебрежения не простят, неудобный сайт никогда не станет популярным и высоконагруженным.  А раз нет нагрузки, то все рассуждения относительно EJB и преимуществ Glassfish теряют смысл сами собой.

Автор: 4epT 3.6.2012, 11:29
Что тогда можно выбрать в качесте средства для построения UI ? 

Как насчет JSF ?

Автор: Vasay 3.6.2012, 12:10
Цитата(4epT @  3.6.2012,  11:29 Найти цитируемый пост)
Как насчет JSF ?


JSF позволяет сделать более менее нормальный сайт, но только если Вы не будете применять *faces компоненты. 

Хотя, некоторые, неприятные моменты у JSF я встречал. Хотя, может, потому что я не очень хорошо в них разбираюсь. 

Автор: 4epT 3.6.2012, 12:18
Цитата(Vasay @  3.6.2012,  12:10 Найти цитируемый пост)
Хотя, некоторые, неприятные моменты у JSF я встречал.

Можно немного подробнее ?

Если применять JSF, то на сколько я понимаю получается что слой доступа к данным это EJB + Hibernate, JSF managed bean это контроллеры, а Facelets это view ?

Автор: Vasay 3.6.2012, 12:43
Цитата(4epT @  3.6.2012,  12:18 Найти цитируемый пост)
Можно немного подробнее ?


Я натыкался на странные проблемы связанных с соответствием 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
Цитата(4epT @  7.6.2012,  10:46 Найти цитируемый пост)
В таком случае будет ли работать индексация ? 


Нет.
И еще Вы получите вышеописанные проблемы с юзабилити. 

Цитата(4epT @  7.6.2012,  10:46 Найти цитируемый пост)
Мало того где то находил что гугл и яндекс научились индексировать GWT и аналоги.


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

Автор: 4epT 7.6.2012, 14:39
Как тогда у твитера работала индексация ? На сколько я знаю они раньше генерировали страницы на клиенте и только недавно вернулись к генерации на сервере.

Автор: Vasay 7.6.2012, 15:05
Цитата(4epT @  7.6.2012,  14:39 Найти цитируемый пост)
Как тогда у твитера работала индексация ? На сколько я знаю они раньше генерировали страницы на клиенте и только недавно вернулись к генерации на сервере.


Не знаю. Могли для ботов выдавать специальную страницу с текстом.

Автор: Stolzen 8.6.2012, 11:14
Цитата(Vasay @  2.6.2012,  00:23 Найти цитируемый пост)

Индексация проблема не только GWT но и любого сайта с применением Ajax. Так, что 4epT будьте осторожны с его применением.

Кроме индексации есть серьезные проблемы с юзабилити - некорректная работа кнопок вперед/назад/открыть в новой вкладке/обновить страницу.

Невозможность добавить ссылку на конкретный контент в избранное или передать ее другу по ICQ/почте  

В GWT все это решается с помощью https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsHistory. Насчет индексации, хотя, не скажу - сам лично не сталкивался, но вот прислать ссылку другу по почте вполне можно будет (она будет в виде page/#some/stuff)

Добавлено через 2 минуты и 56 секунд
Да, кстати, GWT еще может быть предпочтительнее потому, что много кода на клиенте выполняется, в отличие от того же ZK - последний хранит все дом-дерево в памяти, и, естественно, при большом количестве клиентов, приложение может слететь. 

Автор: Vasay 8.6.2012, 11:45
Цитата(Stolzen @  8.6.2012,  11:14 Найти цитируемый пост)
В GWT все это решается с помощью History. Насчет индексации, хотя, не скажу - сам лично не сталкивался, но вот прислать ссылку другу по почте вполне можно будет (она будет в виде page/#some/stuff)


Прикольно! Слышал, что в GWT есть такая возможность, но никогда в живую не видел. 


п.с. проблему с индексацией это не решит, пока боты не начнут активно разбирать JS.

Автор: CHEM_Eugene 8.6.2012, 14:13
Цитата(4epT @  1.6.2012,  15:52 Найти цитируемый пост)
Насчет GWT задумывался... пугает его сложность и то что не умею на нем писать красивых решений. Может можете что то посоветовать по GWT ? в плане архитектуры.

Полгода разрабатываю проект на 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
Спасибо всем)

Цитата(CHEM_Eugene @  8.6.2012,  14:13 Найти цитируемый пост)
Советую: Tomcat/Spring, HIbernate, JPA, GWT+GXT, mvp4g, google-gin. 


По поводу - Hibernate, JPA... Hibernate это уже ведь реализация JPA.

Попробую что то попробовать с данной связкой ) Спасибо!  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)