Author: cziegeler
Date: Mon Mar 29 10:30:15 2010
New Revision: 928687

URL: http://svn.apache.org/viewvc?rev=928687&view=rev
Log:
SLING-1467 : Cancelling a job does not work

Modified:
    
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java

Modified: 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java?rev=928687&r1=928686&r2=928687&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java
 (original)
+++ 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java
 Mon Mar 29 10:30:15 2010
@@ -31,6 +31,7 @@ import javax.jcr.observation.EventListen
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.services.SlingSettingsService;
 import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
@@ -87,7 +88,7 @@ public abstract class AbstractRepository
     /** A local queue for writing received events into the repository. */
     protected final BlockingQueue<Event> writeQueue = new 
LinkedBlockingQueue<Event>();
 
-    @Reference
+    @Reference(policy=ReferencePolicy.DYNAMIC)
     protected DynamicClassLoaderManager classLoaderManager;
 
     /**
@@ -152,6 +153,15 @@ public abstract class AbstractRepository
 
     protected abstract void processWriteQueue();
 
+    protected ClassLoader getDynamicClassLoader() {
+        final DynamicClassLoaderManager dclm = this.classLoaderManager;
+        if ( dclm != null ) {
+            return dclm.getDynamicClassLoader();
+        }
+        // if we don't have a dynamic classloader, we return our classloader
+        return this.getClass().getClassLoader();
+    }
+
     /**
      * Deactivate this component.
      * @param context
@@ -274,8 +284,8 @@ public abstract class AbstractRepository
     protected Event readEvent(Node eventNode)
     throws RepositoryException, ClassNotFoundException {
         final String topic = 
eventNode.getProperty(EventHelper.NODE_PROPERTY_TOPIC).getString();
-        final Dictionary<String, Object> eventProps = 
EventHelper.readEventProperties(eventNode,
-                this.classLoaderManager.getDynamicClassLoader());
+        final ClassLoader cl = this.getDynamicClassLoader();
+        final Dictionary<String, Object> eventProps = 
EventHelper.readEventProperties(eventNode, cl);
 
         eventProps.put(JobStatusProvider.PROPERTY_EVENT_ID, 
eventNode.getPath());
         this.addEventProperties(eventNode, eventProps);


Reply via email to