【问题标题】:generating sequence without duplicity xpages生成没有重复xpages的序列
【发布时间】:2018-01-29 15:29:02
【问题描述】:

我在 xpages 上有一个应用程序,需要为用户提供句柄编号,当我有两个用户同时尝试保存时,我遇到了重复编号的问题。我曾尝试使用 FTSearch 和 UpdateIndex,两者都不可行,因为它们会导致 xpage 速度变慢。我希望其他选项能够生成此序列而不会产生重复性并且不会影响服务器性能。

【问题讨论】:

  • 您需要在一个中心位置(服务器上的代理)进行号码处理......除此之外,您将始终有重复号码......
  • 代理和 XPage 一直是个奇怪的组合。改用托管 bean

标签: xpages custom-controls lotus-notes


【解决方案1】:

您需要区分:单个服务器或多个服务器(假设您不使用 Notes 客户端)。

单服务器: 创建一个部署“应用程序托管 bean”的托管 bean。在加载时,该 bean 从按您的序列降序排序的视图中获取第一个条目。它把那个留在记忆中。内部调用单例的同步函数getNextNumber() 为您提供所需的值

多台服务器: a)他们不能“看到”彼此(远程复制):更改您的序列以包含服务器前缀。或者:仅在复制后添加序列号。

b) 他们在 https 上看到对方: 设计在单个服务器上执行相同操作的“应用程序管理的 bean”,只是它们向“主人”询问编号。然后,您需要实现一种机制,允许在主服务器无响应时动态更改主服务器。某种协商协议。 (集群环境中的常见挑战)。

【讨论】:

  • 单例模式非常麻烦,因为 XPages 中的类加载器“疯狂”。只是说。
  • 不适用于应用范围 bean
  • 我从来没有遇到过在 NSF 中触发代码而不是通过预加载的类加载器的问题。如果使用 Java 和对象,延迟加载是比预加载更好的方法——我曾经有一个 initApp() 方法来加载我可能需要的所有 applicationScope 变量,现在我倾向于只加载我需要的那些。因为这个方法应该只在保存时才需要(唯一的数字必须在提交给 NSF 时设置),我不知道任何关于类加载器会导致问题的博客场景,因为它从不需要预加载,只是懒惰-加载。
  • 对于多服务器方法,一种选择是定义主服务器。对于其他服务器,如果主服务器不可用,请设置“TEMP_”+当前服务器+顺序,并使用它。然后使用代理,或者更好的延迟加载代码,用适当的顺序(和相关文档)修复任何“TEMP_”代码。序号生成(单个服务器或多个)不是 Domino 特定的问题。
【解决方案2】:

这个问题更多地与 Domino 相关,XPages 没什么特别的。阅读 IBM here 的一些建议并将其作为代理实施。您可以在 PostSave 事件中调用它。

还有更多你要忍受的事情:

  • 在集群或多副本环境中,只允许一台服务器 授予序列号,是什么使它成为“单点故障”
  • 数字序列中的空白会发生什么?允许吗?
  • 在 XPages 中,您有比代理更多的选项,请考虑使用 servlet 或 RPC 调用

【讨论】:

  • 代理在 XPages 中没有地位,除非覆盖遗留代码。无论如何,它们同时运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多