用于并发XML编辑的Java工具

时间:2014-04-30 07:26:33

标签: java xml concurrency editing

我正在构建一个用户界面,用户必须能够在网页上同时进行编辑。我们应用程序90%以上采用的标准技术是乐观锁定;也就是说,我们期望并发编辑将很少发生,如果他们这样做,第二个提交者会收到错误并丢失编辑。

在应用程序的有限部分中,需要进行并发编辑,我们需要以更好的方式处理它们。锁定以强制顺序编辑不是一个选项,因为在用户离开屏幕而没有明确解锁的情况下锁定需要超时,这将非常烦人。

如果可能,我希望将表单数据保存为XML,但允许对此文档进行并发编辑。

我曾经简要介绍了一些可以做到这一点的工具,或者提供了一些如何最好地处理它的灵感:

Apache Wave(Google Wave)http://incubator.apache.org/wave/

MobWrite http://code.google.com/p/google-mobwrite/

有没有人有更多关于工具包或技术的建议可以解决这个问题?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

两种基本算法可以为您提供帮助:

<强> 1。 Operational transformation,这是Apache Wave的背后。

主要思想是捕获基本编辑事件并合并来自不同用户的并发事件流。虽然乍一看很简单,但这种方法可能需要复杂的实施:

  1. 强大的跨浏览器捕获和分解所有编辑事件可能很难实现

  2. 在网络错误/超时的情况下,没有简单的方法可以恢复多个通信代理的同步状态。

  3. <强> 2。 Differential sync,位于Google Mobwrite背后。

    这个基于计算编辑副本和某些基本状态之间的差异,所谓的&#34; shadow&#34;。然后合并并发差异。可以轻松地计算文档的任意两个任意状态之间的差异,因此从同步包丢失中恢复没有问题。以下tech talks record详细解释了这种技术。

    面对与您类似的要求,由于其简单性和健壮性,我在第二种方法上建立了解决方案。原始Mobwrite实现使用Python后端,因此我在Java中重新实现了它。你可以找到一个工作原型here,它是一个简单的基于网络的协作编辑器,我在我们的专有软件中采用相同的方法之前作为概念验证。