欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OFBiz同步设置说明和示例 博客分类: ofbiz  

程序员文章站 2024-03-19 17:33:40
...
同步设置说明和示例
使用实体同步

实体同步背后的总体思路是重新建立交易 从一个*数据库到一个或多个数据库,每个数据库在EntitySync及相关实体所代表的一组记录。

四个字段( lastUpdatedStamp , lastUpdatedTxStamp , createdStamp , createdTxStamp )被添加到每个实体和自动填充,这样可以做到对每个实体创建的所有记录查询,更新,或在一定的交易中删除,以便根据时间这些交易可以远程复制到远程数据库中获取数据。

使锁在XML实体定义实体元素的属性只是笼统地涉及到实体同步。乐观锁机制使用lastUpdatedStamp的实体来存储和数据库中的当前实体,看它是否由另一个进程被修改之前,当前线程得到。如果它被修改之间的读取和写入抛出一个异常。只是做此检查,如果能锁= “真” 。

属性no-auto-stamp是用来告诉实体引擎不要自动添加这些auto-stamp字段。
在创建和更新实体。如果没有设置false,或如果它被设置为true,那么这些值将被自动设置,
当记录被删除主键将被保存在EntitySyncRemove实体的表。
这样的记录可以通知远程数据库删除对应的数据中。


When runEntitySync is called you pass an entitySyncId that is used to look up an EntitySync record and its corresponding EntitySyncInclude records to see what should be sync'ed. The package on the EntitySyncInclude refers to the package-name attribute on the entity definition XML element, and partial package names can be included with an implied wild-card at the end. The EntitySyncHistory entity is used to store information about what has happened in each entity sync run, which means one runEntitySync call.

当被称为runEntitySync你传递一个entitySyncId ,是用来仰望EntitySync的记录和其对应的EntitySyncInclude记录,看看应sync'ed什么。一揽子在EntitySyncInclude上是指包-name属性的实体定义XML元素,并在年底,部分包名称可以包含有一个隐含的外卡。的EntitySyncHistory实体用于信息存储在每个实体同步运行发生了什么事,这意味着一个runEntitySync通话。

根据你的需要选择通信协议远程调用保存的同步数据。
目前最有效的是的RMI远程调度。
如果你只有80端口,或其他HTTP端口开放,那么HTTP远程调度可能是你唯一的选择。

当一个runEntitySync调用失败, runStatusId将留在ESR_RUNNING的。
当服务器崩溃或进程被中断线程,导致不能重置状态。就需要手动监测和复位ESR_NOT_STARTED。也可能会被自动重置



OFBiz默认例子
例子在OFBiz (specialpurpose/pos/data/PosSyncSettings.xml)是被设置了3层架构,POS系统, 门店系统 (PSS) ,中心系统 (MCS).
下面简单描述他如何工作
中心系统(MCS)同步数据给门店系统(PSS),门店系统(PSS)同步给POS终端,
POS终端同步的数据库(间接)给同步主数据库。
每个OFBiz的实例都使用一个数据库。

以下4种类型

MCS -> PSS
PSS -> POS
POS -> PSS
PSS -> MCS


另外一个例子

EntitySync 配置
怎样配置每个节点?
怎样配置哪些实体同步?

以下为一些同步方式:

HOSM :主数据发起  (主数据推送)
HOST : 交易数据发起(从站点拉取)
BOS1, BOS2, ... BOSx: Back-office (多个站点)


HOSM => HOST, BOSx: 商品, 商品类别, 仓库, 仓库相关人员 (至少50个实体表)
BOSx => HOST: 订单, Party, 个人信息Person, 联系方式等等, 订单相关的表数据





同步时候过滤哪些东西

With the above approach it is possible to configure at entity level: fully sync some entities and not sync others. If the HOSM and HOST were merged to a HOS (which I don't like for other reasons), there would be a need to filter (at least) Party,Person records:

HOS => BOSx : '仅仅发送Person, Party, Facility相关的ContactMech '.
BOSx => HOS : 传递全部

EntitySync的当前实现? 怎样配置? 注意很多关联的对象会被自动同步 (关联外键):

同步仓库 (HOS => BOSx 方向) could bring the Party objects referred by the Facility objects
but Party does not refer to Person (because of the direction of the relation: Person has the partyId), but the Person, ContactMech objects (that belong to the Facility) would be desirable to sync as well

Entity级别的配置: 不支持上述的过滤
configuration on Entity and entity-relations level: entity-relations could be switched to 'follow / not follow' (naturally, there is no choice for direct references, those are always "follow" to preserve foreign key integrity). These flags would determine if the related objects are to be synced or not. Note: final decision is for Objects, not for classes (all objects of an Entity).








POS 设置步骤
  OFBiz 中的 POS 组件还在发展中,已经非常灵活并且具备了企业级 POS 解决方案的功
能:
• 模板化的收据
• 用 XML 文件配置的屏幕
• 支持 jPOS 硬件
• 产品、价格、促销、会员、定单及其它与 POS 部署和操作相关的数据的多层同步
  POS 系统是设计用它自己的完全独立的数据库。这是为了即使 POS 机从网络上断开仍
然可以操作。
  要以 POS 状态运行 OFBiz,仅需运行:"java ­jar ofbiz.jar ­pos"。
  请注意,这里会使用 pos­containers.xml 而不是 ofbiz­containers.xml,缺省情况下它不会
加载 Web 容器(如 Tomcat 或 Jetty),当然你也可以通过修改 pos­containers.xml 来加载 Web 容
器。
  POS 的店铺设置与网上店铺设置略有不同。
  在演示数据中有一个 POS 店铺的样例。
  不同之一是 POS 店铺应该总是把“是立即执行吗”设为“是”,而一个在线店铺或其它
邮件或电话或实际店铺应该设为“否”。
  POS 店铺应该把“捕获手工认证”设为“是”,通常把“检查库存”和“必须有货”设
为“否”。
  在 ofbiz/applications/pos 目录下有很多你可能要定制的文件。
  收据模板是这个配置目录下的.txt 文件。
  屏幕通过 screens/default 目录下的各种文件通过 XUI 配置。

  按钮事件在 config/buttonevents.xml 文件中配置。
  data/PosSyncSettings.xml 文件中有同步设置的样例,这个样例只是一个加载入数据库的
实体引擎种子数据文件。
  这个样例有 3 层:一个主*服务器(MCS)、一个单店服务器(PSS)以及一个 POS 客户
端(POS)。样例同步设置完成 4 个数据移动,包括 MCS ­> PSS, PSS ­> POS, POS ­> PSS, and 
PSS ­> MCS。
  这使用了实体引擎中的实体同步服务,这里用到的 XML 导入文件对原理和实现有很好
的注释说明。
  请注意,样例中显示的服务是使用"entity­sync­rmi"地址来配置的,这个地址在
serviceengine.xml 文件中有一个定义好了的地址。
  请注意,为避免数据中顺序 ID 重复,在 entityengine.xml 文件中应该为实体引擎设置
delegator 元素使用 sequenced­id­prefix 属性,为来自 POS 的同步数据添加一个独一无二的前
缀。