Liferay - Введение
Преамбула
С портальными контейнерами спецификации JSR-168 я столкнулся в 2006 году. Все было достаточно тривиально, клиент хотел портальное решение на Java и я был назначен найти наиболее подходящее. После рассмотрения JBoss Portal, Exo, Apache Jetspeed2, Apache Pluto я понял, что в мире порталов пока все еще довольно не просто и не тривиально. И когда я уже готовился с кровью отстаивать очень не быстрые сроки, мне попался Liferay тогда еще версии 3.6.5.Этот портал, в отличие от братьев по спецификации, бодренько зашуршал из коробки и показал мне много всякого. Его и выбрали в качестве платформы.
Время показало, что платформа действительно хорошая и из коробки умеет массу полезных и приятных вещей. Как и у большиства legacy продуктов платформа содержит в себе некоторое количество архаичной архитектуры и сама построена на технологиях образца 2004-05 года. В 2007 backend платформы был переведен полностью на Spring и версия с EJB канула в лету. Как и большинство других платформ, которые обладают очень широкой функциональностью из коробки, Liferay накладывает на разработчиков ряд сущственных ограничений. Как и любой другой продукт, Liferay содержит в себе порядочное количество багов и особенностей реализации. Иначе говоря, это отнюдь не серебрянная пуля в мире Java порталов. Но, вместе с тем, я считаю Liferay одним из лучших решений в области JSR-168/268 совместимых порталов и лучшим из Open Source реализаций JSR-168/268.
Pro
Чем же хорош Liferay- полноценная реализация Enterprise Serial Bus (ESB) делает доступ к persistence слою простым, понятным, не зависящим от транспорта или слоя логики, где понадобились данные из persistence
- ESB берет на себя управление транзакциями, создание таблиц, поддержание целостности данных, обработку запросов в зависимости от сервера базы данных, генерацию различного рода классов, которые являются частью ESB, организацию доступа к данным, кеширование, генерацию ключей и UUID
- портал предоставляет возможность расширять ESB с помощью заранее сконфигурированного и готового к работе пакета расширения. пакт содержит все необходимое для того, чтобы классы расширения были успешно интегрированны в развернутую копию Liferay
- механизм кастомных обработчиков событий портала, в терминологии Liferay hooks, позволяет изменять и дополнять поведение портала "на лету", без изменения исходный кодов самой платформы
- процесс hot deploy для компонентов портальной среды позволяет интегировать компоненты при самой минимальной и самой формальной кастомизации дескрипторов. иначе говоря для успешного деплоймента компонента Liferay достаточно наличия файла liferay-portlet.xml внутри портлетного war и простого описания портлета в этом дескрипторе. тонкая настройка или правильность формата не обязательна
- наличие готовых портлетных мостов позволяет создавать портлеты на разных языках от PHP до Ruby-on-Rails, не говоря уже о всем многообразии Java frontend фреймворков
- наличие собственной библиотеки тэгов позволяет разрабатывать локализованный и готовый к использованию интерфейс очень быстро и просто
- наличие специфических WindowState для портлетов, позволяет легко реализоваывать и просто работать со всплыващющими окнами и embedded контентом
- для кастомизации основной темы портала достаточно прописать только дополнительные CSS классы, изменений в шаблонах и добавить дополнительные ресурсы, стандартные файлы темы будут добавлены к новому пакету автоматически
- библиотеки, поставляемые с порталом, можно повторно использовать в своих собственных портлетах. для этого нужно перечислить необходимые jar в файле liferay-portlet.properties. это решает проблему совместимости библиотеки и проблему размера портлетного war
- портал поставляет собственную, полновесную и полнофункциональную Content Management System
- портал поддерживает до 4 типов портлетного контента, включая прямую интеграцию удаленного ресурса
- портал содержит развернутую контрольную панель, предоставляющую доступ к настройкам любого уровня -- от учетных записей пользователя до управления хостингом и физическими параметрами JVM. контрольная панель доступна для расширения кастомными портлетами
- портал предоставляет разветвленную систему управления правами пользователя, основанную на групповой модели. эта система прав едина для всей портальной системы и покрывает весь workflow от авторизации до разграничения доступа и даже рендеринга контента, в зависимости от прав конкретного пользователя
- портал предоставляет администратору возможность предопределить не ограниченное число layouts, каждый из которых может сочетать в себе произвольную конфигурацию любых портлетов и тем, доступных в системе. с помощью системы аутентификации администратор может предоставить пользователю доступ к одному или нескольким layouts, назначить тот или иной в качестве layout по-умолчанию как для контретного пользователя, так и для группы пользователей
- портал интегрирован с широким спектром third-party софта, включая таки известные продукты как ICEfaces, Alfresco, Apache Jackrabbit, Apache Lucene, JBoss JBPM и даже такими сложными, как Pentaho BI Platform
Contra
при всех достоинствах, не следует также забывать и о недостатках- за исключением нескольких, довольно объемных, руководств по администрированию, разработке и пользованию CMS, документация технического характера крайне поверхностна и эпизодична
- полностью отсутсвует JavaDoc, единтсвенный способ узнать о назчении и особенности реализации той или иной функции -- исходный код
- ESB предоставляет возможность пользоваться только ограниченым набором фич и приемов. нет возможности изменить базовую реализацию ORM, на которой основана ESB. часто нет возможности использовать какие-то advanced tips&trics для ORM, по той причине, что ORM полностью закрыта фунционалом ESB. как следствие, любой дефект или не реализованная фича ESB автоматически лишает программиста возможности использовать сломанную или не реализованную функциональность в своих проектах. даже если ORM поддерживает эту функциональность
- ESB включает в себя генерацию и взаимодествие ядра портала с внешним миром через SOAP протокол. генерация WSDL и WSDD полностью скрыта ESB. таким образом, у программиста никакой возможности влиять на формат или валидность первого и второго. также не может быть изменена реализация SOAP протокола
- набор событий, генерируемых порталом, очень скромен, поэтому тонкая настройка поведения через хуки исключена
- процесс hot deploy не совершенен. так, если в процессе развертывания со стороны портала произошло обращение к портлету или теме, старая версия которых анулирована, а новая еще не развернута, портлет или тема будут недоступны вплоть до следующего развертывания или перезапуска портала
- тема представляет из себя набор шаблонов Apache Velocity. полного перечня переменных и CSS классов в публичном доступе не существует. теоретически тему можно разрабатывать на pure JSP или HTML, на практике это означает создание темы с нуля
- пакет кастомизации ESB заточен под сборку Ant и определенную структуру файловой системы. изменения структуры файловой системы возможны, но весьма не значительные. изменения сборочной системы не возможны из-за огромного количества сборочных скриптов, перекрывающих и дополняющих друг друга
- мосты для других языков и технологий представления, отличных от Struts, часто реализованы не до конца или содержат недоработки. в доступном комьюнити зачастую разобратны только самые тривиальные и простые варианты использования. очень часто приходится потратить очень много времени для интеграции того, что уже объявлено, как совместимое
- интеграция third-party software очень часто не содержит никакой другой информации, кроме объявления про интеграцию
- библиотека кастом тэгов, как и большинство UI сделана очень давно и несет в себе все возможные недостатки pure JSP подхода. судя по количеству и проявлению дефектов, UI не является наивысшим приоритеом разработчиков
- перенос дерева контента из одного портала в другой заявлен, но также работает не всегда корректно. перенос дерева контента между порталами разных версий не возможен в принципе
- достаточно широкое community организовано крайне странно и хаотично, поиск по существующим материалам затруднен, материала википедии намернно слиты с материалами форумов. использование community довольно затруднительно