为什么动态(实时)更新不起作用?为什么只有在应用程序重启后才能看到更改?

时间:2018-03-16 12:33:52

标签: java hyperon

例如:

当域中的属性值更改时(字符串或布尔值从'true'更改为'false')。一切都发生在一个会话中,我们正在等待另一个反弹'休息',这应该是获取数据但似乎没有更新。

1 个答案:

答案 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中修改域,则会刷新此结构。