在 Vaadin 7 中调用 VaadinSession getAttribute 时需要锁定

2023-11-22

我知道调用 setAttribute (link),但是 getAttribute 呢?

它是否正确?

public Object getMyAttribute() {
    return VaadinSession.getCurrent().getAttribute("myAttribute");
}

还是需要加锁?

public Object getMyAttribute() {
    try {
        VaadinSession.getCurrent().getLockInstance().lock();
        return VaadinSession.getCurrent().getAttribute("myAttribute");
    } finally {
        VaadinSession.getCurrent().getLockInstance().unlock();
    }
}

添加到巴顿的回答。虽然我不是这个主题的专家,但我在彻底阅读该文档后发布了我的理解,并阅读这个帖子罗兰·克鲁格。

结果:毫无意义的问题

虽然我不知道你问题的确切答案,但我相信这个问题没有实际意义。

让 Vaadin 7.1 及更高版本处理锁定自动为您服务。该文档表示,自动锁定路线优于手动锁定。

主线程上没有问题

如果访问VaadinSession从通常的 Vaadin 主用户界面线程内,则不需要显式锁定。在主线程中工作时,Vaadin 会根据需要自动锁定 VaadinSession。

应用程序的所有状态都存储在该会话对象中,因此 Vaadin 会定期访问和保护该会话。

其他主题

仅当从后台线程(从您启动的线程)访问 VaadinSession 时,锁定才会成为问题。

即使在这种情况下,Vaadin 也提供了两个选项,如果您传递一个参数,则会自动处理锁定Runnable到这些“访问”方法之一:

  • access方法上VaadinSession object
  • access方法上UI object

如果您的代码仅影响 VaadinSession 而没有触及任何UI对象(用户界面、布局、小部件组件等),然后使用第一个,VaadinSession.access()。另一方面,如果您的代码影响任何 UI 对象以及直接寻址 VaadinSession,请使用第二个,UI.access().

无需手动锁定

所以当你can在访问 VaadinSession 期间管理锁定,仅在后台线程中才需要这样做and由于某种原因你也不想打电话access方法。但我无法想象任何这样的理由。


欲了解更多讨论和常规图我做了,看到这个类似的问题,如何将数据放入会话变量并获取vaadin中不同页面的数据?.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Vaadin 7 中调用 VaadinSession getAttribute 时需要锁定 的相关文章

随机推荐