我需要以编程方式创建 CQ 页面。但挑战在于页面名称/uri 应该是字符串 + 唯一编号的自动生成组合(例如 PT2000、PT2001)。
有人能告诉我一种在 CQ 中生成自动增量 ID/常量的方法吗?即使有多个并发请求,ID 也是唯一的?
我需要以编程方式创建 CQ 页面。但挑战在于页面名称/uri 应该是字符串 + 唯一编号的自动生成组合(例如 PT2000、PT2001)。
有人能告诉我一种在 CQ 中生成自动增量 ID/常量的方法吗?即使有多个并发请求,ID 也是唯一的?
我建议创建一个服务来管理存储库中某处的计数器,并且还充当 jcr EventListener。该服务应在 cq:Page 类型的父节点上侦听 NODE_ADDED 事件,并且一旦调用 onEvent,它就可以在该点分配唯一 ID。您显然希望使用同步,以便对 onEvent() 的重叠调用不会用完相同的 id。
使用为您提供 ID 并管理 volatile 实例变量内的计数器的服务,以确保一个线程的状态更改立即传达给所有其他线程。
只要您可以保证您的实现在单个作者节点上运行,这应该可以解决问题。在集群场景中,您还必须关心仅在一个节点上执行它。
您可以使用 GUID,Graphic User ID,生成的 ID 具有很大的唯一性。请参阅 wiki 参考http://en.wikipedia.org/wiki/Globally_unique_identifier 并创建 GUID: 在 Java 中创建 GUID
这将简化您验证号码是否唯一的工作,因此只需生成 ID 并使用该 ID 创建页面。
AEM 不会自动将数字附加到同名页面吗?
如果没有,那么这可能会失败,此时您从下一个数字重新开始。在这种情况下,最好的猜测应该足够了。