1

我正在尝试启动并运行 Moqui 1.4.1 版本,但使用 Postgres 作为数据库平台。这是平台的详细信息。


  • Ubuntu 12.04
  • 使用 JDBC 驱动程序 postgresql-9.3-1102.jdbc41.jar 的 Postgres 9.4(位于 /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. 创建了一堆我不理解的 derby 数据库,因为它现在是为 Postgres 配置的。
  2. enumeration_typeenumeration是在 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 文件。事实上,整个 WAR 文件中唯一的 XML 文件就是 web.xml。

发现这一点并阅读了书中有关设置的章节后,我在 Google 上搜索了 MoquiDefaultConf.xml 并在 github 上找到了该文件。然后,我从中复制了数据源元素,并简单地将其粘贴到所有列出的 Moqui*Conf.xml 的实体外观中,以确保它被拾取....它最终做到了,但出现了停止问题。我尝试了两个内联 jdbc 选项;一次是带有 xa-properties 标签的,一次是没有的。

对不起。我来自微软背景,所以这对我来说有点陌生,但在我的辩护中,我在技术上能够通过像这样摸索来启动和运行 OFBiz。

更新

好的。进步。

原来我使用 postgresql-9.3-1102.jdbc4.jar 驱动程序运行 Postgres 9.1 而不是 9.4(哎呀。Linux noob)。不确定这是否导致停止,但我使用 postgresql-9.3-1102.jdbc41.jar 驱动程序升级到 Postgres 9.4,并且停止仍在发生。

大卫,您正确地指出了缺少的 startup-add-missing 和 runtime-add-missing 属性。发生这种情况的原因是因为我最初试图将数据源元素从 OFBiz 等效项拼凑在一起,当我最终在网上找到 MoquiDefaultConf.xml 时,我只将 inline-jdbc 元素复制到我从 OFBiz 使用的数据源元素中并没有t 复制整个数据源元素。愚蠢的。无论如何,在仅将数据源元素添加到 MoquiDevConf.xml 和“gradle load”之后,在 Postgres 中创建了 91 个表,因此构建成功完成......好吧。

一个名为 MoquiDEFAULT 的 derby 数据库仍会在 db 文件夹的 derby 文件夹中创建。我可以确认 webapp 正在与 Postgres 对话,因为我在示例网格中创建了一个条目,它出现在 Postgres 的示例表中。我不太了解内部结构,无法知道查询是否在 derby 数据库上重复。

最后,在使用消除过程之后,我确定构建使用的是 MoquiDevConfig.xml 而不是 MoquiProductionConf.xml。即,当我将数据源仅放在 MoquiProductionConf.xml 实体外观元素中时,它没有任何效果,并且仅在 derby 中创建表(嗯...超过 100 个 .dat 文件),而在 Postgres 中则没有。这很令人困惑,因为 MoquiInit.properties 只引用 MoquiProductionConf.xml。我可以确认使用 MoquiDevConfig.xml 生成的 .dat 文件比 MoquiProductionConf.xml 少 20 个左右。我对 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>

4

2 回答 2

0

如果您下载了二进制版本,则 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,您需要在运行时使用的 Moqui Conf XML 文件中添加类似的定义。

于 2015-01-23T22:21:44.993 回答
0

在 MoquiDevConf.xml 或 MoquiProductionConf.xml 的 entity-facade 标签内使用这个配置

<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>
于 2022-01-27T22:51:15.883 回答