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;