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

Если в двух словах — Liferay это портал выполенный на технолгиях J2EE (ок, получилось больше двух слов). Посмотреть можно на самом сайте www.liferay.com Так же, что бы было легче представить о чем речь — вот аналогичные продукты, но выполненные на других технологиях:
Портал позволяет комбинировать различные модули в одном web-приложении (и на одной веб-странице). Говоря о Liferay — это
Плюс к этому, есть возможность разработки собственных модулей, именуемых портлетами (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 веб-приложения:
Можно писать на 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 и бесплатно.
Что такое Liferay
Если в двух словах — Liferay это портал выполенный на технолгиях J2EE (ок, получилось больше двух слов). Посмотреть можно на самом сайте www.liferay.com Так же, что бы было легче представить о чем речь — вот аналогичные продукты, но выполненные на других технологиях:
- Microsoft SharePoint
- Joomla/Drupal на PHP
- С определенной натяжкой iGoogle & Google Site
Портал позволяет комбинировать различные модули в одном 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 и бесплатно.