用于并发XML编辑的Java工具

用于并发XML编辑的Java工具,java,xml,concurrency,editing,Java,Xml,Concurrency,Editing,我正在构建一个用户界面,用户必须能够同时对网页进行编辑。我们90%以上的应用程序采用的标准技术是乐观锁定;也就是说,我们希望并发编辑很少发生,如果发生,第二个提交者就会出错并丢失编辑 在应用程序的有限部分中,需要并发编辑,我们需要以更好的方式处理这些编辑。锁定以强制顺序编辑不是一个选项,因为在用户离开屏幕而未显式解锁的情况下,需要在锁定上超时,这将非常烦人 如果可能,我希望将表单数据保存为XML,但允许对该文档进行并发编辑 我简要研究过的一些工具可能能够做到这一点,或者为如何最好地处理它提供一些

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

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

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

我简要研究过的一些工具可能能够做到这一点,或者为如何最好地处理它提供一些灵感:

apachewave(googlewave)

暴徒


有人对能够处理这个问题的工具包或技术有更多的建议吗?感谢您的帮助。

这里有两种基本算法可以帮助您:

1,这是Apache Wave的背后。

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

  • 对所有编辑事件进行健壮的跨浏览器捕获和分解可能很难实现

  • 在出现网络错误/超时的情况下,无法轻松恢复多个通信代理的同步状态

  • 2,这是谷歌Mobwrite的幕后推手。

    这是基于计算编辑副本和一些基本状态之间的差异,即所谓的“阴影”。然后合并并发差异。可以轻松计算文档任意两种状态之间的差异,因此从同步包丢失中恢复不会有问题。下面将详细说明此技术


    面对与您类似的需求,我的解决方案基于第二种方法,因为它简单而健壮。最初的Mobwrite实现使用Python后端,所以我用Java重新实现了它。您可以找到一个工作原型,它是一个简单的基于web的协作编辑器,在我们的专有软件中采用相同的方法之前,我制作了它作为概念证明。

    干得好,我在GitHub上主持了您的项目。对于我的需求来说,操作转换是过度的。我需要合并的是一个项目列表,使用两个列表之间的“相对差异”作为集合来计算差异很容易。相对差异一方面给出添加的内容,另一方面给出删除的内容。