2012-01-11 21 views
0

我们有一个处理多个用户的系统,用户可以花费10分钟的时间处理一件物品。一个重要的商业规则是每个项目只能由一个用户处理。我们通过一个版本属性(我们使用NHibernate)来确保这一点。如果有人处理某个项目,并且他们的版本号与数据库中的版本号不匹配,则其他人处理该项目,我们会拒绝他们的工作。很明显,对于我们的用户来说,这可能会让人感到沮丧,因为他们不知道其他人是否正在处理与他们相同的项目。此外,有能力合并数据不是一种选择,因为这是一个人的过程。在跟踪哪些用户打开物品时处理超时?

我能想到的最不显眼的想法是跟踪哪些用户打开每个项目。假设我打开了项目123,其他人打开它,然后他们可以看到谁打开了它。我用这种方法遇到的一个问题是,如果应用程序崩溃或用户意外关闭了他们的计算机会发生什么?由于用户不会经历通常的离开项目的步骤(例如后退按钮),因此当他们可能在家时,我们将有用于查看项目的用户的输入项123abc

我们也研究过用户能够锁定他们计划处理的项目的想法,然而,经过很多讨论,我们担心人们会开始锁定项目,或者被其他任务分心,午餐或也许回家过一天。如果某人锁定了物品并且必须尽快完成(例如紧急物品),则这可能尤其成问题。

有什么替代方案来实现这样的事情?

回答

1

我将提供2个功能来管理孤立锁

  1. 一段时间(比如30分钟)之后自动解除锁定。
  2. 提供监督器重写以释放锁。这样你不必等待30分钟。

一旦锁定被释放,用户无法提交他们提交的更改,而无需再次检出对象。

+0

这些都是很棒的点子。谢谢。 – Nosila 2012-01-12 12:23:59