gpt4 book ai didi

aem - CQ 5.6 反向复制 : Replication triggered, 但未找到或选择代理

转载 作者:行者123 更新时间:2023-12-02 04:44:11 26 4
gpt4 key购买 nike

我正在尝试为 CQ5.6 编写自定义文件上传组件,但我遇到了反向复制的问题。在 Publish 实例中创建的节点,但未复制到 Author 实例。复制器调用后,下一行出现在 error.log 中:

com.day.cq.replication.impl.ReplicatorImpl Replication triggered, but no agent found or selected.

复制代理已打开。在其他情况下,例如用户表单,复制工作成功,所以我认为问题出在我的代码中。有我使用的代码:

Node node = session.getNode(path);
ValueFactory valueFactory = session.getValueFactory();
Binary contentValue = valueFactory.createBinary(is);
Node parent = node.addNode(fileName, "nt:unstructured");
parent.setProperty(DELETED, false);
parent.setProperty(DESCRIPTION, description);
Node fileNode = parent.addNode(fileName, "nt:file");
fileNode.addMixin("mix:referenceable");
Node resNode = fileNode.addNode("jcr:content", "nt:resource");
resNode.setProperty(Property.JCR_DATA, contentValue);
Calendar lastModified = Calendar.getInstance();
lastModified.setTimeInMillis(lastModified.getTimeInMillis());
resNode.setProperty(Property.JCR_LAST_MODIFIED, lastModified);
parent.setProperty("cq:distribute", true);
parent.setProperty("cq:lastModified", Calendar.getInstance());
parent.setProperty("cq:lastModifiedBy", session.getUserID());
session.save();
replicator.replicate(session, ReplicationActionType.ACTIVATE, parent.getPath());
session.logout();

我应该怎么做才能使反向复制适用于我在 servlet 中创建的节点?

更新:根据 Tomek Rękawek 的回答,我更新了我的代码,但问题仍未解决。这是新代码:

ResourceResolver resourceResolver = resolverFactory.getAdministrativeResourceResolver(null);
Session session = resourceResolver.adaptTo(Session.class);
String path = (String) componentContext.getProperties().get(SAVEPATH);
Node node = session.getNode(path);
ValueFactory valueFactory = session.getValueFactory();
Binary contentValue = valueFactory.createBinary(is);
Node parent = node.addNode(fileName, "cq:Page");
Node jcrContent = parent.addNode("jcr:content", "cq:PageContent");
jcrContent.setProperty("cq:distribute", true);
jcrContent.setProperty("cq:lastModified", Calendar.getInstance());
jcrContent.setProperty("cq:lastModifiedBy", session.getUserID());
Node fileNode = jcrContent.addNode(fileName, "nt:file");
fileNode.addMixin("mix:referenceable");
Node resNode = fileNode.addNode("jcr:content", "nt:resource");
resNode.setProperty(Property.JCR_DATA, contentValue);
session.save();
session.logout();

最佳答案

反向复制是由作者实例执行的操作,而不是发布。对此负责的代理是作者的反向复制代理。它每 30 秒连接一次发布,并使用 cq:distribute 属性集收集页面节点。

为了反向复制您需要的图像:

  1. 创建cq:Page节点
  2. 在其下创建cq:PageContent节点并命名为jcr:content
  3. jcr:content 下创建您的图像节点并保存您的 session [已编辑]
  4. jcr:content 节点上设置 cq:distributecq:lastModifiedcq:lastModifiedBy 属性.
  5. 保存 session

创建页面包装输入流并反向复制它的示例方法:

private void reverseReplicateBinary(Session session, String parentPath, String name, InputStream is)
throws RepositoryException {
ValueFactory valueFactory = session.getValueFactory();
Node parent = session.getNode(parentPath);

Node page = JcrUtils.getOrCreateUniqueByPath(parent, name, "cq:Page");
Node jcrContent = page.addNode(Property.JCR_CONTENT, "cq:PageContent");
Node file = jcrContent.addNode("file", "nt:file");
Node resource = file.addNode(Property.JCR_CONTENT, "nt:resource");
resource.setProperty(Property.JCR_DATA, valueFactory.createBinary(is));
session.save();

jcrContent.setProperty("cq:lastModified", Calendar.getInstance());
jcrContent.setProperty("cq:lastModifiedBy", session.getUserID());
jcrContent.setProperty("cq:distribute", false);
session.save();
}

完整示例可以在 the gist 上找到.

就是这样。您无需手动调用复制器,作者实例将自动收集页面。

关于aem - CQ 5.6 反向复制 : Replication triggered, 但未找到或选择代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20162289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com