SLING-5980: Deduplicating the FSClassLoader cache clearing functionality and adding a JMX interface
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1783452 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index 6bf760e..621dbd0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -127,7 +127,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.commons.classloader</artifactId>
- <version>1.3.0</version>
+ <version>1.3.9-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java b/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
index 63b5744..62e3c68 100644
--- a/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
+++ b/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
@@ -22,7 +22,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.io.PrintWriter;
import java.io.Reader;
import java.util.List;
import java.util.Map;
@@ -31,14 +30,8 @@
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
-import javax.servlet.Servlet;
-import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import org.apache.sling.api.SlingException;
import org.apache.sling.api.SlingHttpServletRequest;
@@ -54,6 +47,7 @@
import org.apache.sling.api.scripting.SlingScriptConstants;
import org.apache.sling.api.scripting.SlingScriptHelper;
import org.apache.sling.commons.classloader.ClassLoaderWriter;
+import org.apache.sling.commons.classloader.ClassLoaderWriterListener;
import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
import org.apache.sling.commons.compiler.JavaCompiler;
import org.apache.sling.scripting.api.AbstractScriptEngineFactory;
@@ -82,7 +76,7 @@
* The JSP engine (a.k.a Jasper).
*
*/
-@Component(service = {javax.script.ScriptEngineFactory.class,ResourceChangeListener.class,Servlet.class},
+@Component(service = {javax.script.ScriptEngineFactory.class,ResourceChangeListener.class,ClassLoaderWriterListener.class},
property = {
Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
Constants.SERVICE_DESCRIPTION + "=JSP Script Handler",
@@ -92,15 +86,12 @@
ResourceChangeListener.PATHS + "=glob:**/*.jspf",
ResourceChangeListener.PATHS + "=glob:**/*.jspx",
ResourceChangeListener.PATHS + "=glob:**/*.tld",
- ResourceChangeListener.PATHS + "=glob:**/*.tag",
- "felix.webconsole.label=slingjsp",
- "felix.webconsole.title=JSP",
- "felix.webconsole.category=Sling"
+ ResourceChangeListener.PATHS + "=glob:**/*.tag"
})
@Designate(ocd = JspScriptEngineFactory.Config.class)
public class JspScriptEngineFactory
extends AbstractScriptEngineFactory
- implements Servlet,ResourceChangeListener,ExternalResourceChangeListener {
+ implements ResourceChangeListener,ExternalResourceChangeListener, ClassLoaderWriterListener {
@ObjectClassDefinition(name = "Apache Sling JSP Script Handler",
description = "The JSP Script Handler supports development of JSP " +
@@ -718,81 +709,12 @@
};
t.start();
}
-
- //
- // Web Console Plugin
- //
- private ServletConfig config;
-
- /* (non-Javadoc)
- * @see javax.servlet.Servlet#destroy()
- */
- @Override
- public void destroy() {
- this.config = null;
- }
-
- /* (non-Javadoc)
- * @see javax.servlet.Servlet#getServletConfig()
- */
- @Override
- public ServletConfig getServletConfig() {
- return this.config;
- }
-
- /* (non-Javadoc)
- * @see javax.servlet.Servlet#getServletInfo()
- */
- @Override
- public String getServletInfo() {
- return "";
- }
-
- /* (non-Javadoc)
- * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
- */
- @Override
- public void init(final ServletConfig config) throws ServletException {
- this.config = config;
- }
-
- /* (non-Javadoc)
- * @see javax.servlet.Servlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
- */
- @Override
- public void service(final ServletRequest request, final ServletResponse response)
- throws ServletException, IOException {
- if ( request instanceof HttpServletRequest ) {
- final HttpServletRequest req = (HttpServletRequest) request;
- final HttpServletResponse res = (HttpServletResponse) response;
-
- final String path = req.getContextPath() + req.getServletPath() + req.getPathInfo();
-
- if ( req.getMethod().equals("POST") ) {
- final JspRuntimeContext rctxt = this.jspRuntimeContext;
- this.classLoaderWriter.delete("/org/apache/jsp");
- if ( rctxt != null ) {
- renewJspRuntimeContext();
- }
-
- res.sendRedirect(path + "?reset");
- return;
- } else if ( req.getMethod().equals("GET") ) {
- final PrintWriter pw = res.getWriter();
- pw.println("<h1>Apache Sling JSP Scripting</h1>");
- pw.println("<br/>");
- if ( req.getParameter("reset") != null ) {
- pw.println("<p>All compiled jsp files removed.");
- pw.println("<br/>");
- }
- pw.print("<form action='");
- pw.print(path);
- pw.println("' method='POST'>");
- pw.println("<input type='submit' value='Recompile all JSPs'>");
- pw.println("</form>");
- return;
- }
+
+ @Override
+ public void onClassLoaderClear(String context) {
+ final JspRuntimeContext rctxt = this.jspRuntimeContext;
+ if ( rctxt != null ) {
+ renewJspRuntimeContext();
}
- throw new ServletException("Request not supported.");
- }
+ }
}