Moqui 1.4.1 Конфигурация PostgreSQL

Я пытаюсь запустить выпуск 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&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 load, цель загрузки

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

Так что 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>


person Brad Smith    schedule 23.01.2015    source источник
comment
Что касается баз данных Derby, какие базы данных вы видите созданными? Ответы на остальные вопросы ниже.   -  person David E. Jones    schedule 24.01.2015
comment
Спасибо за ответ Дэвид. Извиняюсь. Когда я сказал базы данных, я должен был сказать файлы .dat. Создана только одна база данных под названием MoquiDEFAULT.   -  person Brad Smith    schedule 24.01.2015
comment
Приносим извинения за задержки, и не знаю, почему никто не поднял это. Stack Overflow не имеет очень надежных электронных писем с уведомлениями, и я проверяю сайт только изредка. В качестве общего вопроса к вам: если вы пытаетесь оценить функциональность, почему бы просто не запустить ее на Derby?   -  person David E. Jones    schedule 04.02.2015
comment
О файлах XML в файле WAR: даже без добавления каталога среды выполнения в файл WAR (для простой загрузки на серверы, такие как ElasticBeanstalk, или развертывания в контейнере сервлетов, таком как Apache Tomcat), я только что подсчитал, и в файле WAR есть 42 файла XML. WAR только для фреймворка в последней версии Moqui, и это не изменилось за последнее время. Тем не менее, все это задокументировано (на веб-страницах moqui.org и в книге Making Apps with Moqui), и обычно это более простой способ получить информацию.   -  person David E. Jones    schedule 04.02.2015
comment
Разбирая этот вопрос, похоже, что последняя оставшаяся проблема - это вопрос о том, почему база данных Derby все еще создается. Это правильно или я что-то еще пропустил? Чтобы ответить на этот вопрос, было бы полезно увидеть ваш полный файл конфигурации (например, MoquiDevConf.xml из того, что вы написали). О файлах conf: когда вы запускаете скрипт сборки gradle или ant, он явно указывает файл conf для использования, в противном случае он использует файл в MoquiInit.properties (особенно при добавлении WAR в Tomcat и т. д.). В любом случае Moqui сообщает, какой файл конфигурации он использует при запуске.   -  person David E. Jones    schedule 04.02.2015
comment
Кстати, меня интересует весь ваш файл conf, потому что я предполагаю, что у вас нет источника данных, определенного для группы сущностей tenantcommon, поэтому сущности в этой группе все еще попадают в базу данных Derby. В документации также есть более подробная информация о группах и источниках данных для них.   -  person David E. Jones    schedule 04.02.2015
comment
Привет, Дэвид. Теперь беспокоит задержка. Я ценю, что ты вернулся ко мне. ХОРОШО. Что касается первой проблемы, мы оцениваем как функциональные, так и архитектурные возможности, поэтому мы развертываем, чтобы также понять последствия масштабируемости предприятия. Мы также развернули OFBiz на Postgres для сравнения.   -  person Brad Smith    schedule 04.02.2015
comment
Должно быть, я делаю что-то совершенно глупое, потому что загружаю это и распакуйте его. Затем я извлекаю файл WAR с помощью WinRAR, и если я делаю поиск по всей папке, все, что приходит, это web.xml. Возможно, эти другие файлы XML инкапсулированы в файлы JAR? Когда я только начинал, я читал главу 2 книги и прочее в Интернете, но, похоже, мне не хватает понимания. Помимо таинственных отсутствующих файлов WAR XML, вы правы в том, что единственная оставшаяся проблема заключается в том, почему нагрузка создает базу данных Derby.   -  person Brad Smith    schedule 04.02.2015
comment
Я добавлю содержимое моего MoquiDevConf.xml в OP, чтобы вы могли видеть содержимое. Наконец, когда все это будет хорошо работать, я обещаю сделать хороший аккуратный ответ для других. :) Эта ветка превратилась в беспорядок.   -  person Brad Smith    schedule 04.02.2015
comment
Я добавил подробности о tenantcommon в свой первоначальный ответ, который должен решить вашу оставшуюся проблему с Derby DB.   -  person David E. Jones    schedule 12.02.2015


Ответы (1)


Файл MoquiDefaultConf.xml находится в предварительно созданном исполняемом файле войны, если вы загрузили двоичный выпуск, хотя вы можете увидеть его здесь, в исходном репозитории:

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, используемый во время выполнения.

person David E. Jones    schedule 23.01.2015
comment
Я скачал ссылку для в целях оценки функциональности, поэтому я просто хочу запустить приложение, а не расширять его. - person Brad Smith; 24.01.2015
comment
Впервые публикую на SO тоже. Так что не знал о тайм-ауте. Дополнительная информация в ОП. - person Brad Smith; 24.01.2015