You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by to...@apache.org on 2014/10/28 13:38:03 UTC

svn commit: r1634858 - in /sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger: ./ impl/

Author: tommaso
Date: Tue Oct 28 12:38:03 2014
New Revision: 1634858

URL: http://svn.apache.org/r1634858
Log:
SLING-4106 - adding exception handling for trigger (un)registration

Added:
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTriggerException.java   (with props)
Modified:
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTrigger.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/AbstractJcrEventTrigger.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ChainReplicateReplicationTrigger.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/RemoteEventReplicationTrigger.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ResourceEventReplicationTrigger.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ScheduledReplicationTrigger.java

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTrigger.java?rev=1634858&r1=1634857&r2=1634858&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTrigger.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTrigger.java Tue Oct 28 12:38:03 2014
@@ -33,13 +33,15 @@ public interface ReplicationTrigger exte
      * register a request handler to be triggered and returns a corresponding registration id
      *
      * @param requestHandler handler
+     * @throws org.apache.sling.replication.trigger.ReplicationTriggerException if registration fails
      */
-    void register(ReplicationRequestHandler requestHandler);
+    void register(ReplicationRequestHandler requestHandler) throws ReplicationTriggerException;
 
     /**
      * unregister the given handler, if existing
      *
      * @param requestHandler handler to unregister
+     * @throws org.apache.sling.replication.trigger.ReplicationTriggerException if unregistration fails
      */
-    void unregister(ReplicationRequestHandler requestHandler);
+    void unregister(ReplicationRequestHandler requestHandler) throws ReplicationTriggerException;
 }

Added: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTriggerException.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTriggerException.java?rev=1634858&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTriggerException.java (added)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTriggerException.java Tue Oct 28 12:38:03 2014
@@ -0,0 +1,33 @@
+/*
+ * 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.sling.replication.trigger;
+
+/**
+ * Exception representing errors during (un)registration of {@link org.apache.sling.replication.trigger.ReplicationTrigger}s
+ */
+public class ReplicationTriggerException extends Exception {
+
+    public ReplicationTriggerException(String message, Throwable throwable) {
+        super(message, throwable);
+    }
+
+    public ReplicationTriggerException(String message) {
+        super(message);
+    }
+}

Propchange: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTriggerException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/AbstractJcrEventTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/AbstractJcrEventTrigger.java?rev=1634858&r1=1634857&r2=1634858&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/AbstractJcrEventTrigger.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/AbstractJcrEventTrigger.java Tue Oct 28 12:38:03 2014
@@ -30,6 +30,7 @@ import org.apache.sling.jcr.api.SlingRep
 import org.apache.sling.replication.communication.ReplicationRequest;
 import org.apache.sling.replication.trigger.ReplicationRequestHandler;
 import org.apache.sling.replication.trigger.ReplicationTrigger;
+import org.apache.sling.replication.trigger.ReplicationTriggerException;
 import org.apache.sling.replication.util.ReplicationJcrUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,7 +56,7 @@ public abstract class AbstractJcrEventTr
         this.serviceUser = serviceUser;
     }
 
-    public void register(ReplicationRequestHandler requestHandler) {
+    public void register(ReplicationRequestHandler requestHandler) throws ReplicationTriggerException {
         Session session = null;
         try {
             session = getSession();
@@ -64,7 +65,7 @@ public abstract class AbstractJcrEventTr
             session.getWorkspace().getObservationManager().addEventListener(
                     listener, getEventTypes(), path, true, null, null, false);
         } catch (RepositoryException e) {
-            log.error("unable to register request handler {}", requestHandler, e);
+            throw new ReplicationTriggerException("unable to register handler " + requestHandler, e);
         } finally {
             if (session != null) {
                 session.logout();
@@ -72,7 +73,7 @@ public abstract class AbstractJcrEventTr
         }
     }
 
-    public void unregister(ReplicationRequestHandler requestHandler) {
+    public void unregister(ReplicationRequestHandler requestHandler) throws ReplicationTriggerException {
         JcrEventReplicationTriggerListener listener = registeredListeners.get(requestHandler.toString());
         if (listener != null) {
             Session session = null;
@@ -80,7 +81,7 @@ public abstract class AbstractJcrEventTr
                 session = getSession();
                 session.getWorkspace().getObservationManager().removeEventListener(listener);
             } catch (RepositoryException e) {
-                log.error("unable to register session", e);
+                throw new ReplicationTriggerException("unable to unregister handler " + requestHandler, e);
             } finally {
                 if (session != null) {
                     session.logout();

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ChainReplicateReplicationTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ChainReplicateReplicationTrigger.java?rev=1634858&r1=1634857&r2=1634858&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ChainReplicateReplicationTrigger.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ChainReplicateReplicationTrigger.java Tue Oct 28 12:38:03 2014
@@ -33,6 +33,7 @@ import org.apache.sling.replication.even
 import org.apache.sling.replication.event.ReplicationEventType;
 import org.apache.sling.replication.trigger.ReplicationRequestHandler;
 import org.apache.sling.replication.trigger.ReplicationTrigger;
+import org.apache.sling.replication.trigger.ReplicationTriggerException;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.event.Event;
@@ -60,7 +61,7 @@ public class ChainReplicateReplicationTr
         this.pathPrefix = pathPrefix;
     }
 
-    public void register(ReplicationRequestHandler requestHandler) {
+    public void register(ReplicationRequestHandler requestHandler) throws ReplicationTriggerException {
         // register an event handler on replication package install (on a certain path) which triggers the chain replication of that same package
         Dictionary<String, Object> properties = new Hashtable<String, Object>();
 
@@ -76,12 +77,12 @@ public class ChainReplicateReplicationTr
                 registrations.put(requestHandler.toString(), triggerPathEventRegistration);
             }
         } else {
-            log.error("cannot register trigger since bundle context is null");
+            throw new ReplicationTriggerException("cannot register trigger since bundle context is null");
 
         }
     }
 
-    public void unregister(ReplicationRequestHandler requestHandler) {
+    public void unregister(ReplicationRequestHandler requestHandler) throws ReplicationTriggerException {
         ServiceRegistration serviceRegistration = registrations.get(requestHandler.toString());
         if (serviceRegistration != null) {
             serviceRegistration.unregister();

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/RemoteEventReplicationTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/RemoteEventReplicationTrigger.java?rev=1634858&r1=1634857&r2=1634858&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/RemoteEventReplicationTrigger.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/RemoteEventReplicationTrigger.java Tue Oct 28 12:38:03 2014
@@ -46,6 +46,7 @@ import org.apache.sling.replication.tran
 import org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider;
 import org.apache.sling.replication.trigger.ReplicationRequestHandler;
 import org.apache.sling.replication.trigger.ReplicationTrigger;
+import org.apache.sling.replication.trigger.ReplicationTriggerException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -82,20 +83,19 @@ public class RemoteEventReplicationTrigg
         this.scheduler = scheduler;
     }
 
-    public void register(ReplicationRequestHandler requestHandler) {
+    public void register(ReplicationRequestHandler requestHandler) throws ReplicationTriggerException {
         try {
             log.info("applying remote event replication trigger");
 
             ScheduleOptions options = scheduler.NOW();
             options.name(requestHandler.toString());
             scheduler.schedule(new EventBasedReplication(requestHandler), options);
-
         } catch (Exception e) {
-            log.error("handler {} cannot be registered", requestHandler, e);
+            throw new ReplicationTriggerException("unable to register handler " + requestHandler, e);
         }
     }
 
-    public void unregister(ReplicationRequestHandler requestHandler) {
+    public void unregister(ReplicationRequestHandler requestHandler) throws ReplicationTriggerException {
         Future<HttpResponse> httpResponseFuture = requests.remove(requestHandler.toString());
         if (httpResponseFuture != null) {
             httpResponseFuture.cancel(true);

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ResourceEventReplicationTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ResourceEventReplicationTrigger.java?rev=1634858&r1=1634857&r2=1634858&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ResourceEventReplicationTrigger.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ResourceEventReplicationTrigger.java Tue Oct 28 12:38:03 2014
@@ -29,6 +29,7 @@ import org.apache.sling.replication.comm
 import org.apache.sling.replication.component.ManagedReplicationComponent;
 import org.apache.sling.replication.trigger.ReplicationRequestHandler;
 import org.apache.sling.replication.trigger.ReplicationTrigger;
+import org.apache.sling.replication.trigger.ReplicationTriggerException;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.event.Event;
@@ -77,7 +78,7 @@ public class ResourceEventReplicationTri
         registrations.clear();
     }
 
-    public void register(ReplicationRequestHandler requestHandler) {
+    public void register(ReplicationRequestHandler requestHandler) throws ReplicationTriggerException {
         // register an event handler on path which triggers the agent on node / property changes / addition / removals
         Dictionary<String, Object> properties = new Hashtable<String, Object>();
         properties.put(EventConstants.EVENT_TOPIC, new String[]{SlingConstants.TOPIC_RESOURCE_ADDED,
@@ -90,11 +91,11 @@ public class ResourceEventReplicationTri
         if (triggerPathEventRegistration != null) {
             registrations.put(requestHandler.toString(), triggerPathEventRegistration);
         } else {
-            log.error("cannot register event handler service for triggering agent");
+            throw new ReplicationTriggerException("cannot register event handler service for triggering agent");
         }
     }
 
-    public void unregister(ReplicationRequestHandler requestHandler) {
+    public void unregister(ReplicationRequestHandler requestHandler) throws ReplicationTriggerException {
         ServiceRegistration serviceRegistration = registrations.get(requestHandler.toString());
         if (serviceRegistration != null) {
             serviceRegistration.unregister();

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ScheduledReplicationTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ScheduledReplicationTrigger.java?rev=1634858&r1=1634857&r2=1634858&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ScheduledReplicationTrigger.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ScheduledReplicationTrigger.java Tue Oct 28 12:38:03 2014
@@ -24,6 +24,7 @@ import org.apache.sling.replication.comm
 import org.apache.sling.replication.communication.ReplicationRequest;
 import org.apache.sling.replication.trigger.ReplicationRequestHandler;
 import org.apache.sling.replication.trigger.ReplicationTrigger;
+import org.apache.sling.replication.trigger.ReplicationTriggerException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -49,13 +50,17 @@ public class ScheduledReplicationTrigger
         this.scheduler = scheduler;
     }
 
-    public void register(ReplicationRequestHandler requestHandler) {
-        ScheduleOptions options = scheduler.NOW(-1, secondsInterval);
-        options.name(requestHandler.toString());
-        scheduler.schedule(new ScheduledReplication(requestHandler), options);
+    public void register(ReplicationRequestHandler requestHandler) throws ReplicationTriggerException {
+        try {
+            ScheduleOptions options = scheduler.NOW(-1, secondsInterval);
+            options.name(requestHandler.toString());
+            scheduler.schedule(new ScheduledReplication(requestHandler), options);
+        } catch (Exception e) {
+            throw new ReplicationTriggerException("unable to register handler " + requestHandler, e);
+        }
     }
 
-    public void unregister(ReplicationRequestHandler requestHandler) {
+    public void unregister(ReplicationRequestHandler requestHandler) throws ReplicationTriggerException {
         scheduler.unschedule(requestHandler.toString());
     }