我正在尝试启动并运行 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&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 时,加载目标
- 创建了一堆我不理解的 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)
所以 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>