Основы Liferay
tl; dr резюме внизу этого поста
Liferay - платформа портала с открытым исходным кодом на основе Java. Liferay - это портал с надежной системой управления учетными записями пользователей (роли, группы, разрешения и т. Д.), Возможностями управления контентом, расширяемым хранилищем документов и, что наиболее важно, отличным SDK для разработки пользовательских приложений и расширения самого портала Liferay.
Похоже, что Open Underwriter использует Liferay 6.2 в качестве подчеркивающего портала. По сути, приложение Open Underwrites просто расширяет портал Liferay, чтобы соответствовать определенному бизнес-домену, но структура подчеркивания - это просто расширение портала, а не отдельный продукт. Liferay поддерживает большинство основных серверов приложений / контейнеров сервлетов, и, похоже, Open Underwriter использует JBoss в качестве сервера приложений.
Liferay поставляется по умолчанию с десятками различных приложений . Liferay называет эти приложения плагинами (и теперь я буду ссылаться на них как таковые). Liferay 6.2 и ниже использует портлеты JSR-286 (обычные портлеты и портлеты сборщика служб), ловушки (и адаптивные ловушки), расширения и шаблоны компоновки для создания приложений и расширения платформы. Liferay 7.0 и DXP (выпуск 7.0 для предприятий) используют модули OSGi на основе Apache Felix для построения и расширения портала.
Вы можете найти эти плагины в следующем месте
[OPEN_UNDERWRITER_HOME]/liferay-portal-6.2.0-ce-ga1/jboss-7.1.1/standalone/deployments
Конфигурация Liferay
Изменение конфигурации портала Liferay (например, для регистрации запросов определенного типа) НЕ производится путем непосредственного изменения этих файлов (если только вы не создаете собственный плагин).
Liferay имеет точки расширения, используемые для настройки и расширения портала и связанных с ним технологий. На высоком уровне вы расширяете или изменяете конфигурации для одного из следующих четырех компонентов
- Сам портал (и зависимости, используемые порталом)
- Отдельные плагины (модули, портлеты, хуки, расширения, адаптеры и т. Д.) Также известны как приложения , которые находятся на портале
- База данных
- Сервер приложений
Liferay's ORM (ServiceBuilder и Hibernate)
Компонент Liferay Object Relational Mapping называется Service Builder , который сам по себе является просто реализацией JPA с использованием Hibernate и EclipseLink .
Каждый плагин (который взаимодействует с базой данных) имеет файл с именем service.xml
, который определяет ORM (объекты и связанные с ними запросы CRUD) и может быть найден в следующем месте
[OPEN_UNDERWRITER_HOME]/liferay-portal-6.2.0-ce-ga1/jboss-7.1.1/standalone/deployments/{portlet-name}/WEB-INF/service.xml
Кроме того, вы можете увидеть сгенерированный SQL, таблицы и индексы в следующем месте.
[OPEN_UNDERWRITER_HOME]/liferay-portal-6.2.0-ce-ga1/jboss-7.1.1/standalone/deployments/{portlet-name}/WEB-INF/sql/
В этом каталоге вы увидите четыре или пять файлов. Это НЕ журнал SQL, а скорее сгенерированный SQL из файла service.xml
, связанного с этим плагином. Вы не можете изменять эти файлы напрямую, так как они будут перезаписаны в процессе сборки для этого плагина.
SQL времени выполнения
Чтобы правильно регистрировать запросы гибернации, вы должны изменить следующий файл
[OPEN_UNDERWRITER_HOME]/liferay-portal-6.2.0-ce-ga1/portal-ext.properties
Вы должны добавить следующее свойство внизу
hibernate.show_sql=true
Если этот файл уже существует, просто измените значение с false на true (по умолчанию используется значение false).
Сохраните файл и перезапустите сервер. Теперь запрос будет выведен в файл журнала Liferay в следующей форме:
insert into table1 (column1, column2) values (?, ?)
Знаки вопроса НЕ будут заменены фактическим значением запроса, и это из-за того, как hibernate готовит запросы (это технический термин, который означает что-то конкретное в случае Java / SQL).
Если вы хотите увидеть значения этих запросов, вам нужно изменить следующий файл:
[OPEN_UNDERWRITER_HOME]/liferay-portal-6.2.0-ce-ga1/jboss-7.1.1/standalone/deployments/ROOT/WEB-INF/classes/log4j.properties
Добавляя эти свойства (или изменяя значения, если они уже существуют)
log4j.logger.org.hibernate.SQL=debug
log4j.logger.org.hibernate.type=trace
Вы также можете добавить эти свойства
log4j.logger.org.hibernate.jdbc=DEBUG
log4j.logger.org.hibernate.transaction=DEBUG
И если вы устраняете проблему с производительностью, вы можете добавить следующее для отслеживания сессий спящего режима
log4j.logger.org.hibernate.impl.SessionImpl=TRACE
portal.properties - это файл свойств, который содержит конфигурацию портала. Вы никогда не изменяете это напрямую, а вместо этого изменяете portal-ext.properties. Однако вы можете (или не можете) заметить четыре других файла свойств в том же каталоге
- portal-bundle.properties
- portal-ext.properties
- portal-setup-wizard.properties
- portal-ide.properties
Все эти файлы переопределяют portal.properties, и они перечислены в порядке предпочтения. Другими словами, если у меня есть свойство в portal-bundle.properties, установленное в значение true, и то же свойство в portal-ide.properties, установленное в значение false, это свойство будет иметь значение false. Вы вряд ли увидите эти файлы, созданные.
Просмотр журнала
Возможно, вы заметили, что под домашним каталогом платформ есть несколько разных */log
каталогов. После первого запуска сервера вы должны увидеть папку журнала здесь
[OPEN_UNDERWRITE_HOME]/liferay-portal-6.2.0-ce-ga1/logs
Это файлы журналов, которые вас больше всего интересуют. Папка журналов, расположенная под каталогом JBoss, является файлом журналов серверов приложений. Он может содержать полезную информацию, но не будет содержать запросы, которые вы ищете.
Заключительные мысли
Я точно не знаю, почему вы хотите видеть запросы гибернации, но я предполагаю, что это по соображениям производительности. Во-первых, не включайте это в производство. Это замедлит вашу машину. Во-вторых, вы можете рассмотреть возможность включения журнала запросов MySQL.
Для этого найдите файл my.cnf
и добавьте следующий
general_log_file = /var/logs/mysql.log
general_log = 1
Кроме того, после того, как вы начнете регистрироваться и найдете интересующие вас запросы, вы должны взглянуть на их план выполнения (ссылка в ссылках ниже).
Ссылки и дополнительные мысли
Вы можете найти исчерпывающий список свойств, используемых для переопределения portal.properties здесь (примечание - никогда не изменяйте сами portal.properties, изменяйте portal-ext.properties)
https://docs.liferay.com/portal/6.2/propertiesdoc/portal.properties.html
Если вы считаете, что проблема с производительностью связана с базой данных, то свойства, которые вас интересуют, находятся между следующими двумя подразделами
- https://docs.liferay.com/portal/6.2/propertiesdoc/portal.properties.html#Model%20Hints
- https://docs.liferay.com/portal/6.2/propertiesdoc/portal.properties.html#SQL%20Data
План выполнения запросов MySQL
https://dev.mysql.com/doc/refman/5.7/en/execution-plan-information.html
Наконец, в будущем, когда вы будете исследовать технические проблемы, связанные с Open Underwriter, я настоятельно рекомендую вам поискать вещи, специфичные для технологий, используемых в платформе Liferay. Эти технологии реализованы особым образом, и я предлагаю вам вместо этого сосредоточить свои поиски на Liferay (с гибернацией в качестве второстепенного критерия поиска). Если вы не можете следить за информацией, которую я разместил выше, или если вам нужна дополнительная помощь, пожалуйста, ответьте, и мы можем обсудить.
Кроме того, я не уверен, какова ваша роль в реализации этого решения, но мониторинг New Relic APM действительно помог нам управлять нашей корпоративной платформой Liferay в производстве. Если ваша проблема связана с производительностью, просмотрите мою историю публикаций, я думаю, что я написал очень подробный пост о некоторых рекомендациях по настройке рабочей среды (хотя каждое развертывание отличается)