Chetan Mehrotra created SLING-4564:
--------------------------------------
Summary: Use a single listener registered for multiple path in JCR
installer
Key: SLING-4564
URL: https://issues.apache.org/jira/browse/SLING-4564
Project: Sling
Issue Type: Improvement
Components: Installer
Affects Versions: JCR Installer 3.1.8
Reporter: Chetan Mehrotra
Sling Jcr installer currently registers one listener per watched folder. On an
application like AEM this results in ~150 listeners out of total 210 to belong
to Jcr installer.
Recently Jackrabbit introduced support for adding [additional
path|https://github.com/apache/jackrabbit/blob/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/JackrabbitEventFilter.java#L232]
to listen to as part of JCR-3745. This can be leveraged by the Jcr installer
to avoid registering multiple listeners and instead use one listener.
The above feature can be used in following form
{code}
String[] paths = searchPaths.toArray(new String[]{});
JackrabbitEventFilter eventFilter = new JackrabbitEventFilter()
.setAbsPath(paths[0])
.setEventTypes(Event.NODE_ADDED |
Event.NODE_REMOVED |
Event.NODE_MOVED |
Event.PROPERTY_ADDED |
Event.PROPERTY_CHANGED |
Event.PROPERTY_REMOVED )
.setIsDeep(true)
.setNoLocal(false)
.setNoExternal(true);
if (paths.length > 1) {
eventFilter.setAdditionalPaths(paths);
}
JackrabbitObservationManager observationManager =
(JackrabbitObservationManager)
adminSession.getWorkspace().getObservationManager();
observationManager.addEventListener(this, eventFilter);
{code}
This would allow more efficient observation processing and avoid putting load
on system as Oak currently maintains one queue per listener.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)