throws RepositoryException {
if (supportsObservation) {
// register local event listener
Collection subscr = sInfo.getSubscriptions();
if (subscr.size() != 0) {
ObservationManager obsMgr = sInfo.getSession().getWorkspace().getObservationManager();
List listeners = new ArrayList(subscr.size());
try {
for (Iterator it = subscr.iterator(); it.hasNext(); ) {
EventSubscription s = (EventSubscription) it.next();
EventListener listener = s.getLocalEventListener();
listeners.add(listener);
obsMgr.addEventListener(listener, EventSubscription.ALL_EVENTS,
"/", true, null, null, false);
}
return call.run();
} finally {
for (Iterator it = listeners.iterator(); it.hasNext(); ) {
try {
obsMgr.removeEventListener((EventListener) it.next());
} catch (RepositoryException e) {
// ignore and remove next
}
}
}