一个一般性的问题,让我开始如何解决这个问题:
如何确保一旦更改了DB记录,其他用户也会在他们的浏览器中看到这一点?或者至少在浏览器刷新的时候?
框架: java、jsf facelets、seam、richfaces、EJB、hibernate、jboss中的maven。
稍作描述:
我有一个web应用程序,将由几个用户(2-10)使用。他们管理医疗设备的维修和维护记录,即有新的DB条目或DB内容的更新。
我用几个浏览器并行地进行了测试,到目前为止,在刷新浏览器(不可靠)之后,我看到了一些变化(不可靠),但肯定是在我注销和重新登录时。这不是我想要的行为。用户希望每天最多登录一次。
非常感谢您的提示!
发布于 2014-10-15 08:00:50
刷新新数据之前的一个要点是保证用户在某种事务上下文中工作,这样用户A就不会在您的DB上变异一行,而用户B将删除该行。
一旦确保用户可以使用CRUD (创建、读取、更新、删除)共享数据,而不会由于缺少事务上下文而产生负面影响,我看到了更新数据的两种基本可能性:
拉出
在刷新页面时,按下F5或诸如“刷新”、“搜索”等链接(例如,对服务器的任何请求),您的服务器应该始终拥有其上下文中更新最多的数据(在缓存的情况下,您希望保证服务器上下文知道更新的数据)。一旦这样的请求到达您的服务器,它就应该根据其会话上下文和/或数据库返回当前的“最新”状态(可能在步骤4中有用户修改记录,但在第5步中将中止),而在这种情况下,数据可能已经在事务内的数据库上被修改,其他用户应该以一种其他用户应该看到的“临时”修改数据的方式进行修改)。
因此,为了刷新您的用户,您可以使用您的前端(并向您发出请求),让您的用户拉出新的数据。
注意:任何请求都可以用于更新相应会话的任何会话存储数据。例如,并不是第一个让所有Servlets子类的MainServlet都能保证对任何请求的会话上下文进行更新。
PUSH
如果您的用户只是盯着屏幕,而没有在UI上进行任何交互,那么您希望将更新的信息“推送”给他们。正如我所知道的,使用HTTP(S)只能使用客户端脚本“模拟”用户输入并触发某种“传递最新数据”请求。
希望我能给出一些初步的提示;)
https://stackoverflow.com/questions/26377118
复制相似问题