Java 如何消除同时访问Notes文档的可能性

Java 如何消除同时访问Notes文档的可能性,java,xpages,lotus-notes,lotus-domino,Java,Xpages,Lotus Notes,Lotus Domino,在我们的项目中,我们有以下内容: If doc.lock( timestamp ) then 'Document has not been locked previously 'Your code comes here 'Don‘t forget to unlock at the end End if 包含以下字段的Notes文档列表: 我们系统的用户ID我们的名字 系统B的身份验证对象的名称 系统B的令牌 我决定编写一个Java方法,每30分钟更新一次令牌。基本上,

在我们的项目中,我们有以下内容:

If doc.lock( timestamp ) then 
    'Document has not been locked previously
    'Your code comes here
    'Don‘t forget to unlock at the end
End if
包含以下字段的Notes文档列表:

我们系统的用户ID我们的名字 系统B的身份验证对象的名称 系统B的令牌 我决定编写一个Java方法,每30分钟更新一次令牌。基本上,它将遍历列表,对他们的系统执行REST方法,最后我们将获得一个新的令牌并将其写入文档。实际上没有那么多文档,通常少于10个,但是请求可能需要很多时间

然而,我偶然发现了一个问题。如果用户的请求将与令牌刷新同时执行,该怎么办?我们应该如何对待这种情况?我应该用锁之类的东西来消除这种可能性吗?在每个用户请求的代码中,我们应该仅在文档解锁时发送请求?我们怎么能等待解锁


提前感谢。

只需使用Notes中的默认锁定机制:需要在数据库属性中启用文档锁定。然后您可以执行以下操作:

If doc.lock( timestamp ) then 
    'Document has not been locked previously
    'Your code comes here
    'Don‘t forget to unlock at the end
End if

参数通常是用户名,那么为什么要使用时间戳作为“伪用户”呢“用户始终是代码的签名者,您需要区分不同的调用,因此使用时间戳来唯一标识会话。

如果令牌在30分钟后未刷新,并且用户请求被执行,会发生什么情况?如果请求被阻止,直到令牌被刷新,当令牌ref超时时会发生什么情况?”发生resh?仅将令牌存储在内存中并在用户请求传入且令牌过期时刷新令牌不是更容易吗?如果您有2个数据库副本会发生什么情况?仅供参考:默认情况下启用了文档锁定-测试并查看。“允许文档锁定”数据库属性的标签不正确。它应显示为“allo”w“跨副本锁定文档”或类似功能。是的,默认情况下启用软锁定,但这不会“标记”“文档已锁定,以便您可以将其用作标志…当默认情况下,第二个用户在数据库的同一实例中单击同一文档上的编辑时,您为什么需要使用标志?但是,从OP中不清楚他们在谈论Notes客户机中的用例。Notes文档锁定不起作用。”在web上,但是可以编写基于web的文档锁定过程。