Конфигурация Moqui 1.4.1 Postgresql
Я пытаюсь запустить Moqui 1.4.1 и запустить его, но использую Postgres в качестве платформы базы данных. Вот детали платформы.
- Ubuntu 12.04
- Postgres 9.4 с использованием драйвера JDBC postgresql-9.3-1102.jdbc41.jar (сидит в /runtime/lib. Надеюсь, это правильное место)
Во-первых, я нигде не могу найти MoquiDefaultConf.xml, поэтому я предполагаю, что это применимо только к разработке?
Под runtime / conf у меня есть MoquiDevConf.xml, MoquiDevTestConf.xml, MoquiProductionConf.xml, MoquiStagingConf.xml. Во всех четырех я добавил следующую запись сущности-фасада.
<entity-facade crypt-pass="MoquiDefaultPassword:CHANGEME">
<!--
<datasource group-name="transactional" database-conf-name="postgresql" schema-name="">
<inline-jdbc jdbc-uri="jdbc:postgresql://127.0.0.1:5432/MoquiDEFAULT?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8" jdbc-username="moqui" jdbc-password="moqui" pool-minsize="2" pool-maxsize="50"/>
</datasource>
-->
<datasource group-name="transactional" database-conf-name="postgres" schema-name="public">
<!--
<inline-jdbc pool-minsize="5" pool-maxsize="50">
<xa-properties user="moqui" password="moqui" serverName="localhost" portNumber="5432"
databaseName="MoquiDEFAULT"/>
</inline-jdbc>
-->
<inline-jdbc jdbc-uri="jdbc:postgresql://127.0.0.1:5432/MoquiDEFAULT"
jdbc-username="moqui" jdbc-password="moqui"
pool-minsize="2" pool-maxsize="50"/>
</datasource>
</entity-facade>
<!-- end snippet -->
Эта проблема:
Когда я запускаю загрузку gradle, целевая нагрузка
- создает кучу баз данных derby, которые я не понимаю, учитывая, что теперь она настроена для Postgres.
- Таблицы enumeration_type и enumeration создаются в Postgres.
Тогда процесс застревает.
Вот выход в точке.
> --- 12304 [main] INFO org.moqui.impl.entity.EntityDbMeta
Created table [ENUMERATION_TYPE] for entity [moqui.basic.EnumerationType]
> --- 12788 [main] INFO org.moqui.impl.entity.EntityDbMeta
Created table [ENUMERATION] for entity [moqui.basic.Enumeration]
> --- 611953 [-task-scheduler] WARN Bitronix.tm.BitronixTransaction
transaction timed out: a Bitronix Transaction with GTRID [3132372E302E312E3100000000002E270D00000001], status=MARKED_ROLLBACK, 1 resource(s) enlisted (started Thu Jan 01 02:50:24 SAST 1970)
Так что Битроникс не рад чему-то.
Если я прекращаю загрузку и перезагружаюсь, то он создает следующую таблицу geo, а затем снова застревает, хотя на этот раз не выдает предупреждение Bitronix.
> --- 12268 [main] INFO org.moqui.impl.entity.EntityDbMeta
Created table [GEO] for entity [moqui.basic.Geo]
Помощь приветствуется.
Дополнительная информация в ответах на ответы:
Я скачал это для оценки функциональности, поэтому я просто хочу запустить приложение, а не расширять его. Как вы указали, в нем есть только встроенный WAR-файл. Однако, если я просматриваю содержимое файла WAR, я не нахожу файл MoquiDefaultConf.xml. Фактически, единственный XML-файл во всем WAR-файле - это web.xml.
Обнаружив это, и прочитав главу в книге, касающуюся установки, я погуглил MoquiDefaultConf.xml и нашел файл на github. Затем я скопировал из этого элемент источника данных и просто вставил его в сущностный фасад ВСЕГО перечисленного Moqui*Conf.xml, чтобы убедиться, что он был поднят... что он, наконец, сделал, но с проблемой остановки. Я пробовал оба встроенных варианта jdbc; один раз - с тегом xa-properties и один - без.
Сожалею. Я из Microsoft, так что все это немного чуждо мне, но в своей защите я был технически способен заставить OFBiz работать и бегать, возиться так.
ОБНОВЛЕНИЕ:
ХОРОШО. Прогресс.
Оказывается, я запускал Postgres 9.1, а не 9.4 (упс. Linux noob) с драйвером postgresql-9.3-1102.jdbc4.jar. Не уверен, что это способствовало остановке, но я обновил до Postgres 9.4 с драйвером postgresql-9.3-1102.jdbc41.jar, и остановка все еще происходила.
Дэвид, ты правильно указал на отсутствующие атрибуты запуска-добавления-отсутствия и времени выполнения-добавления-отсутствия. Причина этого состояла в том, что я первоначально пытался объединить элемент источника данных вместе с эквивалентом OFBiz, и когда я в итоге нашел MoquiDefaultConf.xml в сети, я скопировал только элементы inline-jdbc в элементы источника данных, которые я использовал из OFBiz, и не сделал t скопировать весь элемент источника данных. Глупо. В любом случае, после добавления элемента источника данных ТОЛЬКО в MoquiDevConf.xml и "загрузку gradle" в Postgres было создано 91 таблица, поэтому сборка завершилась успешно… ну, вроде.
База данных derby с именем MoquiDEFAULT по- прежнему создается в папке derby в папке db. Я могу подтвердить, что веб-приложение общается с Postgres, потому что я создал запись в сетке примеров, и она появилась в таблице примеров в Postgres. Я не знаю достаточно о внутренностях, чтобы знать, дублируют ли запросы в базе данных derby.
Наконец, после использования процесса исключения я определил, что при сборке использовался MoquiDevConfig.xml, а не MoquiProductionConf.xml. Т.е. когда я помещаю источник данных только в элемент-фасад-объект MoquiProductionConf.xml, он не действует и создает таблицы только в derby (ну... более 100 .dat-файлов) и ни в Postgres. Это сбивает с толку, учитывая, что MoquiInit.properties когда-либо ссылается только на MoquiProductionConf.xml. Я могу подтвердить, что сборка с использованием MoquiDevConfig.xml генерирует примерно на 20 файлов.dat меньше, чем MoquiProductionConf.xml. Я не знаю достаточно о файлах сборки Gradle, чтобы знать, что изменить.
MoquiDevConf.xml
<?xml version="1.0" encoding="UTF-8" ?>
<tools enable-elasticsearch="true" enable-camel="false"/>
<cache-list>
<!-- Development Mode - don't use these for production, load testing, etc.
Cleared by default every 20 seconds from when loaded into cache. -->
<cache name="entity.definition" expire-time-idle="30"/>
<!-- longer timeout since this basically looks through all files to check for new or moved entity defs -->
<cache name="entity.location" expire-time-idle="300"/>
<cache name="entity.data.feed.info" expire-time-idle="30"/>
<cache name="service.location" expire-time-idle="5"/>
<cache name="service.java.class" expire-time-idle="5"/>
<cache name="kie.component.releaseId" expire-time-idle="5"/>
<cache name="screen.location" expire-time-idle="5"/>
<cache name="screen.template.mode" expire-time-idle="5"/>
<cache name="screen.template.location" expire-time-idle="5"/>
<cache name="resource.xml-actions.location" expire-time-idle="5"/>
<cache name="resource.groovy.location" expire-time-idle="5"/>
<!-- longer timeout because these are cached by the expression text itself, so changed text is a new entry -->
<cache name="resource.groovy.expression" expire-time-idle="600"/>
<cache name="resource.javascript.location" expire-time-idle="5"/>
<cache name="resource.ftl.location" expire-time-idle="5"/>
<cache name="resource.gstring.location" expire-time-idle="5"/>
<cache name="resource.wiki.location" expire-time-idle="5"/>
<cache name="resource.markdown.location" expire-time-idle="5"/>
<cache name="resource.text.location" expire-time-idle="5"/>
<cache name="resource.reference.location" expire-time-idle="5"/>
<cache name="l10n.message" expire-time-idle="600"/>
</cache-list>
<server-stats stats-skip-condition="ec.web?.request?.pathInfo?.startsWith('/rpc') || ec.web?.request?.pathInfo?.startsWith('/status')">
<!-- For development, track everything! It'll run slow through... -->
<artifact-stats type="screen" persist-bin="true" persist-hit="true"/>
<artifact-stats type="screen-content" persist-bin="true" persist-hit="true"/>
<artifact-stats type="transition" persist-bin="true" persist-hit="true"/>
<artifact-stats type="service" persist-bin="true" persist-hit="true"/>
<artifact-stats type="service" sub-type="entity-auto" persist-bin="true" persist-hit="false"/>
<artifact-stats type="service" sub-type="entity-implicit" persist-bin="true" persist-hit="false"/>
<artifact-stats type="entity" persist-bin="true"/>
</server-stats>
<webapp-list>
<webapp name="webroot" http-port="8080" https-enabled="false">
<root-screen host=".*" location="component://webroot/screen/webroot.xml"/>
</webapp>
</webapp-list>
<screen-facade boundary-comments="true">
<!-- The default conf file has a macro location defined for html already, but this is an example of how to
refer to a file to override the default macros. -->
<screen-text-output type="html" mime-type="text/html"
macro-template-location="template/screen-macro/ScreenHtmlMacros.ftl"/>
</screen-facade>
<entity-facade crypt-pass="MoquiDefaultPassword:CHANGEME">
<datasource group-name="transactional" database-conf-name="postgres" schema-name="public" startup-add-missing="true" runtime-add-missing="false">
<inline-jdbc pool-minsize="5" pool-maxsize="50">
<xa-properties user="moqui" password="moqui" serverName="localhost" portNumber="5432"
databaseName="MoquiDEFAULT"/>
</inline-jdbc>
<!-- <inline-jdbc jdbc-uri="jdbc:postgresql://127.0.0.1/MoquiDEFAULT"
jdbc-username="moqui" jdbc-password="moqui" pool-minsize="2" pool-maxsize="50"/> -->
</datasource>
</entity-facade>
<repository-list>
<!-- <repository name="main" location="http://localhost:8081/rmi" type="rmi" workspace="default"
username="admin" password="admin"/> -->
</repository-list>
<component-list>
<!-- This loads the tools component over top of the default one, which will result in a warning but works
fine. Use something like this to refer to components in a JCR repository. -->
<component name="tools" location="component/tools"/>
</component-list>
2 ответа
Файл MoquiDefaultConf.xml находится в предварительно скомпилированном исполняемом файле war, если вы скачали бинарный выпуск, хотя вы можете увидеть его здесь в исходном репозитории:
https://github.com/moqui/moqui/blob/master/framework/src/main/resources/MoquiDefaultConf.xml
Там вы увидите пример конфигурации для Postgres:
<datasource group-name="transactional" database-conf-name="postgres" schema-name="public" startup-add-missing="true" runtime-add-missing="false">
<inline-jdbc pool-minsize="5" pool-maxsize="50">
<xa-properties user="moqui" password="moqui" serverName="localhost" portNumber="5432"
databaseName="MoquiDEFAULT"/>
</inline-jdbc>
<!-- <inline-jdbc jdbc-uri="jdbc:postgresql://127.0.0.1/MoquiDEFAULT"
jdbc-username="moqui" jdbc-password="moqui" pool-minsize="2" pool-maxsize="50"/> -->
</datasource>
Обратите особое внимание на эти два атрибута в элементе источника данных: startup-add-missing="true" runtime-add-missing="false". Postgres не поддерживает создание таблиц на лету, поэтому все они должны быть созданы до того, как система запустится, вместо режима по умолчанию, который заключается в создании таблиц только по мере необходимости (когда выполняется первая запись).
В файле MoquiDefaultConf.xml также есть определение группы сущностей tenantcommon, указывающее на Derby:
<datasource group-name="tenantcommon" database-conf-name="derby" schema-name="MOQUI">
<inline-jdbc pool-minsize="2" pool-maxsize="10">
<xa-properties databaseName="${moqui.runtime}/db/derby/MoquiDEFAULT" createDatabase="create"/>
</inline-jdbc>
</datasource>
Чтобы поместить эти объекты в Postgres, вам нужно добавить аналогичное определение в XML-файл Moqui Conf, используемый во время выполнения.
Используйте эту конфигурацию внутри тега entity-facade в MoquiDevConf.xml или MoquiProductionConf.xml.
<datasource group-name="transactional" database-conf-name="postgres" schema-name="public" startup-add-missing="true" runtime-add-missing="false">
<inline-jdbc jdbc-uri="jdbc:postgresql://localhost/dbname" jdbc-username="postgres" jdbc-password="pass"/>
</datasource>