OFBiz同步设置说明和示例
同步设置说明和示例
使用实体同步
实体同步背后的总体思路是重新建立交易从一个中央数据库到一个或多个数据库,每个数据库在EntitySync及相关实体所代表的一组记录。
四个字段(lastUpdatedStamp,lastUpdatedTxStamp,createdStamp,createdTxStamp)被添加到每个实体和自动填充,这样可以做到对每个实体创建的所有记录查询,更新,或在一定的交易中删除,以便根据时间这些交易可以远程复制到远程数据库中获取数据。
使锁在XML实体定义实体元素的属性只是笼统地涉及到实体同步。乐观锁机制使用lastUpdatedStamp的实体来存储和数据库中的当前实体,看它是否由另一个进程被修改之前,当前线程得到。如果它被修改之间的读取和写入抛出一个异常。只是做此检查,如果能锁=“真”。
属性no-auto-stamp是用来告诉实体引擎不要自动添加这些auto-stamp字段。
在创建和更新实体。如果没有设置false,或如果它被设置为true,那么这些值将被自动设置,
当记录被删除主键将被保存在EntitySyncRemove实体的表。
这样的记录可以通知远程数据库删除对应的数据中。
WhenrunEntitySynciscalledyoupassanentitySyncIdthatisusedtolookupanEntitySyncrecordanditscorrespondingEntitySyncIncluderecordstoseewhatshouldbesync'ed.ThepackageontheEntitySyncIncludereferstothepackage-nameattributeontheentitydefinitionXMLelement,andpartialpackagenamescanbeincludedwithanimpliedwild-cardattheend.TheEntitySyncHistoryentityisusedtostoreinformationaboutwhathashappenedineachentitysyncrun,whichmeansonerunEntitySynccall.
当被称为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,联系方式等等,订单相关的表数据
同步时候过滤哪些东西
Withtheaboveapproachitispossibletoconfigureatentitylevel:fullysyncsomeentitiesandnotsyncothers.IftheHOSMandHOSTweremergedtoaHOS(whichIdon'tlikeforotherreasons),therewouldbeaneedtofilter(atleast)Party,Personrecords:
HOS=>BOSx:'仅仅发送Person,Party,Facility相关的ContactMech'.
BOSx=>HOS:传递全部
EntitySync的当前实现?怎样配置?注意很多关联的对象会被自动同步(关联外键):
同步仓库(HOS=>BOSx方向)couldbringthePartyobjectsreferredbytheFacilityobjects
butPartydoesnotrefertoPerson(becauseofthedirectionoftherelation:PersonhasthepartyId),butthePerson,ContactMechobjects(thatbelongtotheFacility)wouldbedesirabletosyncaswell
Entity级别的配置:不支持上述的过滤
configurationonEntityandentity-relationslevel:entity-relationscouldbeswitchedto'follow/notfollow'(naturally,thereisnochoicefordirectreferences,thosearealways"follow"topreserveforeignkeyintegrity).Theseflagswoulddetermineiftherelatedobjectsaretobesyncedornot.Note:finaldecisionisforObjects,notforclasses(allobjectsofanEntity).
POS设置步骤
OFBiz中的POS组件还在发展中,已经非常灵活并且具备了企业级POS解决方案的功
能:
•模板化的收据
•用XML文件配置的屏幕
•支持jPOS硬件
•产品、价格、促销、会员、定单及其它与POS部署和操作相关的数据的多层同步
POS系统是设计用它自己的完全独立的数据库。这是为了即使POS机从网络上断开仍
然可以操作。
要以POS状态运行OFBiz,仅需运行:"javajarofbiz.jarpos"。
请注意,这里会使用poscontainers.xml而不是ofbizcontainers.xml,缺省情况下它不会
加载Web容器(如Tomcat或Jetty),当然你也可以通过修改poscontainers.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导入文件对原理和实现有很好
的注释说明。
请注意,样例中显示的服务是使用"entitysyncrmi"地址来配置的,这个地址在
serviceengine.xml文件中有一个定义好了的地址。
请注意,为避免数据中顺序ID重复,在entityengine.xml文件中应该为实体引擎设置
delegator元素使用sequencedidprefix属性,为来自POS的同步数据添加一个独一无二的前
缀。