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 2008/07/16 14:38:30 UTC

svn commit: r677261 - in /jackrabbit/trunk: jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ jackrabbit-core/src/main/resources-filtered/org/apache/jackrabbit/core/

Author: mreutegg
Date: Wed Jul 16 05:38:30 2008
New Revision: 677261

URL: http://svn.apache.org/viewvc?rev=677261&view=rev
Log:
JCR-1672: Adding Event interface and isLocal()

Added:
    jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/
    jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/LocalEventListener.java   (with props)
Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/FilteredEventIterator.java
    jackrabbit/trunk/jackrabbit-core/src/main/resources-filtered/org/apache/jackrabbit/core/repository.properties

Added: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/LocalEventListener.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/LocalEventListener.java?rev=677261&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/LocalEventListener.java (added)
+++ jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/LocalEventListener.java Wed Jul 16 05:38:30 2008
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.api.observation;
+
+import javax.jcr.observation.EventListener;
+
+/**
+ * This is a marker interface that can be used by client code
+ * to inform the repository that this listener should only be
+ * invoked for local changes.
+ * Local changes are changes happening on the same node in a 
+ * clustered environment.
+ * If there is no clustered environment, changes are always
+ * happening on the "current node" and therefore this listener
+ * is treated like a usual event listener.
+ * 
+ * Please note: if the jcr implementation does not value this
+ *              interface, the listener is still invoked for
+ *              all changes happening in the repository.
+ *              Therefore it is advisable to check the repository
+ *              implementation on startup if this feature is
+ *              required! The {@link javax.jcr.Repository#getDescriptor(String)}
+ *              method with {@link #OPTION_LOCAL_EVENT_LISTENER} can
+ *              be used to test the implementation.
+ */
+public interface LocalEventListener extends EventListener {
+
+    /**
+     * The presence of this key indicates that this implementation
+     * supports local event listeners.
+     */
+     String OPTION_LOCAL_EVENT_LISTENER = "option.observation.localeventlistener";
+    
+}

Propchange: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/LocalEventListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java?rev=677261&r1=677260&r2=677261&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java Wed Jul 16 05:38:30 2008
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.core.observation;
 
+import org.apache.jackrabbit.api.observation.LocalEventListener;
 import org.apache.jackrabbit.core.ItemId;
 import org.apache.jackrabbit.core.SessionImpl;
 import org.apache.jackrabbit.core.state.ItemState;
@@ -238,7 +239,7 @@
             return;
         }
         // check if filtered iterator has at least one event
-        EventIterator it = new FilteredEventIterator(events, filter, denied);
+        EventIterator it = new FilteredEventIterator(events, filter, denied, listener instanceof LocalEventListener);
         if (it.hasNext()) {
             listener.onEvent(it);
         } else {

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/FilteredEventIterator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/FilteredEventIterator.java?rev=677261&r1=677260&r2=677261&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/FilteredEventIterator.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/FilteredEventIterator.java Wed Jul 16 05:38:30 2008
@@ -63,6 +63,10 @@
     private long pos = 0;
 
     /**
+     * Is this a local event listener
+     */
+    private final boolean isLocalEventListener;
+    /**
      * Creates a new <code>FilteredEventIterator</code>.
      *
      * @param c      an unmodifiable Collection of {@link javax.jcr.observation.Event}s.
@@ -74,10 +78,12 @@
      */
     public FilteredEventIterator(EventStateCollection c,
                                  EventFilter filter,
-                                 Set denied) {
+                                 Set denied,
+                                 boolean isLocalEventListener) {
         actualEvents = c.iterator();
         this.filter = filter;
         this.denied = denied;
+        this.isLocalEventListener = isLocalEventListener;
         fetchNext();
     }
 
@@ -155,12 +161,14 @@
         next = null;
         while (next == null && actualEvents.hasNext()) {
             state = (EventState) actualEvents.next();
-            // check denied set
-            if (denied == null || !denied.contains(state.getTargetId())) {
-                try {
-                    next = filter.blocks(state) ? null : new EventImpl(filter.getSession(), state);
-                } catch (RepositoryException e) {
-                    log.error("Exception while applying filter.", e);
+            if ( !state.isExternal() || !isLocalEventListener ) {
+                // check denied set
+                if (denied == null || !denied.contains(state.getTargetId())) {
+                    try {
+                        next = filter.blocks(state) ? null : new EventImpl(filter.getSession(), state);
+                    } catch (RepositoryException e) {
+                        log.error("Exception while applying filter.", e);
+                    }
                 }
             }
         }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/resources-filtered/org/apache/jackrabbit/core/repository.properties
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/resources-filtered/org/apache/jackrabbit/core/repository.properties?rev=677261&r1=677260&r2=677261&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/resources-filtered/org/apache/jackrabbit/core/repository.properties (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/resources-filtered/org/apache/jackrabbit/core/repository.properties Wed Jul 16 05:38:30 2008
@@ -69,3 +69,6 @@
 query.xpath.doc.order = false
 # Disabled since in default configuration document order is not supported.
 # See https://issues.apache.org/jira/browse/JCR-1237 for details
+
+# The presence of this key indicates that this implementation supports local event listeners.
+option.observation.localeventlistener = true