具有常规数据库操作的多用户Web应用程序

时间:2014-10-15 07:44:48

标签: java hibernate jboss seam

一般性问题,让我开始如何解决这个问题:

如何确保一旦更改了DB记录,其他用户也会在浏览器中看到这一点?或者至少在浏览器刷新时?

框架:java,jsf facelets,seam,richfaces,EJB,hibernate,jboss中的maven。

一点描述:

我有一个Web应用程序,将由几个用户使用(2-10)。他们管理医疗设备的维修和维护记录,即有新的DB条目或DB内容的更新。

我测试了几个浏览器并行,到目前为止,没有调查,我看到更改一段时间后我刷新浏览器(不可靠),但肯定当我再次注销时。这不是我想要提供的行为。用户希望每天最多登录一次。

非常感谢您的提示!

1 个答案:

答案 0 :(得分:1)

刷新新数据之前的一个重点是确保您的用户在某种事务上下文中工作,这样当用户B即将删除此行时,用户A不会改变数据库中的行。

一旦确保您的用户可以CRUD(创建,读取,更新,删除)共享数据而不会因为缺少事务上下文而产生负面影响,我会看到更新数据的两种基本可能性:

<强> PULL

通过按F5或“刷新”,“搜索”等链接刷新页面(例如,对服务器的任何请求),您的服务器应始终在其上下文中具有最新数据(如果是缓存和所以你要保证你的服务器上下文知道更新的数据)。一旦这样的请求到达您的服务器,它应该根据其会话上下文和/或数据库返回当前“最新”状态(可能在步骤4中有一个用户需要修改记录但在5的步骤5中将中止在这种情况下,数据可能已经在事务内的数据库中被修改,其他用户应该看到这个“临时”修改过的数据。)

因此,要刷新您的用户,请使用您的前端(以及向您发送请求)来提取新数据。

注意:任何请求都可用于更新相应会话的任何会话存储数据。你不会是第一个拥有例如所有Servlet子类化MainServlet的人,它保证在任何请求上更新sessioncontext。

<强> PUSH

如果您的用户只是盯着屏幕而没有在UI上进行任何互动,那么您希望将更新的信息“推送”给他们。正如我所知道的那样使用HTTP(S)你只能使用客户端脚本来“模拟”用户输入并触发某种“提供最新数据”请求。

希望我能提供一些初步的提示;)