With AEM 6.2, a new sling observation support has been provided. The Sling alternative, called “ResourceChangeListener” is only recommended for resource change events. Non-resource events (ex. Workflow events), should be handled via Sling Event Handlers.
For more parameters to help resolve the choice between listener and sling events, refer to link
Benefits of ResourceChangeListener:
- Avoid long-lived sessions.
- Avoid Oak observation queue size issues.
Sample Implementation:
@Component(immediate = true) @Service(value = ResourceChangeListener.class) @Properties(value = { @Property(name = ResourceChangeListener.PATHS, value = { "/content/techrevel/intranet" }), @Property(name = ResourceChangeListener.CHANGES, value = { "CHANGED", "ADDED"}, propertyPrivate=true) }) public class PropertyMergeListener implements ResourceChangeListener { @Reference private ResourceResolverFactory resourceResolverFactory; /** * Called when a resource is added/deleted/modified in Target path * @param resourceChangeList List of resource Changes identified by Listener */ @Override public void onChange(List<ResourceChange> resourceChangeList) { Map<String, Object> param = new HashMap<String, Object>(); param.put(ResourceResolverFactory.SUBSERVICE, "SubServiceName"); ResourceResolver resourceResolver = null; try { resourceResolver = resourceResolverFactory.getServiceResourceResolver(param); for (ResourceChange resourceChange : resourceChangeList) { String resourcePath = resourceChange.getPath(); Resource resource = resourceResolver.getResource(resourcePath); ...
One thought on “Sling-based ResourceChangeListener”