这个Q要求资源/方向而不是具体答案。我们希望了解以下问题的Vaadin架构。
我们的应用程序是事件驱动的,事件这里是服务器端事件。 当我们的应用程序从服务器上的另一个独立应用程序中听到时,它会询问前端(人类)用户 填写表格,等到用户做,然后根据用户说的话继续。
我们的后端流程,例如processB
正在调用Vaadin布局上的方法来做事。那个方法,比如说methodA()
应该
(1)工作正常。但是,该方法在处理前端表单之前返回。我们在这里观察到的这个和其他一些东西表明Vaadin正在运行
methodA()
的两个不同主题。所以,当我们调用
ourUI.methodA();
启动并运行2个不同的线程来执行它。
这可能是真的吗? Vaadin的逻辑是什么? 不是来自应用程序的上一次运行的线程仍然保留在服务器上 - 我仔细检查了
让进程等待Vaadin事件的最佳方法是什么?有没有办法建立一个独立的线程,即一个不受Vaadin UI控制的线程,等待Vaadin事件?
我们可以processB
加入methodA()
,以便它等到methodA()
返回。但我不认为这是最好的方式。并且我不知道如何抓住Vaadin线程到join()
它。而且,那些(看似)2 methodA()
个线程正在破坏它。
我们可以为methodA()
返回的内容保留一个令牌,并让processB
密切关注它,等待值写入其中。仍然 - 必须有更好的方法。
我们将processB
合并到Vaadin UI(尚未开发的早期阶段),以便在UI终止之前一直运行。它不再在ourUI
之外。这如何简化事情?
注意:我们只为一个会话/用户提供了一个用户界面 - 不允许按规格显示多个标签,并在一个用户界面/用户上设置一个后端进程
我们在Java 1.7和Tomcat 8上使用Vaadin 7.7
// -------------------------
编辑:
我们的后端流程processB
本身就是Runnable
并控制着整个逻辑。它必须等待前端线程返回并传递值。我正在寻找的是如何触发这一点 - 在前端事件返回时获取值。 processB
不会继续,直到从中获取此值前端。