java – 在Vaadin 7中调用VaadinSession getAttribute时需要锁定
我知道调用setAttribute(
link)时有必要,但getAttirbute呢?
它是否正确? 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(); } } 解决方法
添加到
the answer by Patton.虽然我不是这个主题的专家,但是在仔细阅读文档后,我发表了我的理解,并阅读了RolandKrüger的
this post.
Upshot:模拟问题 虽然我不知道你问题的确切答案,但我认为这个问题没有实际意义. ?让Vaadin 7.1及更高版本自动处理锁定.该文档称自动锁定路径优于手动锁定. 主线程上没有问题 如果从通常的主要Vaadin用户界面线程中访问 您的所有应用程序状态都存储在该会话对象中,因此Vaadin会定期访问和保护该会话. 其他主题 如果从后台线程从您启动的线程访问VaadinSession,则锁定只是一个问题. 即使在这种情况下,Vaadin提供了一对选项,如果您将Runnable传递给这些“访问”方法中的任何一个,则会自动处理锁定: > 如果代码仅影响VaadinSession而不触及任何UI对象(用户界面,布局,窗口小部件组件等),则使用第一个VaadinSession.access().另一方面,如果您的代码影响任何UI对象以及直接寻址VaadinSession,请使用第二个UI.access(). 手动锁定不需要 因此,虽然您可以在访问VaadinSession期间管理锁定,但只有在后台线程中并且由于某种原因您不想调用任何一种访问方法时才需要这样做.但我无法想象任何这样的理由. 有关更多讨论以及我制作的groovy diagram,请参阅此类似问题,how to put data in session variable and get the data in different page in vaadin?. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |