Osgi 在整个回购协议中跟踪节点上的移动操作
跟踪整个回购的节点移动操作。 节点可以是任何类型。 节点移动操作可以通过以下选项进行: 1.通过crxde拖放 2.从damadmin或siteadmin移动操作 有谁能告诉我移动操作可以跟踪哪些事件 创建事件侦听器以捕获节点移动事件。 使用的事件类型包括添加节点、移动节点和删除节点。 创建了一个配置,说明eventListner应该读取的路径,以捕获节点的移动事件(例如/content、/content/dam、/apps/myproject等/myproject) 但无法通过上述事件操作捕获事件。 移动节点(anytype)时,不会调用OneEvent方法Osgi 在整个回购协议中跟踪节点上的移动操作,osgi,aem-6,Osgi,Aem 6,跟踪整个回购的节点移动操作。 节点可以是任何类型。 节点移动操作可以通过以下选项进行: 1.通过crxde拖放 2.从damadmin或siteadmin移动操作 有谁能告诉我移动操作可以跟踪哪些事件 创建事件侦听器以捕获节点移动事件。 使用的事件类型包括添加节点、移动节点和删除节点。 创建了一个配置,说明eventListner应该读取的路径,以捕获节点的移动事件(例如/content、/content/dam、/apps/myproject等/myproject) 但无法通过上述事件操作捕获
@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服务中映射,您将无法获取系统用户详细信息,也无法跟踪事件。如果未执行此操作,则在刷新/重新启动捆绑包时,您应该能够在日志文件中看到错误 要求的逐步程序:
如果您参考第56行:我已将路径设置为“/content”,因此将在此侦听器中侦听“/content”下的所有事件,您可以通过将此路径更改为有限的文件夹集来限制侦听器。我希望您已经创建了服务用户并提供了所需的权限。与新系统用户一起,您必须在Sling Mapper服务中映射用户。如果用户未在Sling Mapper服务中映射,您将无法获取系统用户详细信息,也无法跟踪事件。如果未执行此操作,则在刷新/重新启动捆绑包时,您应该能够在日志文件中看到错误 要求的逐步程序:
如果您参考第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资源