null

GlassFish, кластер и Ext-плагин для Liferay

Ext-плагины - это модули, позволяющие произвольным образом изменять функциональность Liferay, переопределяя классы и файлы конфигурации. От рассмотренных в предыдущих заметках hook-плагинов они отличаются тем, что, с одной стороны, практически не ограничивают наши возможности изменять портал (можно переопределить любые классы и конфиги), но, с другой стороны, далеко не так удобны в плане развёртывания и администрирования.

Несмотря на свои недостатки, во многих случаях именно Ext-плагин является оптимальным способом добиться требуемого результата. В частности, это единственный вменяемый способ добавить поддержку тегов, категорий и friendly URL в стандартные портлеты Liferay, в которых её изначально нет. Именно эта задача возникла передо мной в процессе последней на данный момент модификации нашего каталога курсов, который базируется на Shopping Portlet.

Сам по себе процесс разработки плагина в случае использования Liferay Plugins SDK не вызывает особых трудностей - новый плагин создаётся shell / bat-скриптом, затем в него добавляются классы и конфигурационные файлы, переопределяющие свои аналоги внутри портала, после чего запуском ant-ового скрипта формируется war-файл. Тестирование плагина тоже прошло успешно, зато неожиданные проблемы возникли в процессе его развёртывания на production-сервере.

Дело в том, Ext-плагину для успешной установки необходима поддержка сервером приложений возможности автоматического развёртывания приложений. Сервер GlassFish, который мы используем, поддерживает autodeploy, но в кластерной конфигурации (Cluster profile & Enterprise profile для GlassFish 2.1.1) не умеет автоматически деплоить приложения на конкретный инстанс или кластер. Т.е. получилась невесёлая ситуация - работающий плагин у нас есть, а развернуть его на production-сервере мы не можем.

В очередной раз нас спасли Гугл и внимательное чтение документации по разработке Ext-плагинов на liferay.com - оказывается, есть хитрый способ развернуть такой плагин на сервере без поддержки autodeploy. Состоит он в следующем:

1. Удаляем Liferay и все его плагины (если они есть) с production-сервера.

2. Развёртываем Liferay на любом сервере приложений с поддержкой autodeploy (можно использовать и стандартный бандл с на базе Tomcat / GlassFish).

3. Стандартным образом (через autodeploy портала) развёртываем на этом сервере наш Ext-плагин.

4. Копируем все библиотеки зависимостей портала с этого "промежуточного" сервера на production. Для tomcat-бандла Liferay 6.0.6 такие библиотеки лежат в каталоге $BUNDLE_HOME/tomcat-6.0.29/lib/ext/. Обратите внимание, что среди этих библиотек есть и библиотека нашего Ext-плагина.

5. Открываем каталог веб-приложения портала на "промежуточном" сервере ($BUNDLE_HOME/tomcat-6.0.29/webapps/ROOT для tomcat-бандла Liferay 6.0.6) и запаковываем портал в новый war-файл:

cd tomcat-6.0.29/webapps/ROOT
jar cf ~/liferay-portal-6.0.6-ext.war .

6. Развёртываем получившийся на предыдущем шаге архив на нужном инстансе или кластере нашего production-сервера.

7. Если это необходимо, заново развёртываем все удалённые на шаге (1) плагины.

Коротко о себе:

Работаю ведущим программистом в компании Tune IT и ассистентом кафедры Вычислительной техники в Университете ИТМО .

Занимаюсь проектами, связанными с разработкой разного рода веб-приложений (порталы, CRM-системы, системы электронного документооборота), а также, в рамках научной работы на кафедре, изучаю возможности применения семантического анализа в задачах САПР.