You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2007/02/28 22:34:45 UTC
svn commit: r512987 -
/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
Author: mreutegg
Date: Wed Feb 28 13:34:44 2007
New Revision: 512987
URL: http://svn.apache.org/viewvc?view=rev&rev=512987
Log:
Polling thread should only get events if there are listeners.
Modified:
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java?view=diff&rev=512987&r1=512986&r2=512987
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java Wed Feb 28 13:34:44 2007
@@ -109,7 +109,6 @@
import java.util.Set;
import java.util.HashSet;
import java.util.Map;
-import java.util.Collections;
import java.io.InputStream;
import EDU.oswego.cs.dl.util.concurrent.Sync;
@@ -149,7 +148,7 @@
* List of event listener that are set on this WorkspaceManager to get
* notifications about local and external changes.
*/
- private final Set listeners = Collections.synchronizedSet(new HashSet());
+ private final Set listeners = new HashSet();
public WorkspaceManager(RepositoryService service, SessionInfo sessionInfo,
CacheBehaviour cacheBehaviour, int pollTimeout)
@@ -287,7 +286,10 @@
* @param listener the new listener.
*/
public void addEventListener(InternalEventListener listener) {
- listeners.add(listener);
+ synchronized (listeners) {
+ listeners.add(listener);
+ listeners.notify();
+ }
}
/**
@@ -295,7 +297,9 @@
* @param listener
*/
public void removeEventListener(InternalEventListener listener) {
- listeners.remove(listener);
+ synchronized (listeners) {
+ listeners.remove(listener);
+ }
}
/**
@@ -627,7 +631,10 @@
}
try {
// notify listener
- InternalEventListener[] lstnrs = (InternalEventListener[]) listeners.toArray(new InternalEventListener[listeners.size()]);
+ InternalEventListener[] lstnrs;
+ synchronized (listeners) {
+ lstnrs = (InternalEventListener[]) listeners.toArray(new InternalEventListener[listeners.size()]);
+ }
for (int i = 0; i < eventBundles.length; i++) {
for (int j = 0; j < lstnrs.length; j++) {
lstnrs[j].onEvent(eventBundles[i]);
@@ -987,7 +994,13 @@
try {
// get filters from listeners
List filters = new ArrayList();
- InternalEventListener[] iel = (InternalEventListener[]) listeners.toArray(new InternalEventListener[0]);
+ InternalEventListener[] iel;
+ synchronized (listeners) {
+ while (listeners.isEmpty()) {
+ listeners.wait();
+ }
+ iel = (InternalEventListener[]) listeners.toArray(new InternalEventListener[0]);
+ }
for (int i = 0; i < iel.length; i++) {
filters.addAll(iel[i].getEventFilters());
}