Osgi 在整个回购协议中跟踪节点上的移动操作

Osgi 在整个回购协议中跟踪节点上的移动操作,osgi,aem-6,Osgi,Aem 6,跟踪整个回购的节点移动操作。 节点可以是任何类型。 节点移动操作可以通过以下选项进行: 1.通过crxde拖放 2.从damadmin或siteadmin移动操作 有谁能告诉我移动操作可以跟踪哪些事件 创建事件侦听器以捕获节点移动事件。 使用的事件类型包括添加节点、移动节点和删除节点。 创建了一个配置,说明eventListner应该读取的路径,以捕获节点的移动事件(例如/content、/content/dam、/apps/myproject等/myproject) 但无法通过上述事件操作捕获

跟踪整个回购的节点移动操作。 节点可以是任何类型。 节点移动操作可以通过以下选项进行: 1.通过crxde拖放 2.从damadmin或siteadmin移动操作

有谁能告诉我移动操作可以跟踪哪些事件

创建事件侦听器以捕获节点移动事件。 使用的事件类型包括添加节点、移动节点和删除节点。 创建了一个配置,说明eventListner应该读取的路径,以捕获节点的移动事件(例如/content、/content/dam、/apps/myproject等/myproject) 但无法通过上述事件操作捕获事件。 移动节点(anytype)时,不会调用OneEvent方法

@Component(immediate = true, service = EventListener.class,
        configurationPolicy = ConfigurationPolicy.REQUIRE)
public final class MoveEventListener implements EventListener {

    /* Config property to read paths */
    private static final String REPO_PATH = "content.rootpath";
    private static final String LAST_MODIFIED_BY = "cq:lastModifiedBy";

    @Reference
    private ResourceResolverFactory resolverFactory;
    private ResourceResolver resourceResolver;
    private Session session;
    private ObservationManager observationManager;

    private static final Logger log = LoggerFactory.getLogger(MoveEventListener.class);

    private String[] repoPaths;

    /**
     * Activate method.
     *
     * @param context **ComponentContext**
     */
    @Activate
    protected void activate(final ComponentContext context) {
        try {
            log.debug("Inside Activate Move Listener");
            resourceResolver = ResourceResolverUtils.getResourceResolver(resolverFactory,
                    GlobalConstants.SERVICE_ACCOUNT_MPASPRODUCTS_DISPATCHER_FLUSH);
            session = resourceResolver.adaptTo(Session.class);
            observationManager = session != null
                    ? (session.getWorkspace() != null ? session.getWorkspace().getObservationManager() : null)
                    : null;
            repoPaths = (String[]) context.getProperties().get(REPO_PATH);

            final String[] types = {"nt:unstructured", "sling:Folder", "sling:OrderedFolder", "nt:folder", "dam:Asset",
                    "cq:Page", "cq:PageContent"};
            /* final String[] types = {DamConstants.NT_DAM_ASSETCONTENT, StringConstants.NT_UNSTRUCTURED,
                    NameConstants.NT_PAGE, GlobalConstants.CQ_PAGECONTENT}; */

            if (repoPaths != null) {
                for (String path : repoPaths) {
                    log.debug("Paths: " + path);
                    if (observationManager != null) {
                        observationManager.addEventListener(this, Event.NODE_ADDED | Event.NODE_MOVED | Event.NODE_REMOVED,
                                path, true, null, types, false);
                        log.debug("Observing movement of nodes under {}", Arrays.asList(types), path);
                    }
                }
            }
        } catch (Exception e) {
            log.error("Error occured in {} activation ", getClass(), e);
        }
    }

    /**
     * Deactivate method.
     */
    @Deactivate
    protected void deactivate() {
        if (resourceResolver != null) {
            resourceResolver.close();
        }
        log.info(this + " component - deactiviated");
    }

    /**
     * Event handling class.
     *
     * @param events
     */
    @Override
    public void onEvent(final EventIterator events) {
        log.debug("Inside On event");
        while (events.hasNext()) {
            Event event = events.nextEvent();
            if (event.getType() == Event.NODE_ADDED || event.getType() == Event.NODE_MOVED || event.getType() == Event.NODE_REMOVED) {
                log.debug("Event occured in {}", event.getType());
                try {
                    String path = event.getPath();
                    Resource resource = resourceResolver.getResource(path);
                    if (resource != null) {
                        ValueMap value = resource.adaptTo(ValueMap.class);
                        if (value != null) {
                            String lastModifiedBy = value.get(LAST_MODIFIED_BY, String.class);
                            log.debug(path + " " + "Node moved" + " last modified by: "
                                    + lastModifiedBy);
                        }
                    }
                } catch (Exception e) {
                    log.error("Error found while processing event: ", e);
                }
            }
        }
    }
}

我希望您已经创建了服务用户并提供了所需的权限。与新系统用户一起,您必须在Sling Mapper服务中映射用户。如果用户未在Sling Mapper服务中映射,您将无法获取系统用户详细信息,也无法跟踪事件。如果未执行此操作,则在刷新/重新启动捆绑包时,您应该能够在日志文件中看到错误

要求的逐步程序:

  • 创建系统用户
  • 提供所需的权限
  • 在Sling映射服务中映射用户
  • 安装事件侦听器(部署代码)
  • 测试事件更改
  • 有关简单侦听器的更多详细信息,请参阅

    您可以参考下面的示例来侦听节点的添加或删除


    如果您参考第56行:我已将路径设置为“/content”,因此将在此侦听器中侦听“/content”下的所有事件,您可以通过将此路径更改为有限的文件夹集来限制侦听器。

    我希望您已经创建了服务用户并提供了所需的权限。与新系统用户一起,您必须在Sling Mapper服务中映射用户。如果用户未在Sling Mapper服务中映射,您将无法获取系统用户详细信息,也无法跟踪事件。如果未执行此操作,则在刷新/重新启动捆绑包时,您应该能够在日志文件中看到错误

    要求的逐步程序:

  • 创建系统用户
  • 提供所需的权限
  • 在Sling映射服务中映射用户
  • 安装事件侦听器(部署代码)
  • 测试事件更改
  • 有关简单侦听器的更多详细信息,请参阅

    您可以参考下面的示例来侦听节点的添加或删除


    如果您参考第56行:我提供的路径为“/content”,因此“/content”下的所有事件都将在此侦听器中侦听,您可以通过将此路径更改为有限的文件夹集来限制侦听器。

    我认为问题在于您没有注册到适当的事件

    据我所知,不确定在使用节点时会发生哪种事件。您可以使用查看系统中正在发生的事件,并注册到您感兴趣的事件

    当我将/content/dam/asset.jpg移动到/content/dam/test/asset.jpg时,我看到了一个您可以使用的事件。活动详情如下:

    Event Topic: org/apache/sling/event/notification/job/START
    event.job.topic: com/adobe/cq/workflow/payload/move/job
    payload.move.src.path: /content/dam/asset.jpg
    payload.move.dest.path: /content/dam/test/asset.jpg
    

    我认为问题在于你没有注册到适当的活动

    据我所知,不确定在使用节点时会发生哪种事件。您可以使用查看系统中正在发生的事件,并注册到您感兴趣的事件

    当我将/content/dam/asset.jpg移动到/content/dam/test/asset.jpg时,我看到了一个您可以使用的事件。活动详情如下:

    Event Topic: org/apache/sling/event/notification/job/START
    event.job.topic: com/adobe/cq/workflow/payload/move/job
    payload.move.src.path: /content/dam/asset.jpg
    payload.move.dest.path: /content/dam/test/asset.jpg
    

    是的,以上所有步骤都已就绪。能够通过捕获在cq:Page和cq:PageContent上移动的event.PROPERTY_CHANGED | event.NODE|来跟踪页面上的移动事件。但是,无法跟踪dam资产上的移动事件。编辑了我的答案并提供了一个示例事件侦听器,可侦听/content下的任何事件,可以是页面或dam资产,以上所有步骤都已就绪。能够通过捕获在cq:Page和cq:PageContent上移动的event.PROPERTY_CHANGED | event.NODE|来跟踪页面上的移动事件。但是,无法跟踪dam资源上的移动事件。已编辑我的答案,并提供了一个示例事件侦听器,可侦听/content下的任何事件,可以是页面或dam资源