Конфигурация 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&amp;useUnicode=true&amp;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, целевая нагрузка

  1. создает кучу баз данных derby, которые я не понимаю, учитывая, что теперь она настроена для Postgres.
  2. Таблицы 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>
Другие вопросы по тегам