使用 IBM FileNet P8 实现序列号分发器
2009-12-09 00:00:00 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劎绮妵鍕箳鐎n亞浠鹃梺闈涙搐鐎氫即鐛崶顒夋晬婵絾瀵ч幑鍥蓟閻斿摜鐟归柛顭戝枛椤牆顪冮妶搴′簼缂侇喗鎸搁悾鐑藉础閻愬秵妫冮崺鈧い鎺戝瀹撲礁鈹戦悩鎻掝伀缁惧彞绮欓弻娑氫沪閹规劕顥濋梺閫炲苯澧伴柟铏崌閿濈偛鈹戠€n€晠鏌嶆潪鎷屽厡闁汇倕鎳愮槐鎾存媴閸撴彃鍓卞銈嗗灦閻熲晛鐣烽妷褉鍋撻敐搴℃灍闁绘挻娲橀妵鍕箛闂堟稐绨肩紓浣藉煐濮樸劎妲愰幘璇茬闁冲搫鍊婚ˇ鏉库攽椤旂》宸ユい顓炲槻閻g兘骞掗幋鏃€鐎婚梺瑙勬儗閸樺€熲叺婵犵數濮烽弫鍛婃叏椤撱垹纾婚柟鍓х帛閳锋垶銇勯幒鍡椾壕缂備礁顦遍弫濠氱嵁閸℃稒鍊烽柛婵嗗椤旀劕鈹戦悜鍥╃У闁告挻鐟︽穱濠囨嚃閳哄啰锛滈梺褰掑亰閸欏骸鈻撳⿰鍫熺厸閻忕偟纭堕崑鎾诲箛娴e憡鍊梺纭呭亹鐞涖儵鍩€椤掑啫鐨洪柡浣圭墪閳规垿鎮欓弶鎴犱桓闂佸湱枪閹芥粎鍒掗弮鍫熷仺缂佸顕抽敃鍌涚厱闁哄洢鍔岄悘鐘绘煕閹般劌浜惧┑锛勫亼閸婃牠宕濋敃鈧…鍧楀焵椤掍胶绠剧€光偓婵犱線鍋楀┑顔硷龚濞咃絿妲愰幒鎳崇喓鎷犻懠鑸垫毐闂傚倷鑳舵灙婵炲鍏樺顐ゆ嫚瀹割喖娈ㄦ繝鐢靛У绾板秹寮查幓鎺濈唵閻犺櫣灏ㄥ銉р偓瑙勬尭濡繂顫忛搹鍦<婵☆垰鎼~宥囩磽娴i鍔嶉柟绋垮暱閻g兘骞嬮敃鈧粻濠氭偣閸パ冪骇鐎规挸绉撮—鍐Χ閸℃ê闉嶇紓浣割儐閸ㄥ墎绮嬪澶嬪€锋い鎺嶇瀵灝鈹戦埥鍡楃仯闁告鍕洸濡わ絽鍟崐鍨叏濡厧浜鹃悗姘炬嫹

save() 将触发 CustomEvent。
作为一次性设置的一部分,在 WjcDispenser 实例或类上提供一个订阅到特定类型的 CustomEvent 的事件处理程序。事件处理程序将为 WjcCounter 属性计算和保存新值。因此属性不能在同步事件处理程序中进行更新,所以我们将把事件处理程序更改为异步的(在订阅中指定同步或异步)。
客户端应用程序知道事件处理程序如何更新 WjcCounter,因此它执行相同的计算以预测 WjcCounter 的新值。
在这段想法论证过程中,您认为对分发器对象的更新在每个时间点只能发生一次,不管有多少个独立的客户端应用程序正在请求更新。CE 服务器没有 “优化” 中间(冗余)更新。记住,异步事件处理程序的执行是有保证的。事实上,您可能还了解到异步事件处理程序是通过队列进行处理的(这是正确的)。所有这些结合起来似乎能够在每次循环经过 CE 服务器时都能够对 WjcCounter 进行一次可靠的、可预测的更新。
您可能从上文的描述基调中猜到这里存在其他一些问题。事实上,这里存在两个问题。首先,在更新 ObjectStore 中的分发器对象和执行异步事件处理程序之间存在一段很短的时间。如果多个独立的客户端刚好在这段时间内同时进行更新,它们将看到相同的 WjcCounter 刷新值并计算出相同的更新值。即使您能够克服这个问题,并将特定的客户端 save() 活动绑定到事件处理程序的特定触发器中,您仍然还需要解决另一个问题。第二个问题是,尽管异步事件处理程序是通过队列进行处理的,但一个队列有多个读取程序。因此,不能够保证异步事件处理程序的执行顺序与触发更新的顺序一样。
第一个写优先
CE 服务器有一个能够可靠地检测交叉更新的内置特性。CE 实现一个称为第一个写优先 的策略。这意味着如果两个请求同时更新相同的对象,那么第一个请求将成功,第二个请求将失败。对于失败的更新,服务器将抛出一个 EngineRuntimeException,它带有 E_OBJECT_MODIFIED 的 ExceptionCode。附带的异常消息为 “The object ... has been modified since it was retrieved.”。但是,这是什么意思?
更多精彩
赞助商链接