Я пытаюсь запустить выпуск Moqui 1.4.1, но использую Postgres в качестве платформы базы данных. Вот подробности платформы.
- Убунту 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 load, цель загрузки
- создает кучу баз данных дерби, которые я не понимаю, учитывая, что теперь он настроен для 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)
Так что Bitronix чем-то недоволен.
Если я прекращу загрузку и перезапущу ее, она создаст следующую таблицу 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) с драйвером postgresql-9.3-1102.jdbc4.jar. Не уверен, что это способствовало остановке, но я обновился до Postgres 9.4 с драйвером postgresql-9.3-1102.jdbc41.jar, и остановка все еще происходила.
Дэвид, вы правильно указали на отсутствующие атрибуты startup-add-missing и runtime-add-missing. Причина, по которой это произошло, заключалась в том, что я изначально пытался собрать элемент источника данных из эквивалента OFBiz, и когда я в конце концов нашел файл MoquiDefaultConf.xml в Интернете, я только скопировал элементы inline-jdbc в элементы источника данных, которые я использовал из OFBiz, и не сделал этого. t скопировать весь элемент источника данных. Глупый. В любом случае, после добавления элемента источника данных ТОЛЬКО в MoquiDevConf.xml и «загрузки gradle» в Postgres была создана 91 таблица, поэтому сборка завершилась успешно… ну вроде как.
База данных derby под названием MoquiDEFAULT по-прежнему создается в папке derby в папке db. Я могу подтвердить, что веб-приложение взаимодействует с Postgres, потому что я создал запись в сетке примеров, и она появилась в таблице примеров в Postgres. Я недостаточно знаю о внутренностях, чтобы знать, дублируются ли запросы в базе данных дерби.
Наконец, после использования процесса исключения я определил, что сборка использовала 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>