Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 70846 invoked from network); 7 Jun 2006 09:37:18 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 7 Jun 2006 09:37:18 -0000 Received: (qmail 8655 invoked by uid 500); 7 Jun 2006 09:37:17 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 8579 invoked by uid 500); 7 Jun 2006 09:37:17 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 8538 invoked by uid 99); 7 Jun 2006 09:37:16 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 07 Jun 2006 02:37:16 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 07 Jun 2006 02:37:16 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id E1BD31A983A; Wed, 7 Jun 2006 02:36:55 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r412344 - /jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/observation/DelegatingObservationDispatcher.java Date: Wed, 07 Jun 2006 09:36:55 -0000 To: commits@jackrabbit.apache.org From: tripod@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20060607093655.E1BD31A983A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: tripod Date: Wed Jun 7 02:36:55 2006 New Revision: 412344 URL: http://svn.apache.org/viewvc?rev=412344&view=rev Log: JCR-453: add/remove dispatchers from DelegatingObservationDispatcher is not synchronized Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/observation/DelegatingObservationDispatcher.java Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/observation/DelegatingObservationDispatcher.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/observation/DelegatingObservationDispatcher.java?rev=412344&r1=412343&r2=412344&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/observation/DelegatingObservationDispatcher.java (original) +++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/observation/DelegatingObservationDispatcher.java Wed Jun 7 02:36:55 2006 @@ -19,9 +19,10 @@ import org.apache.jackrabbit.core.SessionImpl; import org.apache.jackrabbit.core.state.ChangeLog; import org.apache.jackrabbit.name.Path; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.HashSet; -import java.util.Iterator; import java.util.List; /** @@ -31,6 +32,11 @@ public class DelegatingObservationDispatcher extends EventDispatcher { /** + * Logger instance. + */ + private static Logger log = LoggerFactory.getLogger(DelegatingObservationDispatcher.class); + + /** * the set of dispatchers */ private final HashSet dispatchers = new HashSet(); @@ -41,7 +47,9 @@ * @param disp */ public void addDispatcher(ObservationManagerFactory disp) { - dispatchers.add(disp); + synchronized (dispatchers) { + dispatchers.add(disp); + } } /** @@ -50,7 +58,9 @@ * @param disp */ public void removeDispatcher(ObservationManagerFactory disp) { - dispatchers.remove(disp); + synchronized (dispatchers) { + dispatchers.remove(disp); + } } /** @@ -97,13 +107,21 @@ * @param session */ public void dispatch(List eventList, SessionImpl session, Path pathPrefix) { - Iterator iter = dispatchers.iterator(); - while (iter.hasNext()) { - ObservationManagerFactory fac = (ObservationManagerFactory) iter.next(); - EventStateCollection events = new EventStateCollection(fac, session, pathPrefix); - events.addAll(eventList); - events.prepare(); - events.dispatch(); + ObservationManagerFactory[] disp; + synchronized (dispatchers) { + disp = (ObservationManagerFactory[]) dispatchers.toArray( + new ObservationManagerFactory[dispatchers.size()]); + } + for (int i=0; i< disp.length; i++) { + EventStateCollection events = + new EventStateCollection(disp[i], session, pathPrefix); + try { + events.addAll(eventList); + events.prepare(); + events.dispatch(); + } catch (Exception e) { + log.error("Error while dispatching events.", e); + } } } }