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 099B4C466 for ; Sun, 10 Jun 2012 18:52:39 +0000 (UTC) Received: (qmail 65760 invoked by uid 500); 10 Jun 2012 18:52:38 -0000 Delivered-To: apmail-sling-commits-archive@sling.apache.org Received: (qmail 65701 invoked by uid 500); 10 Jun 2012 18:52:38 -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 65694 invoked by uid 99); 10 Jun 2012 18:52:38 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 10 Jun 2012 18:52:38 +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; Sun, 10 Jun 2012 18:52:34 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id D82122388978; Sun, 10 Jun 2012 18:52:12 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1348643 - in /sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp: JspScriptEngineFactory.java SlingIOProvider.java jasper/compiler/JspRuntimeContext.java jasper/servlet/JspServletWrapper.java Date: Sun, 10 Jun 2012 18:52:12 -0000 To: commits@sling.apache.org From: cziegeler@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120610185212.D82122388978@eris.apache.org> Author: cziegeler Date: Sun Jun 10 18:52:11 2012 New Revision: 1348643 URL: http://svn.apache.org/viewvc?rev=1348643&view=rev Log: SLING-2505 : Don't load class for dependency check Modified: sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/SlingIOProvider.java sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/compiler/JspRuntimeContext.java sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/servlet/JspServletWrapper.java Modified: sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java?rev=1348643&r1=1348642&r2=1348643&view=diff ============================================================================== --- sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java (original) +++ sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java Sun Jun 10 18:52:11 2012 @@ -165,6 +165,7 @@ public class JspScriptEngineFactory * @param scriptHelper * @param context */ + @SuppressWarnings("unchecked") private void callErrorPageJsp(final Bindings bindings, final SlingScriptHelper scriptHelper, final ScriptContext context, @@ -178,7 +179,7 @@ public class JspScriptEngineFactory resolver = scriptHelper.getScript().getScriptResource().getResourceResolver(); } final SlingIOProvider io = this.ioProvider; - io.setRequestResourceResolver(resolver); + final ResourceResolver oldResolver = io.setRequestResourceResolver(resolver); jspFactoryHandler.incUsage(); try { final JspServletWrapper errorJsp = getJspWrapper(scriptName, slingBindings); @@ -203,7 +204,7 @@ public class JspScriptEngineFactory request.removeAttribute("javax.servlet.jsp.jspException"); } finally { jspFactoryHandler.decUsage(); - io.resetRequestResourceResolver(); + io.resetRequestResourceResolver(oldResolver); } } @@ -212,6 +213,7 @@ public class JspScriptEngineFactory * @throws SlingServletException * @throws SlingIOException */ + @SuppressWarnings("unchecked") private void callJsp(final Bindings bindings, final SlingScriptHelper scriptHelper, final ScriptContext context) { @@ -222,7 +224,7 @@ public class JspScriptEngineFactory resolver = scriptHelper.getScript().getScriptResource().getResourceResolver(); } final SlingIOProvider io = this.ioProvider; - io.setRequestResourceResolver(resolver); + final ResourceResolver oldResolver = io.setRequestResourceResolver(resolver); jspFactoryHandler.incUsage(); try { final SlingBindings slingBindings = new SlingBindings(); @@ -233,7 +235,7 @@ public class JspScriptEngineFactory jsp.service(slingBindings); } finally { jspFactoryHandler.decUsage(); - io.resetRequestResourceResolver(); + io.resetRequestResourceResolver(oldResolver); } } Modified: sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/SlingIOProvider.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/SlingIOProvider.java?rev=1348643&r1=1348642&r2=1348643&view=diff ============================================================================== --- sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/SlingIOProvider.java (original) +++ sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/SlingIOProvider.java Sun Jun 10 18:52:11 2012 @@ -54,12 +54,20 @@ class SlingIOProvider implements IOProvi this.classLoaderWriter = classLoaderWriter; } - void setRequestResourceResolver(ResourceResolver resolver) { + /** + * Set the thread context resource resolver. + */ + ResourceResolver setRequestResourceResolver(final ResourceResolver resolver) { + final ResourceResolver old = requestResourceResolver.get(); requestResourceResolver.set(resolver); + return old; } - void resetRequestResourceResolver() { - requestResourceResolver.remove(); + /** + * Reset the thread context resource resolver. + */ + void resetRequestResourceResolver(final ResourceResolver resolver) { + requestResourceResolver.set(resolver); } // ---------- IOProvider interface ----------------------------------------- @@ -69,29 +77,27 @@ class SlingIOProvider implements IOProvi * ResourceProvider and retrieved from the Resource if the StreamProvider * interface is implemented. */ - public InputStream getInputStream(String fileName) + public InputStream getInputStream(final String path) throws FileNotFoundException, IOException { - if ( fileName.startsWith(":") ) { - return this.classLoaderWriter.getInputStream(fileName.substring(1)); + if ( path.startsWith(":") ) { + return this.classLoaderWriter.getInputStream(path.substring(1)); } - try { - - Resource resource = getResourceInternal(fileName); - if (resource == null) { - throw new FileNotFoundException("Cannot find " + fileName); - } - - InputStream stream = resource.adaptTo(InputStream.class); - if (stream == null) { - throw new FileNotFoundException("Cannot find " + fileName); + ResourceResolver resolver = requestResourceResolver.get(); + if (resolver != null) { + try { + final Resource resource = resolver.getResource(cleanPath(path, true)); + if (resource != null) { + final InputStream stream = resource.adaptTo(InputStream.class); + if (stream != null) { + return stream; + } + } + } catch (final SlingException se) { + throw (IOException) new IOException( + "Failed to get InputStream for " + path).initCause(se); } - - return stream; - - } catch (SlingException se) { - throw (IOException) new IOException( - "Failed to get InputStream for " + fileName).initCause(se); } + throw new FileNotFoundException("Cannot find " + path); } /** @@ -100,22 +106,23 @@ class SlingIOProvider implements IOProvi * resource does not exist or an error occurrs finding the resource, -1 is * returned. */ - public long lastModified(String fileName) { - if ( fileName.startsWith(":") ) { - return this.classLoaderWriter.getLastModified(fileName.substring(1)); - } - try { - Resource resource = getResourceInternal(fileName); - if (resource != null) { - ResourceMetadata meta = resource.getResourceMetadata(); - long modTime = meta.getModificationTime(); - return (modTime > 0) ? modTime : 0; + public long lastModified(final String path) { + if ( path.startsWith(":") ) { + return this.classLoaderWriter.getLastModified(path.substring(1)); + } + ResourceResolver resolver = requestResourceResolver.get(); + if (resolver != null) { + try { + final Resource resource = resolver.getResource(cleanPath(path, true)); + if (resource != null) { + ResourceMetadata meta = resource.getResourceMetadata(); + long modTime = meta.getModificationTime(); + return (modTime > 0) ? modTime : 0; + } + } catch (final SlingException se) { + log.error("Cannot get last modification time for " + path, se); } - - } catch (SlingException se) { - log.error("Cannot get last modification time for " + fileName, se); } - // fallback to "non-existant" in case of problems return -1; } @@ -123,28 +130,28 @@ class SlingIOProvider implements IOProvi /** * Removes the named item from the repository. */ - public boolean delete(String fileName) { - return this.classLoaderWriter.delete(fileName.substring(1)); + public boolean delete(final String path) { + return this.classLoaderWriter.delete(path.substring(1)); } /** * Returns an output stream to write to the repository. */ - public OutputStream getOutputStream(String fileName) { - return this.classLoaderWriter.getOutputStream(fileName.substring(1)); + public OutputStream getOutputStream(final String path) { + return this.classLoaderWriter.getOutputStream(path.substring(1)); } /** * Renames a node in the repository. */ - public boolean rename(String oldFileName, String newFileName) { + public boolean rename(final String oldFileName, final String newFileName) { return this.classLoaderWriter.rename(oldFileName.substring(1), newFileName.substring(1)); } /** * Creates a folder hierarchy in the repository. */ - public boolean mkdirs(String path) { + public boolean mkdirs(final String path) { // we just do nothing return true; } @@ -159,18 +166,22 @@ class SlingIOProvider implements IOProvi // ---------- Helper Methods for JspServletContext ------------------------- - /* package */URL getURL(String path) throws MalformedURLException { - try { - Resource resource = getResourceInternal(path); - return (resource != null) ? resource.adaptTo(URL.class) : null; - } catch (SlingException se) { - throw (MalformedURLException) new MalformedURLException( - "Cannot get URL for " + path).initCause(se); + URL getURL(final String path) throws MalformedURLException { + ResourceResolver resolver = requestResourceResolver.get(); + if (resolver != null) { + try { + final Resource resource = resolver.getResource(cleanPath(path, true)); + return (resource != null) ? resource.adaptTo(URL.class) : null; + } catch (final SlingException se) { + throw (MalformedURLException) new MalformedURLException( + "Cannot get URL for " + path).initCause(se); + } } + return null; } - /* package */Set getResourcePaths(String path) { - Set paths = new HashSet(); + Set getResourcePaths(final String path) { + final Set paths = new HashSet(); ResourceResolver resolver = requestResourceResolver.get(); if (resolver != null) { @@ -190,7 +201,7 @@ class SlingIOProvider implements IOProvi } } } - } catch (SlingException se) { + } catch (final SlingException se) { log.warn("getResourcePaths: Cannot list children of " + path, se); } @@ -199,18 +210,9 @@ class SlingIOProvider implements IOProvi return paths.isEmpty() ? null : paths; } - private Resource getResourceInternal(String path) throws SlingException { - ResourceResolver resolver = requestResourceResolver.get(); - if (resolver != null) { - return resolver.getResource(cleanPath(path, true)); - } - - return null; - } - // ---------- internal ----------------------------------------------------- - private String cleanPath(String path, boolean removeWebInfTags) { + private String cleanPath(String path, final boolean removeWebInfTags) { // replace backslash by slash path = path.replace('\\', '/'); Modified: sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/compiler/JspRuntimeContext.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/compiler/JspRuntimeContext.java?rev=1348643&r1=1348642&r2=1348643&view=diff ============================================================================== --- sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/compiler/JspRuntimeContext.java (original) +++ sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/compiler/JspRuntimeContext.java Sun Jun 10 18:52:11 2012 @@ -231,7 +231,7 @@ public final class JspRuntimeContext { // ------------------------------------------------------ Public Methods - public void addJspDependencies(final JspServletWrapper jsw, List deps) { + public void addJspDependencies(final JspServletWrapper jsw, final List deps) { if ( deps != null ) { final String jspUri = jsw.getJspUri(); synchronized ( depToJsp ) { Modified: sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/servlet/JspServletWrapper.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/servlet/JspServletWrapper.java?rev=1348643&r1=1348642&r2=1348643&view=diff ============================================================================== --- sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/servlet/JspServletWrapper.java (original) +++ sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/servlet/JspServletWrapper.java Sun Jun 10 18:52:11 2012 @@ -14,7 +14,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.sling.scripting.jsp.jasper.servlet; import java.io.IOException; @@ -278,7 +277,6 @@ public class JspServletWrapper { if ( !equals(oldDeps, this.dependents) ) { this.persistDependencies(); } - this.persistDependencies(); } catch (final Throwable t) { // ignore } @@ -308,34 +306,39 @@ public class JspServletWrapper { */ public List getDependants() { if ( this.dependents == null ) { - // we load the deps file - final String path = this.getDependencyFilePath(); - InputStream is = null; - try { - is = this.ctxt.getRuntimeContext().getIOProvider().getInputStream(path); - if ( is != null ) { - if ( log.isDebugEnabled() ) { - log.debug("Loading dependencies for " + jspUri); + synchronized ( this ) { + if ( this.dependents == null ) { + // we load the deps file + final String path = this.getDependencyFilePath(); + InputStream is = null; + try { + is = this.ctxt.getRuntimeContext().getIOProvider().getInputStream(path); + if ( is != null ) { + if ( log.isDebugEnabled() ) { + log.debug("Loading dependencies for " + jspUri); + } + final List deps = new ArrayList(); + final InputStreamReader reader = new InputStreamReader(is, "UTF-8"); + final LineNumberReader lnr = new LineNumberReader(reader); + String line; + while ( (line = lnr.readLine()) != null ) { + deps.add(line.trim()); + } + this.dependents = deps; + } + } catch ( final IOException ignore ) { + // excepted + } finally { + if ( is != null ) { + try { is.close(); } catch ( final IOException ioe ) {} + } } - this.dependents = new ArrayList(); - final InputStreamReader reader = new InputStreamReader(is, "UTF-8"); - final LineNumberReader lnr = new LineNumberReader(reader); - String line; - while ( (line = lnr.readLine()) != null ) { - this.dependents.add(line.trim()); + + // use empty list, until servlet is compiled and loaded + if ( this.dependents == null ) { + this.dependents = Collections.emptyList(); } } - } catch ( final IOException ignore ) { - // excepted - } finally { - if ( is != null ) { - try { is.close(); } catch ( final IOException ioe ) {} - } - } - - // use empty list, until servlet is compiled and loaded - if ( this.dependents == null ) { - this.dependents = Collections.emptyList(); } } return this.dependents; @@ -357,19 +360,20 @@ public class JspServletWrapper { return jspUri; } + /** + * Check if the compiled class is still current + */ private boolean isOutDated() { - final String jsp = ctxt.getJspFile(); - - long jspRealLastModified = ctxt.getRuntimeContext().getIOProvider().lastModified(jsp); - - long targetLastModified = 0; + // check if class file exists final String targetFile = ctxt.getClassFileName(); - - targetLastModified = ctxt.getRuntimeContext().getIOProvider().lastModified(targetFile); + final long targetLastModified = ctxt.getRuntimeContext().getIOProvider().lastModified(targetFile); if (targetLastModified < 0) { return true; } + // compare jsp time stamp with class file time stamp + final String jsp = ctxt.getJspFile(); + final long jspRealLastModified = ctxt.getRuntimeContext().getIOProvider().lastModified(jsp); if (targetLastModified < jspRealLastModified) { if (log.isDebugEnabled()) { log.debug("Compiler: outdated: " + targetFile + " " @@ -378,26 +382,25 @@ public class JspServletWrapper { return true; } + // check includes final List depends = this.getDependants(); - if (depends == null) { - return false; - } - - final Iterator it = depends.iterator(); - while (it.hasNext()) { - final String include = it.next(); - // ignore tag libs, we are reloaded if a taglib changes anyway - if ( include.startsWith("tld:") ) { - continue; - } - final long includeLastModified = ctxt.getRuntimeContext().getIOProvider().lastModified(include); - - if (includeLastModified > targetLastModified) { - if (log.isDebugEnabled()) { - log.debug("Compiler: outdated: " + targetFile + " because of dependency " + include + " : " - + targetLastModified + " - " + includeLastModified); + if (depends != null) { + final Iterator it = depends.iterator(); + while (it.hasNext()) { + final String include = it.next(); + // ignore tag libs, we are reloaded if a taglib changes anyway + if ( include.startsWith("tld:") ) { + continue; + } + final long includeLastModified = ctxt.getRuntimeContext().getIOProvider().lastModified(include); + + if (includeLastModified > targetLastModified) { + if (log.isDebugEnabled()) { + log.debug("Compiler: outdated: " + targetFile + " because of dependency " + include + " : " + + targetLastModified + " - " + includeLastModified); + } + return true; } - return true; } }