Very good blog Post http://experiencedelivers.adobe.com/cemblog/en/experiencedelivers/2012/04/event_handling_incq.html
Example of JCR event handling ...
import java.util.ArrayList;
import java.util.Arrays;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.observation.Event;
import javax.jcr.observation.EventIterator;
import javax.jcr.observation.EventListener;
import javax.jcr.observation.ObservationManager;
import org.apache.sling.jcr.api.SlingRepository;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
/** Genre implementation
* by Yogesh Upadhyay
*/
@Service
@Component(immediate=true,metatype=false)
@Properties({
@Property(name="service.description", value="Sample Event Handler Example"),
@Property(name="service.vendor", value="Adobe"),
})
public class NodeChangeObserver implements EventListener{
private Logger log = LoggerFactory.getLogger(getClass());
@Reference
private SlingRepository repository;
private Session session;
private ObservationManager observationManager;
protected void activate(ComponentContext context) throws Exception {
session = repository.loginAdministrative(null);
// Listen for changes to our orders
if (repository.getDescriptor(Repository.OPTION_OBSERVATION_SUPPORTED).equals("true")) {
observationManager = session.getWorkspace().getObservationManager();
final String[] types = { "nt:unstructured","sling:Folder" };
final String path = <Path for which you want to observe>;
observationManager.addEventListener(this, Event.NODE_ADDED, path, true, null, types, false);
log.error("Observing property changes to {} nodes under {}", Arrays.asList(types), path);
}
}
protected void deactivate(ComponentContext componentContext) throws RepositoryException {
if(observationManager != null) {
observationManager.removeEventListener(this);
}
if (session != null) {
session.logout();
session = null;
}
}
public void onEvent(EventIterator itr) {
log.error("Found event !!!!!!");
<Do whatever you want on event>
}
}