Author: cziegeler
Date: Tue Jun 30 16:50:33 2009
New Revision: 789825

URL: http://svn.apache.org/viewvc?rev=789825&view=rev
Log:
SLING-1027 : Register event handler after the component has been activated to 
avoid a dependency loop (script resolver requires jcr resolver factory which 
sends events during bind/unbind of resource providers)

Modified:
    
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java

Modified: 
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java?rev=789825&r1=789824&r2=789825&view=diff
==============================================================================
--- 
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
 (original)
+++ 
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
 Tue Jun 30 16:50:33 2009
@@ -92,7 +92,9 @@
  * @scr.property name="service.description" value="Sling Servlet Resolver and
  *               Error Handler"
  * @scr.property name="service.vendor" value="The Apache Software Foundation"
- * @scr.service
+ * @scr.service interface="ServletResolver"
+ * @scr.service interface="SlingScriptResolver"
+ * @scr.service interface="ErrorHandler"
  * @scr.reference name="Servlet" interface="javax.servlet.Servlet"
  *                cardinality="0..n" policy="dynamic"
  * @scr.property name="event.topics" value="org/apache/sling/api/resource/*"
@@ -161,6 +163,8 @@
 
     private Map<ResourceCollector, Servlet> cache;
 
+    private ServiceRegistration eventHandlerReg;
+
     // ---------- ServletResolver interface -----------------------------------
 
     /**
@@ -177,7 +181,7 @@
         Servlet servlet = null;
 
         final String type = resource.getResourceType();
-        if(log.isDebugEnabled()) {
+        if (log.isDebugEnabled()) {
                log.debug("resolveServlet called for resource {}", resource);
         }
 
@@ -612,9 +616,18 @@
             this.cache = new ConcurrentHashMap<ResourceCollector, 
Servlet>(cacheSize);
         }
         createAllServlets(refs);
+
+        // and finally register as event listener
+        this.eventHandlerReg = 
this.context.getBundleContext().registerService(EventHandler.class.getName(),
+                this, properties);
     }
 
     protected void deactivate(ComponentContext context) {
+        // unregister event handler
+        if ( this.eventHandlerReg != null ) {
+            this.eventHandlerReg.unregister();
+            this.eventHandlerReg = null;
+        }
 
         // Copy the list of servlets first, to minimize the need for 
synchronization
         Collection<ServiceReference> refs;


Reply via email to