Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Модульная структура сайта


Автор: Уфф 25.1.2010, 18:57
Здравствуйте,

Подскажите пожалуйста с какой стороны подойти к модульной разработке сайта в J2EE?

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

Какая должна быть структура всей логики приложения? 
Кто имеет опыт или просто может развить данную тему, плиз посоветуйте

Технологии не важны, предложите что считаете лучшим/удобный лично с вашей точки срения
если не сложно на расскажите о самой структуре.

Спасибо

Автор: MaxPayneC 25.1.2010, 21:58
Обратите внимание на фреймворки Struts 2 и JSF. Общая архитектура сайта будет представлять из себя:

Бины - модель, основные сущности вашего сайта (такие как новость, сообщение, пользователь и т.п.)
Action-ы Struts - контроллер, занимаются обработкой запроса пользователя и подготовка данных для представления (view).
JSPшки - представление, собственно рисуют хтмл-код, который увидит пользователь.

Более подробно почитайте тут:
http://ru.wikipedia.org/wiki/MVC
http://struts.apache.org/
http://java.sun.com/javaee/javaserverfaces/ (по поводу этой технологии подробностей рассказать не могу, не приходилось работать с ней).

Автор: garbuz 26.1.2010, 00:28
Тут не все так просто как может казаться.

Если пользоваться готовым фрэймворком, типа стратса или спринга, то все равно постоянно придется пилить все приложение - тут кусочек, там кусочек, тут код переписать, там конфиг подправить. Со временем приложение разрастается, и в голове уже трудно удержать все моменты.
Что-то подобное реализовано в порталах - WebSphere Portal, Liferay. Но! WebSphere безумно дорогая, LifeRay был сыроват, не знаю как сейчас. Про другие реализации порталов сказать не могу.
Есть еще такая штука как OSGi, вот там действительно модельная архитектура, но не знаю, как это подойдет для создания сайта, скорее это немного для других целей, хотя кто знает.

По-моему самый удачный вариант, это сесть и продумать архитектуру и структуру сайта от начала и до конца, а затем ее реализовывать. Понятное дело, что с самого начала все правильно не выйдет, но будет какая-то общая линия, которой можно придерживаться.
Смотреть естественно надо в сторону MVC, как уже сказано выше.

Автор: Kangaroo 26.1.2010, 03:21
Начать можно с прочтения http://forum.vingrad.ru/topic-124877/unread-1.html, расписана работа по созданию такой системы с нуля. 

Действие начинается с 3-4 страницы темы.

Автор: afon 26.1.2010, 13:01
А можно немного отвелеченный вопрос?
Это вы сами себе придумали задачу, чтобы легче было жить врамках разработки проекта, или это именно задача вашего проекта, то есть - главная задача? Просто праздный инетерес.

Автор: Уфф 28.1.2010, 19:19
Спасибо всем откликнувшимся!
 Я сделал достаточно глубокий поиск, и результат не сильно обрадовал(хотя естевственно могу ошибаться так как каждый исчет по своему). Если смотреть со стороны Джава, то описание более-менее подробной схемы по построению веб приложения с модульной структурой вообще нет. На PHP кстати такие присутсвуют и в достаточном количестве.
2MaxPayneC  ваше предложение, я рассматривал и что то подобное искал, но склоняюсь в сторону Spring или Wicket так как читал достаочно много минусов в сторону JSF – например то что она достаточно «тяжелая и медленная», хотя это понятие относительное. По Стратсу, так это например то что его разработчики все больше смотрят в торону JSF а Struts 2 который как я понимаю являеться более сильным фреймворком, есть очень тяжелым и по этому фреймворку очень мало документации..

2garbuz  Если пользоваться готовым фрэймворком, типа стратса или спринга, то все равно постоянно придется пилить все приложение - тут кусочек, там кусочек, тут код переписать, там конфиг подправить. Со временем приложение разрастается, и в голове уже трудно удержать все моменты.

Вот именно по этому поводу я и прошу совета хотя бы пролить приблизительный свет на создание полноценной модульной архитектуры. На многих форумах как например javatalks.ru есть целые разделы под архитектуру но там никого то ли она не интересует толи она всем известна, так как опять же темы не поднимаються.. OSGi это ИМХО не то в плане что хотелось бы видеть четкую структуру по типу построения модулей для вебсайта, хотя если там все модульно, то рассмотреть следует обязательно

2Kangaroo
 Тему-сериал я прочитал, ведь перед тем как писать форум нужно тщательно проштудировать, правда не до самого конца и я там не увидел модульности.. там просто рассматриваеться построение веб приложения, что называеться только для того чтобы познакомить с J2EE, если не прав – поправте..

2afon – это задача которую я хочу реализовать, для этого и задаю вопрос здесь чтобы услышать любые мнения по этому поводу и привлечь дискуссию в это «направление»

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

Автор: COVD 28.1.2010, 20:45
Уфф!

Поскольку практические рекомендации вроде иссякли, то я пофантазирую на эту интересную тему.

Зачем нужна модульность? Это возможность модифицировать/удалять/добавлять части приложения с минимальным риском сломать все приложение. Для серверной части веб-приложения актуально также иметь возможность модификаций "на лету", потому что сервера имеют обыкновение работать в режиме 24/7 и обслуживают одновременно много клиентов.

Когда веб-приложения были преимущественно статическими, т.е. отдавали клиенту статические ресурсы (файлы html, js, ...), вопрос модульности вроде не возникал. Можно в любой момент поменять html файл на сервере, и клиент в следующем запросе получит новую версию. Причем, заметьте, эти файлы могли лежать физически на разных серверах. Друг с другом они никак не общались. Проблема модификации тут только в редактировании ссылок. Такие приложения уже вполне "модульны" - и модифицируются "на лету" и взаимовлияние компонентов минимально.

Стали делать приложения с динамическими ресурсами. Серверное приложение стало не набором статических файлов, разбросанных по серверам, а программой, работающей на сервере в партнерстве с веб-сервером. Очень показательна, кстати, фраза из цитируемого здесь "сериала":  
Цитата

... для начала надо вообще забыть на время про слово веб. Это важно. То есть делаем просто standalone приложение. В нем будет один главный класс - точка входа во всю прогу.

А единое приложение работает быстро и решает сложные задачи, но уже не имеет преимуществ примитивного веба, где любое взаимодействие основано на http запрос-ответ. Изменить что-то в работающей программе равносильно пересадке органа у живого организма, когда приходится все сосудики соединять и одновременно следить, чтобы организм не помер.  И этим занимается OSGi. Показывает, как должен быть устроен организм, чтобы это было возможно.

На мой взгляд, модульность лучше реализовывать естественным путем, т.е на уровне ссылок, на концепции сервисов, распределенного приложения. Приложение может состоять из набора мелких, не сильно зависимых отдельных приложений, которые функционируют как сервисы, т.е. каждое приложение выполняет одну задачу. Модификация такого компонента примерно так же легка как замена html файла.
Более того, концепция Cloud computing тоже подталкивает к проектированию системы в виде набора независимых компонент-приложений. GoogleAppEngine - яркий тому пример.  

Автор: MaxPayneC 28.1.2010, 20:57
Я имел в виду Struts 2, и на мой взгляд, документации по нему достаточно, да и гугл никто не отменял smile По поводу Spring сказать ничего не могу конкретного, т.к. опять же не приходилось использовать. Говорите, стратс 2 "тяжелый"... хм. В чем конкретно это выражается? Разумеется, у него есть недостатки, но из обнаруженных мной все в принципе терпимы.

Автор: afon 29.1.2010, 17:37
В общем подумал и пришел к решению

Цитата
Тоесть есть задача создать некий движек сайта на который можно в дальнейшем дописывать независимые модули по типу Новости, каталог, авторизация и т.д.

Я бы (именно я бы) взял Spring, hibernate, jsp+jstl и сделал некую рабочую модель своего j2ee сайта. Потом бы написал что-то вроде плагинов, которые бы описывали стандартный подход в добавлении модуля: например, описывали бы спецификации 
- добавления страниц
- добавления url-ов
- доступа к бд
- доступа к набору предустановленных объектов

Есть в этом всем одно но. Описанный концепт сильно напоминает велосипед под названием CMS. Может стоит взять готовый и свободный, аля http://java-source.net/open-source/content-managment-systems из этого списка, разобраться, и строить свой модульный сайт на них? Отпадает целый кусок работы разработывать свою архитектуру, свою спецификацию и реализацию плагинов...

Автор: Уфф 2.2.2010, 16:52
2COVD
Спасибо за такой большой ответ. Увы, но OSGi пока не встречал, нужно будет посмотреть, хотя поверхносная информация
показывает что это немного не то что мне бы хотелось.. более детально я могу бы ответить когда посмотрю детальней.

насчет того как можно было бы организовать модульность, то то что вы говорите конечно же подходит(я об концепции сервисов),
но немогли бы вы просветить более детально? тоесть что и как по вашему должно взаимодействовать..
Что я имею ввиду, я бы хотел увидеть более конкретную модель архитектуры веб приложения. Тоесть например самый базовый набор:

Есть индекс файл, класс конфига и папка modules. Каждый модуль имеет название такое же как и название папки в modules
Каждая папка сожержит свой файл с которого начинаеться анализ параметров каждого модуля.
Файл индекса, обрабатывает логику в которой указано как парсить папки в modules и работать с модулями.

2MaxPayneC
Разрешите пропустить реплики по вашему вопросу, потому как это все рискует перерости в холивар по типу cons and pros фреймворков,
а мне хочеться обсудить вариант формирования архитектуры веб приложения

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

Насчет велосипеда не согласен, хочеться создать свою систему которую потом разрабатывать в том направлении которое бы оптимально подходило.. а парсить чей то код, это ИМХО тяжелее чем писать самому..  хотя конечно же буду рассматривать структуры этих CMS

Автор: Vasay 3.2.2010, 03:21
Уфф, 

Цитата

Что я имею ввиду, я бы хотел увидеть более конкретную модель архитектуры веб приложения. Тоесть например самый базовый набор:

Есть индекс файл, класс конфига и папка modules. Каждый модуль имеет название такое же как и название папки в modules
Каждая папка сожержит свой файл с которого начинаеться анализ параметров каждого модуля.
Файл индекса, обрабатывает логику в которой указано как парсить папки в modules и работать с модулями.


Вы мыслите штампами PHP. Java - это другая вселенная с другими законами.

PHP язык скриптов. Скрипт рождается при http запросе к серверу и умирает после завершения его обработки. Новый запрос - новое рождение и новая смерть. 

Java приложение загружается один раз. Возможно создать объект, который существовал бы в течении всего времени жизни приложения в единственном экземпляре ( singleton bean), или же объект который бы жил в единственном экземпляре в рамках одной сессии ( session bean )


Вследствии вышесказанного, вопрос модульности так просто, как в PHP решить нельзя. 

В PHP кинул папку с плагином в нужное место - все равно при следующем запросе все создается заново и код плагина будет задействован. Стал не нужен плагин - удалил папку, при следующем запросе он уже не будет работать.
С одной стороны - все просто, с другой - ужасно. Приходится при каждом запросе заново создавать все объекты, инициализировать их... затем нужно куда-то сохранить данные, которые могут потребоваться при следующем запросе.... все это безумно жрет ресурсы. А потом люди удивляются, почему wordpress с плагинами при весьма небольшой посещаемости  кладет на лопатки весьма мощные сервера.  


В Java приложение с плагинами сложнее, нужно, например, организовать грамотную загрузку и выгрузку плагина.
Однако, создание модульных приложений на Java вполне возможна - порталы тому вполне удачный пример.

Автор: Ares4322 3.2.2010, 16:31
Я сейчас как раз задался вопросом разработки сайта-обертки для веб-приложения. Функционалность стандарная: новости, форум, регистрация, личный кабинет, ну и непосредственно веб приложение(вернее ссылка не него). Писать с нуля честно говоря не очень хочется, так как глубоко веб-фреймворки я пока не знаю (конечно, разбираться в них буду, но просто пока нет на это времени).Так вот я решил посмотреть что есть на рынке Java CMS. Залез сюда - http://java-source.net/open-source/content-managment-systems. 
Выбирал по критериям:
-поддержка БД(причем для меня PostgreSQL)
-именно CMS, а не DMS и тд
-проект жив)))
В итоге вот список:
-contelligent ( http://www.contelligent.com/contell/cms/c1web/contelligent/site/index.html )
-alfresco ( http://www.alfresco.com/ )
-nuxeo ( http://www.nuxeo.org )
-jadasite ( http://www.jadasite.com/ )
-Jahia ( http://www.jahia.com/jahia/Jahia )
-japsportal ( http://www.japsportal.org/jAPSPortal/ )
-dotcms ( http://www.dotcms.org/)
Поставил dotCMS. Разбираюсь...

Добавлено через 6 минут и 36 секунд
Единственное, что не знаю точно, так это то, можно ли использовать эти CMS с закрытым приложением, так как большинство из них под GPL. Если LGPL(ну и конечно BDS Apache...), то точно можно, а под GPL не уверен

Добавлено через 12 минут и 35 секунд
Соответственно, если откинуть GPL, то получится:
-contelligent ( http://www.contelligent.com/contell/cms/c1...site/index.html )
-alfresco ( http://www.alfresco.com/ )
-nuxeo ( http://www.nuxeo.org )

Автор: Vasay 3.2.2010, 17:12
Ares4322, 

Я задавался вопросом выбора Java CMS некоторое время назад.

Мое мнение о том что попробовал:
Наиболее достойные внимания продукты:
OpenCMS (старый, хорошо документированный продукт. Но не все меня устроило)
Magnolia  (если бы free версия была бы не так порезана)

Наиболее перспективный:
DotCMS (но пока довольно неудобный в использовании, в новой версии обещают новый админ интерфейс)

Не понравилось:
Jahia (нормальный web сайт на ней не сделать) 
JetSpeed 2 (не пригоден для создания web сайтов)

Отдельно стоит выделить LifeRay - портал, вполне пригодный для создания web сайтов, но доработок требует и не малых.



Автор: Ares4322 3.2.2010, 17:25
Но я понял, что ни в OpenCMS , ни в Magnolia нет поддержки БД. Там хранилище - JCR. А dotCMS под GPL, то есть со своим приложением закрытым его не свяжешь

Автор: Vasay 3.2.2010, 17:46
Ares4322, 
 
В Magnolia и OpenCMS можно использовать БД,

С лицензиями я не особо разбираюсь, но по-моему все зависит от реализации связки - если вы как часть кода своего приложения используете код приложение под GPL - то ваше приложение должно быть открыто. Если связка используется на уровне библиотеки - то уже нет.  Т.е. если Ваше приложение использует драйвер подключения к БД, который под GPL - это не значит что ваше приложение должно быть открыто.  

Автор: Ares4322 3.2.2010, 18:17
Про БД просто не копал.
Ну про GPL я так и думал, просто не уверен был.
Буду я думаю dotCMS и alfresco разбирать.
Спасибо!

Автор: COVD 3.2.2010, 23:40
Цитата

Есть индекс файл, класс конфига и папка modules....


Уфф

Идея, про которую я писал, в том, чтобы рассмотреть возможность реализовать не модули, а независимые приложения. Например, есть приложение из трех страниц - home.jsp, products.jsp, partners.jsp . Делаем три проекта, с одной страницей каждый. Получаем три war'a - home.war, products.war, partners.war . Теперь эти приложения можно деплоить на один веб сервер. А можно - на разные. Экстравагантно, но суть наверное ясна - построить распределенное приложение.

Или, как выше рекомендовали, надо осваивать какой-то фреймворк. Тут, кстати, где-то рядом обсуждали интересные проблемы утечек, класслоадеры, PermGen, ... 

Автор: garbuz 4.2.2010, 00:14
Afon, вопрос к тебе.
Цитата(afon @  29.1.2010,  17:37 Найти цитируемый пост)
Я бы (именно я бы) взял Spring, hibernate, jsp+jstl и сделал некую рабочую модель своего j2ee сайта. Потом бы написал что-то вроде плагинов, которые бы описывали стандартный подход в добавлении модуля: например, описывали бы спецификации 
- добавления страниц
- добавления url-ов
- доступа к бд
- доступа к набору предустановленных объектов

Со спрингом, хибером и остальным все понятно. Непонятно что ты имеешь ввиду под созданием страниц и урлов? Каким образом это делается кроме как физически создать страницу и где-нить в конфиге урл прописать? Что-то мне не очень понятно. Спасибо.

Автор: afon 4.2.2010, 00:49
2garbuz
Страницы, вероятно, пришлось бы создавать физически, а вот URL  путь к view, который поставляется в ModelAndView, можно хранить например в БД. 
Завтра с работы опишу пример. У меня как раз сейчас есть один контроллер, который обрабатывает статические странички, на каждую из которых есть 
- один физический jsp файл
- один URL с путем к вьюхе в виде map entry
Как раз последнее можно  хранить в бд. 

Автор: Ares4322 4.2.2010, 10:03
Наткнулся тут на отчет http://habrahabr.ru/tag/OpenCms/. (Там его можно скачать). Понятное дело, что большинство CMS на РНР, но из Java CMS там присутствуют только Alfresco и OpenCMS. Их используют, по первой есть даже книга. А про остальные CMS там ни слова. Возможно надо выбирать между этими двумя. Ведь широкое использование означает наличие сообщества пользователей, документации и вообще это залог развития проекта. Ведь не хочется ориентироваться на то, что возможно скоро умрет.

Автор: garbuz 4.2.2010, 13:08
Цитата(afon @  4.2.2010,  00:49 Найти цитируемый пост)
2garbuz
Страницы, вероятно, пришлось бы создавать физически, а вот URL  путь к view, который поставляется в ModelAndView, можно хранить например в БД. 
Завтра с работы опишу пример. У меня как раз сейчас есть один контроллер, который обрабатывает статические странички, на каждую из которых есть 
- один физический jsp файл
- один URL с путем к вьюхе в виде map entry
Как раз последнее можно  хранить в бд. 

Понятно, просто думал ты имеешь ввиду немного другой подход, постараюсь немного позже изложить мысли по этому поводу )

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