Return-Path: X-Original-To: apmail-sling-commits-archive@www.apache.org Delivered-To: apmail-sling-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D531E10AC1 for ; Wed, 30 Oct 2013 12:02:03 +0000 (UTC) Received: (qmail 46016 invoked by uid 500); 30 Oct 2013 12:02:00 -0000 Delivered-To: apmail-sling-commits-archive@sling.apache.org Received: (qmail 45948 invoked by uid 500); 30 Oct 2013 12:01:57 -0000 Mailing-List: contact commits-help@sling.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@sling.apache.org Delivered-To: mailing list commits@sling.apache.org Received: (qmail 45941 invoked by uid 99); 30 Oct 2013 12:01:56 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Oct 2013 12:01:56 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Oct 2013 12:01:54 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 8AF45238883D; Wed, 30 Oct 2013 12:01:34 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1537059 - in /sling/trunk/bundles: scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/ Date: Wed, 30 Oct 2013 12:01:34 -0000 To: commits@sling.apache.org From: justin@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20131030120134.8AF45238883D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: justin Date: Wed Oct 30 12:01:34 2013 New Revision: 1537059 URL: http://svn.apache.org/r1537059 Log: SLING-3216 - an event is now posted when a BVP is registered or unregistered which causes the script cache to be cleared Modified: sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ContextBvpCollector.java sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java Modified: sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java?rev=1537059&r1=1537058&r2=1537059&view=diff ============================================================================== --- sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java (original) +++ sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java Wed Oct 30 12:01:34 2013 @@ -23,9 +23,11 @@ import static org.apache.sling.scripting import java.util.ArrayList; import java.util.Collection; +import java.util.Dictionary; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Properties; import javax.script.ScriptEngineFactory; @@ -33,14 +35,18 @@ import org.apache.felix.scr.annotations. import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Deactivate; 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.commons.osgi.PropertiesUtil; import org.apache.sling.scripting.api.BindingsValuesProvider; import org.apache.sling.scripting.api.BindingsValuesProvidersByContext; import org.apache.sling.scripting.core.impl.helper.SlingScriptEngineManager; import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; import org.osgi.service.component.ComponentContext; +import org.osgi.service.event.Event; +import org.osgi.service.event.EventAdmin; import org.osgi.util.tracker.ServiceTracker; import org.osgi.util.tracker.ServiceTrackerCustomizer; import org.slf4j.Logger; @@ -53,6 +59,10 @@ public class BindingsValuesProvidersByCo private final Map customizers = new HashMap(); public static final String [] DEFAULT_CONTEXT_ARRAY = new String [] { DEFAULT_CONTEXT }; + + private static final String TOPIC_CREATED = "org/apache/sling/scripting/core/BindingsValuesProvider/CREATED"; + private static final String TOPIC_MODIFIED = "org/apache/sling/scripting/core/BindingsValuesProvider/MODIFIED"; + private static final String TOPIC_REMOVED = "org/apache/sling/scripting/core/BindingsValuesProvider/REMOVED"; private ServiceTracker bvpTracker; private ServiceTracker mapsTracker; @@ -62,7 +72,10 @@ public class BindingsValuesProvidersByCo @Reference private SlingScriptEngineManager scriptEngineManager; - + + @Reference(policy = ReferencePolicy.DYNAMIC) + private EventAdmin eventAdmin; + private abstract class ContextLoop { Object apply(ServiceReference ref) { final Object service = bundleContext.getService(ref); @@ -150,11 +163,17 @@ public class BindingsValuesProvidersByCo return results; } - + private String [] getContexts(ServiceReference reference) { return PropertiesUtil.toStringArray(reference.getProperty(CONTEXT), new String[] { DEFAULT_CONTEXT }); } + private Event newEvent(final String topic, final ServiceReference reference) { + Dictionary props = new Properties(); + props.put("service.id", reference.getProperty(Constants.SERVICE_ID)); + return new Event(topic, props); + } + public Object addingService(final ServiceReference reference) { if(bundleContext == null) { synchronized (pendingRefs) { @@ -166,6 +185,9 @@ public class BindingsValuesProvidersByCo @Override protected void applyInContext(ContextBvpCollector c) { c.addingService(reference); + if (eventAdmin != null) { + eventAdmin.postEvent(newEvent(TOPIC_CREATED, reference)); + } } }.apply(reference); } @@ -175,6 +197,9 @@ public class BindingsValuesProvidersByCo @Override protected void applyInContext(ContextBvpCollector c) { c.modifiedService(reference, service); + if (eventAdmin != null) { + eventAdmin.postEvent(newEvent(TOPIC_MODIFIED, reference)); + } } }.apply(reference); } @@ -190,6 +215,9 @@ public class BindingsValuesProvidersByCo @Override protected void applyInContext(ContextBvpCollector c) { c.removedService(reference, service); + if (eventAdmin != null) { + eventAdmin.postEvent(newEvent(TOPIC_REMOVED, reference)); + } } }.apply(reference); } Modified: sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ContextBvpCollector.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ContextBvpCollector.java?rev=1537059&r1=1537058&r2=1537059&view=diff ============================================================================== --- sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ContextBvpCollector.java (original) +++ sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ContextBvpCollector.java Wed Oct 30 12:01:34 2013 @@ -92,9 +92,7 @@ class ContextBvpCollector { Object serviceId = ref.getProperty(Constants.SERVICE_ID); if (genericBindingsValuesProviders.remove(serviceId) == null) { for (Map coll : langBindingsValuesProviders.values()) { - if (coll.remove(service) != null) { - return; - } + coll.remove(serviceId); } } } 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=1537059&r1=1537058&r2=1537059&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 Wed Oct 30 12:01:34 2013 @@ -115,7 +115,8 @@ import org.slf4j.LoggerFactory; value={"org/apache/sling/api/resource/Resource/*", "org/apache/sling/api/resource/ResourceProvider/*", "javax/script/ScriptEngineFactory/*", - "org/apache/sling/api/adapter/AdapterFactory/*"}) + "org/apache/sling/api/adapter/AdapterFactory/*", + "org/apache/sling/scripting/core/BindingsValuesProvider/*"}) }) @Reference(name="Servlet", referenceInterface=javax.servlet.Servlet.class, cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE, policy=ReferencePolicy.DYNAMIC) @@ -1079,6 +1080,9 @@ public class SlingServletResolver // adapter factory added or removed: we always flush // as adapting might be transitive flushCache = true; + } else if (topic.startsWith("org/apache/sling/scripting/core/BindingsValuesProvider/")) { + // bindings values provide factory added or removed: we always flush + flushCache = true; } else { // this is a resource event