use of javax.jcr.observation.Event in project jackrabbit by apache.
the class CachingHierarchyManagerConsistencyTest method testObservation.
public void testObservation() throws Exception {
final List<Exception> exceptions = new ArrayList<Exception>();
Thread writer = new Thread(new Runnable() {
public void run() {
try {
long end = System.currentTimeMillis() + TEST_DURATION * 1000;
Session s = getHelper().getSuperuserSession();
try {
log.info("Starting to replace nodes");
int i = 0;
while (System.currentTimeMillis() < end) {
replaceNodes(s, i++);
}
} finally {
s.logout();
}
} catch (RepositoryException e) {
exceptions.add(e);
}
}
});
List<EventListener> listeners = new ArrayList<EventListener>();
for (int i = 0; i < NUM_LISTENERS; i++) {
final Session session = getHelper().getSuperuserSession();
listeners.add(new EventListener() {
public void onEvent(EventIterator events) {
while (events.hasNext()) {
Event event = events.nextEvent();
String path = "n/a";
try {
if (event.getType() == Event.NODE_ADDED || event.getType() == Event.PROPERTY_ADDED) {
path = event.getPath();
session.getItem(path);
}
} catch (PathNotFoundException e) {
// ignore
} catch (RepositoryException e) {
log.error(e.toString() + " Unable to get item with path: " + path);
exceptions.add(e);
}
}
}
});
}
for (EventListener listener : listeners) {
superuser.getWorkspace().getObservationManager().addEventListener(listener, ALL_EVENTS, "/", true, null, null, false);
}
writer.start();
writer.join();
for (EventListener listener : listeners) {
superuser.getWorkspace().getObservationManager().removeEventListener(listener);
}
log.info("" + exceptions.size() + " exception(s) occurred.");
if (!exceptions.isEmpty()) {
throw exceptions.get(0);
}
}
use of javax.jcr.observation.Event in project jackrabbit by apache.
the class MixinTest method testMultipleMixinOnNode.
/**
* Tests event filtering on nodes with multiple mixins applied.
*/
public void testMultipleMixinOnNode() throws RepositoryException {
Node node1 = testRootNode.addNode(nodeName1, testNodeType);
node1.addMixin(mixReferenceable);
node1.addMixin(mixTitle);
Node node2 = testRootNode.addNode(nodeName2, testNodeType);
Node node3 = testRootNode.addNode(nodeName3, testNodeType);
node3.addMixin(mixTitle);
node3.addMixin(mixReferenceable);
testRootNode.save();
EventResult propertyAddedListener = new EventResult(log);
addEventListener(propertyAddedListener, new String[] { mixReferenceable }, Event.PROPERTY_ADDED);
try {
node1.setProperty(propertyName1, "test");
node2.setProperty(propertyName1, "test");
node3.setProperty(propertyName1, "test");
testRootNode.save();
Event[] added = propertyAddedListener.getEvents(DEFAULT_WAIT_TIMEOUT);
checkPropertyAdded(added, new String[] { nodeName1 + "/" + propertyName1, nodeName3 + "/" + propertyName1 });
} finally {
removeEventListener(propertyAddedListener);
}
}
use of javax.jcr.observation.Event in project jackrabbit by apache.
the class MixinTest method testDerivedMixin.
/**
* Checks if an event listener registered for a mixin type T also gets
* notifications for an event on a node with a mixin type which is derived
* from T.
*/
public void testDerivedMixin() throws RepositoryException {
Node node1 = testRootNode.addNode(nodeName1, testNodeType);
node1.addMixin(mixVersionable);
testRootNode.save();
EventResult propertyAddedListener = new EventResult(log);
// mix:versionable is derived from mix:referenceable
addEventListener(propertyAddedListener, new String[] { mixReferenceable }, Event.PROPERTY_ADDED);
try {
node1.setProperty(propertyName1, "test");
testRootNode.save();
Event[] added = propertyAddedListener.getEvents(DEFAULT_WAIT_TIMEOUT);
checkPropertyAdded(added, new String[] { nodeName1 + "/" + propertyName1 });
} finally {
removeEventListener(propertyAddedListener);
}
}
use of javax.jcr.observation.Event in project jackrabbit by apache.
the class MixinTest method testSingleMixin.
/**
* Tests event filtering with a single mixin type name.
*/
public void testSingleMixin() throws RepositoryException {
testRootNode.addNode(nodeName1, testNodeType).addMixin(mixReferenceable);
testRootNode.addNode(nodeName2, testNodeType);
testRootNode.addNode(nodeName3, testNodeType).addMixin(mixReferenceable);
testRootNode.save();
EventResult propertyAddedListener = new EventResult(log);
addEventListener(propertyAddedListener, new String[] { mixReferenceable }, Event.PROPERTY_ADDED);
try {
testRootNode.getNode(nodeName1).setProperty(propertyName1, "test");
testRootNode.getNode(nodeName2).setProperty(propertyName1, "test");
testRootNode.getNode(nodeName3).setProperty(propertyName1, "test");
testRootNode.save();
Event[] added = propertyAddedListener.getEvents(DEFAULT_WAIT_TIMEOUT);
checkPropertyAdded(added, new String[] { nodeName1 + "/" + propertyName1, nodeName3 + "/" + propertyName1 });
} finally {
removeEventListener(propertyAddedListener);
}
}
use of javax.jcr.observation.Event in project jackrabbit by apache.
the class VersionEventsTest method testXACheckin.
/**
* Test if checkin of a node in an XA transaction creates two add node
* events: one for the version and one for the frozen node.
*/
public void testXACheckin() throws Exception {
// create versionable node
Node n1 = testRootNode.addNode(nodeName1);
n1.addMixin(mixVersionable);
testRootNode.save();
EventResult listener = new EventResult(log);
addEventListener(listener, Event.NODE_ADDED);
// use a transaction
UserTransaction utx = new UserTransactionImpl(superuser);
// start transaction
utx.begin();
Version v = n1.checkin();
// commit transaction
utx.commit();
removeEventListener(listener);
Event[] events = listener.getEvents(1000);
Set paths = new HashSet();
for (int i = 0; i < events.length; i++) {
paths.add(events[i].getPath());
}
assertTrue("missing 'node added' event: " + v.getPath(), paths.contains(v.getPath()));
String frozenPath = v.getPath() + "/" + jcrFrozenNode;
assertTrue("missing 'node added' event: " + frozenPath, paths.contains(frozenPath));
}
Aggregations