例如:
当域中的属性值更改时(字符串或布尔值从'true'更改为'false')。一切都发生在一个会话中,我们正在等待另一个反弹'休息',这应该是获取数据但似乎没有更新。
答案 0 :(得分:0)
这通常是由于超文本运行时中的域使用不正确引起的。
比较这2个用法(不正确和正确):
1)不正确 - 重用域名元素(不应该)
// incorrect:
HyperonDomainObject lob = engine.getDomain("GROUP", "LOB[GROUP]");
HyperonDomainObject trm = lob.getChild("PRODUCT", "PRD3");
HyperonDomainObject adb = trm.getChild("RIDER", "ADB");
// adb is domain element snapshot
while (true) {
log.info("code = {}", adb.getAttrString("CODE", ctx));
// sleep 3 sec
...
}
// == console == (in meantime user changes attribute CODE from "A" to "BBB")
// but adb is frozen - it is snapshot
code = A
code = A
code = A
code = A
...
2)正确使用 - 始终获取新鲜域对象:
while (true) {
HyperonDomainObject lob = engine.getDomain("GROUP", "LOB[GROUP]");
HyperonDomainObject trm = lob.getChild("PRODUCT", "PRD3");
HyperonDomainObject adb = trm.getChild("RIDER", "ADB");
log.info("code = {}", adb.getAttrString("CODE", ctx));
// sleep 3 sec
...
}
// == console == (in meantime user changes attribute CODE from "A" to "BBB")
// adb is always fresh
code = A
code = A
code = BBB
code = BBB
...
请记住,engine.getDomain()返回域对象snopshot,此对象被冻结。
将engine.getDomain()视为缓存,因为它在内存结构中找到对象。如果用户在Hyperon Studio中修改域,则会刷新此结构。