You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2016/10/19 10:19:44 UTC
svn commit: r1765572 - in /sling/trunk/bundles/servlets/resolver: ./
src/main/java/org/apache/sling/servlets/resolver/internal/
src/main/java/org/apache/sling/servlets/resolver/internal/helper/
src/main/java/org/apache/sling/servlets/resolver/jmx/
Author: cziegeler
Date: Wed Oct 19 10:19:44 2016
New Revision: 1765572
URL: http://svn.apache.org/viewvc?rev=1765572&view=rev
Log:
SLING-6006 : SlingServletResolver should move to new ResourceChangeListener API . Apply patch from Rachit Kumar.
Also updating to latest parent pom
Modified:
sling/trunk/bundles/servlets/resolver/pom.xml
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/helper/SlingServletConfig.java
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/SlingServletResolverCacheMBean.java
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/package-info.java
Modified: sling/trunk/bundles/servlets/resolver/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/pom.xml?rev=1765572&r1=1765571&r2=1765572&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/resolver/pom.xml (original)
+++ sling/trunk/bundles/servlets/resolver/pom.xml Wed Oct 19 10:19:44 2016
@@ -23,7 +23,7 @@
<parent>
<groupId>org.apache.sling</groupId>
<artifactId>sling</artifactId>
- <version>26</version>
+ <version>29</version>
<relativePath />
</parent>
@@ -85,7 +85,7 @@
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
+ <artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
@@ -94,6 +94,18 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.event</artifactId>
+ <version>1.3.1</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.component</artifactId>
+ <version>1.3.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.adapter</artifactId>
<version>2.0.4</version>
@@ -108,7 +120,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.commons.osgi</artifactId>
- <version>2.0.6</version>
+ <version>2.2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -119,11 +131,7 @@
</dependency>
<dependency>
<groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
+ <artifactId>osgi.core</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
@@ -148,9 +156,5 @@
<groupId>org.jmock</groupId>
<artifactId>jmock-junit4</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.scr.annotations</artifactId>
- </dependency>
</dependencies>
</project>
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=1765572&r1=1765571&r2=1765572&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 19 10:19:44 2016
@@ -52,8 +52,8 @@ import javax.servlet.http.HttpServletReq
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
+import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.PropertyUnbounded;
import org.apache.felix.scr.annotations.Reference;
@@ -75,11 +75,14 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.SyntheticResource;
+import org.apache.sling.api.resource.observation.ExternalResourceChangeListener;
+import org.apache.sling.api.resource.observation.ResourceChange;
+import org.apache.sling.api.resource.observation.ResourceChangeListener;
import org.apache.sling.api.scripting.SlingScript;
import org.apache.sling.api.scripting.SlingScriptResolver;
import org.apache.sling.api.servlets.OptingServlet;
import org.apache.sling.api.servlets.ServletResolver;
-import org.apache.sling.commons.osgi.OsgiUtil;
+import org.apache.sling.commons.osgi.PropertiesUtil;
import org.apache.sling.engine.ResponseUtil;
import org.apache.sling.engine.servlets.ErrorHandler;
import org.apache.sling.servlets.resolver.internal.defaults.DefaultErrorHandlerServlet;
@@ -110,26 +113,17 @@ import org.slf4j.LoggerFactory;
* The resolver uses an own session to find the scripts.
*
*/
-@Component(name="org.apache.sling.servlets.resolver.SlingServletResolver", metatype=true,
- label="%servletresolver.name", description="%servletresolver.description")
-@Service(value={ServletResolver.class, SlingScriptResolver.class, ErrorHandler.class, SlingRequestListener.class})
-@Properties({
- @Property(name="service.description", value="Sling Servlet Resolver and Error Handler"),
- @Property(name="event.topics", propertyPrivate=true,
- 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/scripting/core/BindingsValuesProvider/*"})
-})
-@Reference(name="Servlet", referenceInterface=javax.servlet.Servlet.class,
- cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE, policy=ReferencePolicy.DYNAMIC)
+@Component(name = "org.apache.sling.servlets.resolver.SlingServletResolver", metatype = true, label = "%servletresolver.name", description = "%servletresolver.description")
+@Service(value = { ServletResolver.class, SlingScriptResolver.class, ErrorHandler.class, SlingRequestListener.class })
+@Property(name = Constants.SERVICE_DESCRIPTION, value = "Apache Sling Servlet Resolver and Error Handler")
+@Reference(name = "Servlet", referenceInterface = javax.servlet.Servlet.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC)
public class SlingServletResolver
implements ServletResolver,
SlingScriptResolver,
SlingRequestListener,
ErrorHandler,
- EventHandler {
+ EventHandler,
+ ResourceChangeListener,ExternalResourceChangeListener {
/**
* The default servlet root is the first search path (which is usally /apps)
@@ -780,7 +774,7 @@ public class SlingServletResolver
private Map<String, Object> createAuthenticationInfo(final Dictionary<String, Object> props) {
final Map<String, Object> authInfo = new HashMap<String, Object>();
// if a script user is configured we use this user to read the scripts
- final String scriptUser = OsgiUtil.toString(props.get(PROP_SCRIPT_USER), null);
+ final String scriptUser = PropertiesUtil.toString(props.get(PROP_SCRIPT_USER), null);
if (scriptUser != null && scriptUser.length() > 0) {
authInfo.put(ResourceResolverFactory.USER_IMPERSONATION, scriptUser);
}
@@ -792,7 +786,7 @@ public class SlingServletResolver
/**
* Activate this component.
*/
- @SuppressWarnings("unchecked")
+ @Activate
protected void activate(final ComponentContext context) throws LoginException {
// from configuration if available
final Dictionary<?, ?> properties = context.getProperties();
@@ -818,7 +812,7 @@ public class SlingServletResolver
createAllServlets(refs);
// execution paths
- this.executionPaths = OsgiUtil.toStringArray(properties.get(PROP_PATHS), DEFAULT_PATHS);
+ this.executionPaths = PropertiesUtil.toStringArray(properties.get(PROP_PATHS), DEFAULT_PATHS);
if ( this.executionPaths != null ) {
// if we find a string combination that basically allows all paths,
// we simply set the array to null
@@ -838,10 +832,10 @@ public class SlingServletResolver
}
}
}
- this.defaultExtensions = OsgiUtil.toStringArray(properties.get(PROP_DEFAULT_EXTENSIONS), DEFAULT_DEFAULT_EXTENSIONS);
+ this.defaultExtensions = PropertiesUtil.toStringArray(properties.get(PROP_DEFAULT_EXTENSIONS), DEFAULT_DEFAULT_EXTENSIONS);
// create cache - if a cache size is configured
- this.cacheSize = OsgiUtil.toInteger(properties.get(PROP_CACHE_SIZE), DEFAULT_CACHE_SIZE);
+ this.cacheSize = PropertiesUtil.toInteger(properties.get(PROP_CACHE_SIZE), DEFAULT_CACHE_SIZE);
if (this.cacheSize > 5) {
this.cache = new ConcurrentHashMap<AbstractResourceCollector, Servlet>(cacheSize);
this.logCacheSizeWarning = true;
@@ -853,11 +847,19 @@ public class SlingServletResolver
this.getDefaultServlet();
// and finally register as event listener
- this.eventHandlerReg = context.getBundleContext().registerService(EventHandler.class.getName(), this,
- properties);
- this.plugin = new ServletResolverWebConsolePlugin(context.getBundleContext());
+ final Dictionary<String, Object> props = new Hashtable<String, Object>();
+ props.put("event.topics", new String[] {"javax/script/ScriptEngineFactory/*",
+ "org/apache/sling/api/adapter/AdapterFactory/*","org/apache/sling/scripting/core/BindingsValuesProvider/*" });
+ props.put(ResourceChangeListener.PATHS, "/");
+ props.put("service.description", "Apache Sling Servlet Resolver and Error Handler");
+ props.put("service.vendor","The Apache Software Foundation");
+
+ this.eventHandlerReg = context.getBundleContext()
+ .registerService(new String[] {ResourceChangeListener.class.getName(), EventHandler.class.getName()}, this, props);
+
+ this.plugin = new ServletResolverWebConsolePlugin(context.getBundleContext());
if (this.cacheSize > 0) {
try {
Dictionary<String, String> mbeanProps = new Hashtable<String, String>();
@@ -1067,7 +1069,6 @@ public class SlingServletResolver
public void handleEvent(final Event event) {
if (this.cache != null) {
boolean flushCache = false;
-
// we may receive different events
final String topic = event.getTopic();
if (topic.startsWith("javax/script/ScriptEngineFactory/")) {
@@ -1080,21 +1081,6 @@ public class SlingServletResolver
} 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 or resource provider event
-
- // if the path of the event is a sub path of a search path
- // we flush the whole cache
- final String path = (String) event.getProperty(SlingConstants.PROPERTY_PATH);
- if ( path != null ) {
- int index = 0;
- while (!flushCache && index < searchPaths.length) {
- if (path.startsWith(this.searchPaths[index])) {
- flushCache = true;
- }
- index++;
- }
- }
}
if (flushCache) {
flushCache();
@@ -1413,4 +1399,31 @@ public class SlingServletResolver
}
}
+
+ @Override
+ public void onChange(List<ResourceChange> changes) {
+ if (this.cache != null) {
+ boolean flushCache = false;
+ for(ResourceChange change : changes){
+ // we may receive different events
+ final String topic = change.getType().toString();
+ // this is a resource or resource provider event
+ // if the path of the event is a sub path of a search path
+ // we flush the whole cache
+ final String path = change.getPath();
+ if ( path != null ) {
+ int index = 0;
+ while (!flushCache && index < searchPaths.length) {
+ if (path.startsWith(this.searchPaths[index])) {
+ flushCache = true;
+ }
+ index++;
+ }
+ }
+ if (flushCache) {
+ flushCache();
+ }
+ }
+ }
+ }
}
Modified: sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/helper/SlingServletConfig.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/helper/SlingServletConfig.java?rev=1765572&r1=1765571&r2=1765572&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/helper/SlingServletConfig.java (original)
+++ sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/helper/SlingServletConfig.java Wed Oct 19 10:19:44 2016
@@ -58,6 +58,7 @@ public class SlingServletConfig implemen
/**
* @see javax.servlet.ServletConfig#getInitParameter(java.lang.String)
*/
+ @Override
public String getInitParameter(String name) {
Object prop = reference.getProperty(name);
return (prop == null) ? null : String.valueOf(prop);
@@ -66,14 +67,16 @@ public class SlingServletConfig implemen
/**
* @see javax.servlet.ServletConfig#getInitParameterNames()
*/
- public Enumeration<?> getInitParameterNames() {
- List<?> keys = Arrays.asList(reference.getPropertyKeys());
+ @Override
+ public Enumeration<String> getInitParameterNames() {
+ List<String> keys = Arrays.asList(reference.getPropertyKeys());
return Collections.enumeration(keys);
}
/**
* @see javax.servlet.ServletConfig#getServletContext()
*/
+ @Override
public ServletContext getServletContext() {
return servletContext;
}
@@ -81,6 +84,7 @@ public class SlingServletConfig implemen
/**
* @see javax.servlet.ServletConfig#getServletName()
*/
+ @Override
public String getServletName() {
return this.name;
}
Modified: sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/SlingServletResolverCacheMBean.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/SlingServletResolverCacheMBean.java?rev=1765572&r1=1765571&r2=1765572&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/SlingServletResolverCacheMBean.java (original)
+++ sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/SlingServletResolverCacheMBean.java Wed Oct 19 10:19:44 2016
@@ -18,21 +18,24 @@
*/
package org.apache.sling.servlets.resolver.jmx;
+import org.osgi.annotation.versioning.ProviderType;
+
/**
* This is the management interface for the SlingServletResolver's cache.
*/
+@ProviderType
public interface SlingServletResolverCacheMBean {
/**
* Get the current size of the servlet resolver cache
- *
+ *
* @return the cache size
*/
int getCacheSize();
-
+
/**
* Get the maximum configured size of the servlet resolver cache
- *
+ *
* @return the maximum configured size
*/
int getMaximumCacheSize();
Modified: sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/package-info.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/package-info.java?rev=1765572&r1=1765571&r2=1765572&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/package-info.java (original)
+++ sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/package-info.java Wed Oct 19 10:19:44 2016
@@ -17,8 +17,8 @@
* under the License.
*/
-@Version("2.3.6")
+@org.osgi.annotation.versioning.Version("2.3.7")
package org.apache.sling.servlets.resolver.jmx;
-import aQute.bnd.annotation.Version;
+