Author: cziegeler
Date: Wed Oct 5 07:33:04 2016
New Revision: 1763354
URL: http://svn.apache.org/viewvc?rev=1763354&view=rev
Log:
SLING-6002 : ScriptCacheImpl should move to new ResourceChangeListener API.
Apply patch from Rachit Kumar.
Added:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/package-info.java
(with props)
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/servlet/package-info.java
(with props)
Modified:
sling/trunk/bundles/scripting/core/pom.xml
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/ScriptCacheImpl.java
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptEngineManagerFactory.java
sling/trunk/bundles/scripting/core/src/test/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextIT.java
Modified: sling/trunk/bundles/scripting/core/pom.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/pom.xml?rev=1763354&r1=1763353&r2=1763354&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/core/pom.xml (original)
+++ sling/trunk/bundles/scripting/core/pom.xml Wed Oct 5 07:33:04 2016
@@ -23,7 +23,7 @@
<parent>
<groupId>org.apache.sling</groupId>
<artifactId>sling</artifactId>
- <version>26</version>
+ <version>28</version>
<relativePath />
</parent>
@@ -60,14 +60,6 @@
<extensions>true</extensions>
<configuration>
<instructions>
- <Export-Package>
- org.apache.sling.scripting.core;version=2.1.0,
-
org.apache.sling.scripting.core.servlet;version=1.0.0
- </Export-Package>
- <Private-Package>
- org.apache.sling.scripting.core.impl,
- org.apache.sling.scripting.core.impl.helper
- </Private-Package>
<Embed-Dependency>
org.apache.sling.commons.osgi;inline="org/apache/sling/commons/osgi/PropertiesUtil.*"
</Embed-Dependency>
@@ -75,7 +67,20 @@
</configuration>
</plugin>
<plugin>
+ <groupId>org.apache.servicemix.tooling</groupId>
+ <artifactId>depends-maven-plugin</artifactId>
+ <version>1.2</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate-depends-file</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
<artifactId>maven-failsafe-plugin</artifactId>
+ <version>2.18.1</version>
<executions>
<execution>
<goals>
@@ -93,18 +98,6 @@
</systemProperties>
</configuration>
</plugin>
- <plugin>
- <groupId>org.apache.servicemix.tooling</groupId>
- <artifactId>depends-maven-plugin</artifactId>
- <version>1.2</version>
- <executions>
- <execution>
- <goals>
- <goal>generate-depends-file</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
</plugins>
</build>
<reporting>
@@ -126,7 +119,6 @@
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
- <version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -162,19 +154,7 @@
<dependency>
<groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- <version>4.2.0</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- <version>4.2.0</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.scr.annotations</artifactId>
+ <artifactId>osgi.core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
@@ -213,8 +193,6 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
- <version>1.5.2</version>
- <scope>test</scope>
</dependency>
<dependency>
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=1763354&r1=1763353&r2=1763354&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 5 07:33:04 2016
@@ -25,9 +25,9 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Dictionary;
import java.util.HashMap;
+import java.util.Hashtable;
import java.util.List;
import java.util.Map;
-import java.util.Properties;
import javax.script.ScriptEngineFactory;
@@ -170,7 +170,7 @@ public class BindingsValuesProvidersByCo
}
private Event newEvent(final String topic, final ServiceReference
reference) {
- Dictionary<Object, Object> props = new Properties();
+ Dictionary<String, Object> props = new Hashtable<>();
props.put("service.id", reference.getProperty(Constants.SERVICE_ID));
return new Event(topic, props);
}
Modified:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java?rev=1763354&r1=1763353&r2=1763354&view=diff
==============================================================================
---
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java
(original)
+++
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java
Wed Oct 5 07:33:04 2016
@@ -20,10 +20,12 @@
package org.apache.sling.scripting.core.impl;
import java.lang.ref.SoftReference;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Dictionary;
import java.util.HashSet;
import java.util.Hashtable;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.locks.Lock;
@@ -47,6 +49,10 @@ import org.apache.sling.api.SlingConstan
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
+import
org.apache.sling.api.resource.observation.ExternalResourceChangeListener;
+import org.apache.sling.api.resource.observation.ResourceChange;
+import org.apache.sling.api.resource.observation.ResourceChange.ChangeType;
+import org.apache.sling.api.resource.observation.ResourceChangeListener;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.apache.sling.commons.threads.ThreadPool;
import org.apache.sling.commons.threads.ThreadPoolManager;
@@ -96,7 +102,7 @@ import org.slf4j.LoggerFactory;
* The {@code ScriptCache} stores information about {@link CompiledScript}
instances evaluated by various {@link ScriptEngine}s that
* implement the {@link Compilable} interface.
*/
-public class ScriptCacheImpl implements EventHandler, ScriptCache {
+public class ScriptCacheImpl implements ScriptCache, ResourceChangeListener,
ExternalResourceChangeListener {
private static final Logger LOGGER =
LoggerFactory.getLogger(ScriptCacheImpl.class);
@@ -181,28 +187,29 @@ public class ScriptCacheImpl implements
}
@Override
- public void handleEvent(final Event event) {
+ public void onChange(List<ResourceChange> changes) {
/**
* since the events trigger a synchronised map operation (remove in
this case) we should handle events asynchronously so that we
* don't block event processing
*/
- final String topic = event.getTopic();
- if (SlingConstants.TOPIC_RESOURCE_CHANGED.equals(topic) ||
SlingConstants.TOPIC_RESOURCE_REMOVED.equals(topic)) {
- Runnable eventTask = new Runnable() {
- @Override
- public void run() {
- String path = (String)
event.getProperty(SlingConstants.PROPERTY_PATH);
- writeLock.lock();
- try {
- internalMap.remove(path);
- LOGGER.debug("Detected script change for {} - removed
entry from the cache.", path);
- } finally {
- writeLock.unlock();
+ for(final ResourceChange change : changes){
+ if (ChangeType.CHANGED.equals(change.getType()) ||
ChangeType.REMOVED.equals(change.getType())) {
+ Runnable eventTask = new Runnable() {
+ @Override
+ public void run() {
+ String path = change.getPath();
+ writeLock.lock();
+ try {
+ internalMap.remove(path);
+ LOGGER.debug("Detected script change for {} -
removed entry from the cache.", path);
+ } finally {
+ writeLock.unlock();
+ }
}
- }
- };
- threadPool.execute(eventTask);
- }
+ };
+ threadPool.execute(eventTask);
+ }
+ }
}
protected Set<String> getCachedScripts() {
@@ -255,19 +262,21 @@ public class ScriptCacheImpl implements
internalMap.clear();
extensions.addAll(Arrays.asList(additionalExtensions));
if (extensions.size() > 0) {
- adminResolver = rrf.getAdministrativeResourceResolver(null);
- StringBuilder eventHandlerFilter = new StringBuilder("(|");
+ adminResolver = rrf.getAdministrativeResourceResolver(null);
+ StringBuilder eventHandlerFilter = new StringBuilder();
+ List<String> paths = new ArrayList<String>();
for (String searchPath : adminResolver.getSearchPath()) {
for (String extension : extensions) {
-
eventHandlerFilter.append("(path=").append(searchPath).append("**/*.").append(extension).append(")");
+ paths.add("glob:"+searchPath+"**/*."+extension);
}
}
- eventHandlerFilter.append(")");
- Dictionary eventHandlerProperties = new Hashtable();
- eventHandlerProperties.put(EventConstants.EVENT_FILTER,
eventHandlerFilter.toString());
- eventHandlerProperties.put(EventConstants.EVENT_TOPIC,
- new String[]{SlingConstants.TOPIC_RESOURCE_CHANGED,
SlingConstants.TOPIC_RESOURCE_REMOVED});
- eventHandlerServiceRegistration =
bundleContext.registerService(EventHandler.class.getName(), this,
eventHandlerProperties);
+ String[] pathArray = new String[paths.size()];
+ pathArray=(String[])paths.toArray(pathArray);
+ Dictionary<String,Object> eventHandlerProperties = new
Hashtable<String,Object>();
+ eventHandlerProperties.put(ResourceChangeListener.PATHS,
pathArray);
+ eventHandlerProperties.put(ResourceChangeListener.CHANGES,
+ new String[]{ChangeType.CHANGED.name(),
ChangeType.REMOVED.name()});
+ eventHandlerServiceRegistration =
bundleContext.registerService(ResourceChangeListener.class.getName(), this,
eventHandlerProperties);
}
} catch (LoginException e) {
LOGGER.error("Unable to set automated cache invalidation for the
ScriptCache.", e);
Modified:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptEngineManagerFactory.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptEngineManagerFactory.java?rev=1763354&r1=1763353&r2=1763354&view=diff
==============================================================================
---
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptEngineManagerFactory.java
(original)
+++
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptEngineManagerFactory.java
Wed Oct 5 07:33:04 2016
@@ -29,7 +29,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
@@ -126,7 +125,7 @@ public class ScriptEngineManagerFactory
while ((line = reader.readLine()) != null) {
if (!line.startsWith("#") && line.trim().length() > 0) {
try {
- Class<ScriptEngineFactory> clazz =
bundle.loadClass(line);
+ Class<ScriptEngineFactory> clazz =
(Class<ScriptEngineFactory>) bundle.loadClass(line);
ScriptEngineFactory spi = clazz.newInstance();
registerFactory(mgr, spi, null);
} catch (Throwable t) {
@@ -153,6 +152,7 @@ public class ScriptEngineManagerFactory
// ---------- BundleListener interface
-------------------------------------
+ @Override
public void bundleChanged(BundleEvent event) {
if (event.getType() == BundleEvent.STARTED
&& event.getBundle().getEntry(ENGINE_FACTORY_SERVICE) != null) {
Added:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/package-info.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/package-info.java?rev=1763354&view=auto
==============================================================================
---
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/package-info.java
(added)
+++
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/package-info.java
Wed Oct 5 07:33:04 2016
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+@Version("2.1.0")
+package org.apache.sling.scripting.core;
+
+import org.osgi.annotation.versioning.Version;
+
Propchange:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/package-info.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/package-info.java
------------------------------------------------------------------------------
svn:keywords = author date id revision rev url
Added:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/servlet/package-info.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/servlet/package-info.java?rev=1763354&view=auto
==============================================================================
---
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/servlet/package-info.java
(added)
+++
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/servlet/package-info.java
Wed Oct 5 07:33:04 2016
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+@Version("1.0.0")
+package org.apache.sling.scripting.core.servlet;
+
+import org.osgi.annotation.versioning.Version;
+
Propchange:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/servlet/package-info.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/servlet/package-info.java
------------------------------------------------------------------------------
svn:keywords = author date id revision rev url
Modified:
sling/trunk/bundles/scripting/core/src/test/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextIT.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/test/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextIT.java?rev=1763354&r1=1763353&r2=1763354&view=diff
==============================================================================
---
sling/trunk/bundles/scripting/core/src/test/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextIT.java
(original)
+++
sling/trunk/bundles/scripting/core/src/test/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextIT.java
Wed Oct 5 07:33:04 2016
@@ -22,7 +22,6 @@ import static org.junit.Assert.assertEqu
import static org.junit.Assert.assertTrue;
import static org.ops4j.pax.exam.CoreOptions.bundle;
import static org.ops4j.pax.exam.CoreOptions.junitBundles;
-import static org.ops4j.pax.exam.CoreOptions.maven;
import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
import static org.ops4j.pax.exam.CoreOptions.options;
import static org.ops4j.pax.exam.CoreOptions.provision;
@@ -84,8 +83,16 @@ public class BindingsValuesProvidersByCo
when(localRepo.length() > 0).useOptions(
systemProperty("org.ops4j.pax.url.mvn.localRepository").value(localRepo)
),
+ systemProperty("pax.exam.logging").value("none"),
provision(
bundle(bundleFile.toURI().toString()),
+
+ mavenBundle("org.apache.sling",
"org.apache.sling.commons.log", "4.0.6"),
+ mavenBundle("org.apache.sling",
"org.apache.sling.commons.logservice", "1.0.6"),
+ mavenBundle("org.slf4j", "slf4j-api", "1.7.13"),
+ mavenBundle("org.slf4j", "jcl-over-slf4j", "1.7.13"),
+ mavenBundle("org.slf4j", "log4j-over-slf4j", "1.7.13"),
+
mavenBundle().groupId(FELIX_GID).artifactId("org.apache.felix.scr").versionAsInProject(),
mavenBundle().groupId(FELIX_GID).artifactId("org.apache.felix.eventadmin").versionAsInProject(),
mavenBundle().groupId(FELIX_GID).artifactId("org.apache.felix.webconsole").versionAsInProject(),
@@ -136,6 +143,7 @@ public class BindingsValuesProvidersByCo
return id;
}
+ @Override
public void addBindings(Bindings b) {
}
};
@@ -150,6 +158,7 @@ public class BindingsValuesProvidersByCo
return id;
}
+ @Override
public void addBindings(Bindings b) {
}
};
@@ -174,52 +183,64 @@ public class BindingsValuesProvidersByCo
private ScriptEngineFactory factory(final String engineName) {
return new ScriptEngineFactory() {
+ @Override
public ScriptEngine getScriptEngine() {
return null;
}
+ @Override
public String getProgram(String... arg0) {
return null;
}
+ @Override
public Object getParameter(String arg0) {
return null;
}
+ @Override
public String getOutputStatement(String arg0) {
return null;
}
+ @Override
public List<String> getNames() {
final List<String> names = new ArrayList<String>();
names.add(engineName);
return names;
}
+ @Override
public List<String> getMimeTypes() {
return null;
}
+ @Override
public String getMethodCallSyntax(String arg0, String arg1,
String... arg2) {
return null;
}
+ @Override
public String getLanguageVersion() {
return null;
}
+ @Override
public String getLanguageName() {
return null;
}
+ @Override
public List<String> getExtensions() {
return null;
}
+ @Override
public String getEngineVersion() {
return null;
}
+ @Override
public String getEngineName() {
return engineName;
}