将多个资产上载到DAM会影响工作流程过程步骤

时间:2014-07-01 23:28:09

标签: java osgi cq5 sling

我向question询问了如何访问上传的资产,将其发送给第三方服务,然后将资产替换为从第三方服务发回的资产。

我为这个问题找到了一个很棒的answer,使用它可以编写下面的代码,当我上传单个资源时效果很好,但是,当我上传时,工作同时上传多个资产。当我同时上传多个资产时,资产名称和内容不是上传的内容。例如,如果我上传1.jpg 2.jpg 3.jpg 4.jpg 5.jpg,那么它将随机替换1.jpg的内容2.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) {...}
   }

问题

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

注意:

  • 我已为Handler Advance
  • 选中Process Step选项
  • 从我的测试:如果我同时上传两个资产,一切都还可以......除此之外的任何事情都会导致问题。

1 个答案:

答案 0 :(得分:0)

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

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

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