28 May 2009

Liferay — Open-Source портал на J2EE

Lumber room
Только вчера закончил свой первый, полнофункциональный портлет для Liferay (SVN/Mercurial/CVS браузер) — и хочу поделится некоторым опытом (пусть и минимальным). К тому же по Liferay вроде на Хабре еще ничего не пробегало. Статья очень поверхностная — но тем не менее, надеюсь, даст некоторое начальное представление

image



Что такое Liferay


Если в двух словах — Liferay это портал выполенный на технолгиях J2EE (ок, получилось больше двух слов). Посмотреть можно на самом сайте www.liferay.com Так же, что бы было легче представить о чем речь — вот аналогичные продукты, но выполненные на других технологиях:

Портал позволяет комбинировать различные модули в одном web-приложении (и на одной веб-странице). Говоря о Liferay — это
  • Полноценная CMS
  • Вики
  • Блоги
  • Форумы
  • В последней версии добавилась функциональность социальных сетей: друзья, «стена», сообщения
  • И много-много-много чего другого

Плюс к этому, есть возможность разработки собственных модулей, именуемых портлетами (Portlet).
Портлет — это компонент, выполняемый в контексте Portlet Container-а и отвечающий за отрисовку предоставленной ему области страницы (в отличие от отрисовки всей страницы в обычном servlet)

Как и многие другие технологии в J2EE, API портлетов стандартизовано через JSR (Java Specification Request). За портлеты отвечают JSR-168 (Portlet 1.0) & JSR-268 (Portlet 2.0) а так же ряд других JSR (например JSR-301 — Portlet Bridge Specification for JavaServer Faces)

Наличие стандартов позволяет разрабатывать портлеты, которые потом можно выполнять в любом портале. Кроме Liferay, существует целый ряд других Open-Source реализаций (не говоря о коммерческих):

Но, по моему скромному мнению, Liferay самый мощный и полнофункциональный из них, не зря компания Sun выбрала именно Liferay за основу своего портала WebSpace.

Стандарты / не стандарты


Стандарты это хорошо! Это даже очень хорошо! Но, если брать конкретный пример (мой портлет) — то я принял решение разрабатывать портлет именно под Liferay — то есть, не работающий на других порталах. Почему? Ну во-первых, сильно сомневаюсь, мой портлет будет использоваться где-то еще кроме Liferay (если все-таки кто-то захочет — бужу делать общую версию), а заточка портлета именно под Liferay позволяет использовать большой набор дополнительных сервисов и заготовок.

В мое случае мне очень пригодился тэг отрисовки таблиц: формируешь набор данных — и отображаешь его в виде таблицы при помощи этого тега — в результате получаешь таблицу, стилистически оформленную как и все другие таблицы в Liferay, с разбиением данных на «страницы» (pagination), навигацией между страницами, управление количеством элементов на одной странице. Так как таблица у меня присутсвует чуть-ли не на каждой форме — мне это было критично и использование Liferay-специфичной функциональности сильно облегчило мне жизнь

Но, в каждом проекте, я думаю, это должно решаться индивидуально — при возможности — лучше следовать стандартам (и обеспечить переносимость) — но, если переносимость не нужна и решение создается под конкретный портал — можно и использовать специфичные сервисы и функциональность.

Так же, Liferay был выбран из-за того, что набор технологий, используемый в нем и его портлетах, близок к моему EmForge — и я надеюсь в будующем получить более тесную интеграцию EmForge & Liferay:

Разработка портлетов


При разработке пользовательского интерфейса Portlet-ов для Liferay, можно использовать практически все фреймворки, что и при разработке обычного java веб-приложения:
  • Голый JSP — что я и выбрал пока, так как у меня только отображение данных
  • Struts 1.x — используется для написания «родных» портлетов, а потому имеет много «заготовок»
  • Struts 2 тоже должен работать
  • Spring-MVC

Можно писать на JSF — но работать с голым JSF грустно, а из дополнительных framework-ов поддерживаются IceFaces и только вчера прошел анонс в форуме о поддержке RichFaces (но видимо в состоянии альфа)
Другие фреймфорки должны работать, но — надо проверять (могут быть «нюансы»). Например мне никто так и не смог подтвердить — будет ли работать Wicket — или нет.

Разработка портлетов по много схожа с разработкой обычных веб-приложений на java — структура проекта во многом та же, тот же web.xml — просто есть ряд дополнительных конфигурационных файлов, и вся программа выполяется немного в другом контексте — вместо Servet-ов и Filter-ов — Portlet-ы и PortletFilter-ы

Трудности при разработке


Основная трудность — очень мало документации :( — все что есть — это набор плохо-структурированных вики на liferay.com, плюс сообщения в форумах. Для меня лучшей документацией стал исходный код самого Liferay и его родных портлетов. Просто когда надо что-то сделать — ищешь портлет с похожей функциональностью, смотришь его исходный код и делаешь аналогично (благо — все в Open-Source и доступно)

Где использовать


Мне Liferay очень понравился — и, если вам необходимо написать CMS на java — подумайте — может не надо изобретать велосипед? Используя Liferay вы получаете сайт с управлением пользователями и ролями, множеством компонент и возможностью разширить его на java — и все это Open-Source и бесплатно.
Tags:liferay
Hubs: Lumber room
+9
4.1k 12
Comments 5
Top of the last 24 hours