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