Изменение настроек портала Liferay в коде на Java

День не предвещал ничего веселого, пока при настройке CDN для одной из конфигурацию не забыли выключить "Use CDN for dynamic resources". Почему-то эта настройка включена по умолчанию, при том что как правильно настроить CDN что бы это работало - я думаю не знает никто (вернее в Liferay - точно знают - у них на www.liferay.com main.css и everything.jsp берутся как раз с CDN - но информации о том как это сделать - ноль).

А вот если оставить эту настройку включенной - при том что content сервер это не поддерживает - то начинается веселье. Дело в том - что Liferay пытается загрузить тот же everything.jsp с того CDN сервера что вы указали - не находит и - все перестает работать. Ну то есть зайти в Control Panel вы еще как-то сможете - и даже увидеть этот чек-бокс - но только поменять его штатными средствами - увы уже нет.

JSON-WS API  тоже ничего вразумительного не дает. Можно исправить в базе - но там все настройки портала хранятся в гигантском XML - и не всегда его можно легко исправить (под Оракл процедура совсем нетривиальная).

Что осталось - добавить в один из портлетов в StartUp Action код, которые сбрасывает настройку. Код вида:

 
                 PortletPreferences prefs = PrefsPropsUtil.getPreferences(company.getCompanyId(), false);
                 prefs.setValue("cdn.dynamic.resources.enabled", Boolean.FALSE.toString());
                 prefs.store();

Имена переменной можно "раскрутить" посмотрев код Liferay - например эту JSP: https://github.com/liferay/liferay-portal/blob/master/portal-web/docroot/html/portlet/portal_settings/general.jsp - ну или любую из "соседних", найдя нужный контрол и посмотрев в какая константу из PropsKeys используется.

Так что - если вы вдруг "убили" портал какой-то из настроек - еще не все потеряно!

 

23.06.2014