gpt4 book ai didi

java - 将多个 Assets 上传到 DAM 会扰乱工作流程步骤

转载 作者:太空宇宙 更新时间:2023-11-04 14:44:56 24 4
gpt4 key购买 nike

我问了question有关如何访问上传的 Assets ,将其发送到第三方服务,然后用第三方服务发回的 Assets 替换该 Assets 。

我得到了一个很棒的answer对于这个问题,我可以使用它编写下面的代码,当我上传单个 Assets 时,该代码运行良好,但是,当我同时上传多个 Assets 时,它不起作用。当我同时上传多个 Assets 时, Assets 名称和内容不是上传的。例如,如果我上传 1.jpg 2.jpg 3.jpg 4.jpg 5.jpg 那么它会随机用 2 替换 1.jpg 的内容。 jpg4.jpg 内容与 3.jpg

    public void execute(WorkItem item, WorkflowSession wfsession,MetaDataMap args) throws WorkflowException {
try
{
final Map<String, Object> map = new HashMap<String, Object>();
map.put( "user.jcr.session", wfsession.getSession());

ResourceResolver rr = resolverFactory.getResourceResolver(map);
String path = item.getWorkflowData().getPayload().toString();
Resource resource = rr.getResource(path);
InputStream is = resource.adaptTo(InputStream.class);
Rendition rendition = resource.adaptTo(Rendition.class);
Asset asset = rendition.getAsset();
//send the asset to service and get newInputStream from the service
InputStream newInputStream = myService.sendFile(is);
//replace the original rendition with the one received from the service
asset.addRendition(rendition.getName(),newInputStream,asset.getMimeType());
}
catch (Exception e) {...}
}

问题

  • 我想知道是否有办法更改我的代码来处理同时上传多个 Assets 的用例。我相信发生这种情况是因为在 CQ5 发送新 Assets 之前,我的服务返回输入流的响应可能尚未完成。有没有办法阻止这种情况,以便我的处理步骤一次只处理一张图像?

注意:

  • 我为我的流程步骤选中了Handler Advance选项
  • 根据我的测试:如果我同时上传两个 Assets ,一切都会正常……超过这个数量就会导致问题。

最佳答案

上传 Assets 会创建一个新的工作流实例(您可能会在工作流控制台中看到这些实例),其中包含单独的 WorkflowData、有效负载等。因此,开箱即用的工作流 < em>更新 Assets 即使对于同时上传的许多 Assets 也能正常工作。

如果您遇到此类情况的问题,请检查您的自定义流程和 myService 以查看它是否是线程安全的。请记住,OSGi 仅创建 @Component 的一个实例,因此此类组件不应具有依赖于当前请求、当前工作流程以及(通常)当前线程的状态。

作为一个经验法则:作为 OSGi 组件的类应该只声明包含可以在多个线程之间共享的对象的字段,例如其他服务和配置属性的 @Reference

关于java - 将多个 Assets 上传到 DAM 会扰乱工作流程步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24520699/

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