You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by il...@apache.org on 2012/06/07 15:29:26 UTC

svn commit: r1347606 - in /cocoon/cocoon3/trunk: cocoon-sax/src/main/java/org/apache/cocoon/sax/component/ cocoon-sax/src/main/java/org/apache/cocoon/sax/util/ cocoon-sitemap/src/main/java/org/apache/cocoon/sitemap/component/ cocoon-stringtemplate/src/...

Author: ilgrosso
Date: Thu Jun  7 13:29:26 2012
New Revision: 1347606

URL: http://svn.apache.org/viewvc?rev=1347606&view=rev
Log:
Making local LRU cache use URLManipulationUtils.getLastModified()

Modified:
    cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/SchemaProcessorTransformer.java
    cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XMLGenerator.java
    cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XSLTTransformer.java
    cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/util/ValidityValue.java
    cocoon/cocoon3/trunk/cocoon-sitemap/src/main/java/org/apache/cocoon/sitemap/component/FileReaderComponent.java
    cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/java/org/apache/cocoon/stringtemplate/StringTemplateGenerator.java

Modified: cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/SchemaProcessorTransformer.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/SchemaProcessorTransformer.java?rev=1347606&r1=1347605&r2=1347606&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/SchemaProcessorTransformer.java (original)
+++ cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/SchemaProcessorTransformer.java Thu Jun  7 13:29:26 2012
@@ -18,8 +18,6 @@
  */
 package org.apache.cocoon.sax.component;
 
-import java.io.File;
-import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.Map;
 import javax.xml.XMLConstants;
@@ -32,6 +30,7 @@ import org.apache.cocoon.sax.AbstractSAX
 import org.apache.cocoon.sax.SAXConsumer;
 import org.apache.cocoon.sax.util.InMemoryLRUResourceCache;
 import org.apache.cocoon.sax.util.SAXConsumerAdapter;
+import org.apache.cocoon.sax.util.URLManipulationUtils;
 import org.apache.cocoon.sax.util.ValidityValue;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -46,7 +45,7 @@ public final class SchemaProcessorTransf
 
     private static final String SOURCE = "source";
 
-    private static final InMemoryLRUResourceCache<Schema> SCHEMA_LRU_CACHE = new InMemoryLRUResourceCache<Schema>();
+    private static final InMemoryLRUResourceCache<Schema> SCHEMA_CACHE = new InMemoryLRUResourceCache<Schema>();
 
     private static final SchemaFactory SCHEMA_FACTORY = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
 
@@ -91,35 +90,28 @@ public final class SchemaProcessorTransf
 
         this.source = source;
 
-        final File schemaFile;
-        try {
-            schemaFile = "file".equals(this.source.getProtocol())
-                    ? new File(this.source.toURI()) : null;
-        } catch (URISyntaxException e) {
-            throw new IllegalArgumentException(
-                    "Invalid source specified: " + source, e);
-        }
+        Long lastModified = URLManipulationUtils.getLastModified(this.source);
+
+        if (SCHEMA_CACHE.containsKey(source.toExternalForm())) {
+            ValidityValue<Schema> cacheEntry = SCHEMA_CACHE.get(source.toExternalForm());
+            if (lastModified == null || cacheEntry.getLastModified() >= lastModified) {
+                LOG.debug("{} local cache hit: {}", getClass().getSimpleName(), this.source.toExternalForm());
 
-        this.schema = null;
-        if (SCHEMA_LRU_CACHE.containsKey(source.toExternalForm())) {
-            ValidityValue<Schema> cacheEntry = SCHEMA_LRU_CACHE.get(source.toExternalForm());
-            if (schemaFile == null || cacheEntry.getLastModified() >= schemaFile.lastModified()) {
                 this.schema = cacheEntry.getValue();
             }
         }
         if (this.schema == null) {
+            LOG.debug("{} local cache miss: {}", getClass().getSimpleName(), this.source.toExternalForm());
+
             try {
-                this.schema = schemaFile != null
-                        ? SCHEMA_FACTORY.newSchema(schemaFile)
-                        : SCHEMA_FACTORY.newSchema(source);
-
-                ValidityValue<Schema> cacheEntry = (schemaFile != null)
-                        ? new ValidityValue<Schema>(this.schema, schemaFile.lastModified())
-                        : new ValidityValue<Schema>(this.schema);
-                SCHEMA_LRU_CACHE.put(source.toExternalForm(), cacheEntry);
+                this.schema = SCHEMA_FACTORY.newSchema(source);
+
+                LOG.debug("{} local cache put: {}", getClass().getSimpleName(), this.source.toExternalForm());
+
+                ValidityValue<Schema> cacheEntry = new ValidityValue<Schema>(this.schema, lastModified);
+                SCHEMA_CACHE.put(this.source.toExternalForm(), cacheEntry);
             } catch (SAXException e) {
-                throw new SetupException(
-                        "Could not initialize xschema source", e);
+                throw new SetupException("Could not initialize xschema source", e);
             }
         }
     }

Modified: cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XMLGenerator.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XMLGenerator.java?rev=1347606&r1=1347605&r2=1347606&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XMLGenerator.java (original)
+++ cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XMLGenerator.java Thu Jun  7 13:29:26 2012
@@ -397,13 +397,12 @@ public class XMLGenerator extends Abstra
                 throw new ProcessingException(this.getClass().getSimpleName() + " has no source.");
             }
 
-            LOG.debug("Using the URL {} to produce SAX events.", this.source);
+            LOG.debug("Using the URL {} to produce SAX events.", this.source.toExternalForm());
 
             try {
                 XMLUtils.toSax(this.source.openConnection(), XMLGenerator.this.getSAXConsumer());
             } catch (IOException e) {
-                throw new ProcessingException("Can't open connection to "
-                        + this.source, e);
+                throw new ProcessingException("Can't open connection to " + this.source.toExternalForm(), e);
             }
         }
 
@@ -413,8 +412,7 @@ public class XMLGenerator extends Abstra
 
         @Override
         public String toString() {
-            return StringRepresentation.buildString(this,
-                    "source=" + this.source);
+            return StringRepresentation.buildString(this, "source=" + this.source);
         }
     }
 }

Modified: cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XSLTTransformer.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XSLTTransformer.java?rev=1347606&r1=1347605&r2=1347606&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XSLTTransformer.java (original)
+++ cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XSLTTransformer.java Thu Jun  7 13:29:26 2012
@@ -16,14 +16,11 @@
  */
 package org.apache.cocoon.sax.component;
 
-import java.io.File;
-import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.regex.Pattern;
-import javax.xml.transform.Source;
 import javax.xml.transform.Templates;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerConfigurationException;
@@ -130,29 +127,23 @@ public class XSLTTransformer extends Abs
 
         this.source = source;
 
-        final File xsltFile;
-        try {
-            xsltFile = "file".equals(this.source.getProtocol())
-                    ? new File(this.source.toURI()) : null;
-        } catch (URISyntaxException e) {
-            throw new IllegalArgumentException("Invalid source specified: " + source, e);
-        }
+        Long lastModified = URLManipulationUtils.getLastModified(this.source);
 
         this.templates = null;
         // check the XSLT is in the cache first
         if (XSLT_CACHE.containsKey(this.source.toExternalForm())) {
             // get the XSLT directly from the cache
             ValidityValue<Templates> cacheEntry = XSLT_CACHE.get(this.source.toExternalForm());
-            if (xsltFile == null || cacheEntry.getLastModified() >= xsltFile.lastModified()) {
+            if (lastModified == null || cacheEntry.getLastModified() >= lastModified) {
+                LOG.debug("{} local cache hit: {}", getClass().getSimpleName(), this.source.toExternalForm());
+
                 this.templates = cacheEntry.getValue();
             }
         }
         if (this.templates == null) {
-            // XSLT has to be parsed
-            Source urlSource = xsltFile != null
-                    ? new StreamSource(xsltFile)
-                    : new StreamSource(this.source.toExternalForm());
+            LOG.debug("{} local cache miss: {}", getClass().getSimpleName(), this.source.toExternalForm());
 
+            // XSLT has to be parsed
             SAXTransformerFactory transformerFactory;
             if (attributes != null && !attributes.isEmpty()) {
                 transformerFactory = createNewSAXTransformerFactory();
@@ -164,11 +155,12 @@ public class XSLTTransformer extends Abs
             }
 
             try {
-                this.templates = transformerFactory.newTemplates(urlSource);
+                this.templates = transformerFactory.newTemplates(new StreamSource(this.source.toExternalForm()));
+
                 // store the XSLT into the cache for future reuse
-                ValidityValue<Templates> cacheEntry = (xsltFile != null)
-                        ? new ValidityValue<Templates>(this.templates, xsltFile.lastModified())
-                        : new ValidityValue<Templates>(this.templates);
+                LOG.debug("{} local cache put: {}", getClass().getSimpleName(), this.source.toExternalForm());
+
+                ValidityValue<Templates> cacheEntry = new ValidityValue<Templates>(this.templates, lastModified);
                 XSLT_CACHE.put(this.source.toExternalForm(), cacheEntry);
             } catch (TransformerConfigurationException e) {
                 throw new SetupException("Impossible to read XSLT from '" + this.source.toExternalForm()
@@ -211,11 +203,8 @@ public class XSLTTransformer extends Abs
                 this.loadXSLT(this.source, null);
             }
         } else {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Impossible to load XSLT parameters from '"
-                        + this.source + "' source, make sure it is NOT null "
-                        + "and is a valid URL");
-            }
+            LOG.debug("Impossible to load XSLT parameters from '{}' source, "
+                    + "make sure it is NOT null and is a valid URL", this.source.toExternalForm());
         }
 
         this.setParameters(configuration);
@@ -229,9 +218,8 @@ public class XSLTTransformer extends Abs
         TransformerHandler transformerHandler;
         try {
             transformerHandler = TRAX_FACTORY.newTransformerHandler(this.templates);
-        } catch (Exception ex) {
-            throw new SetupException(
-                    "Could not initialize transformer handler.", ex);
+        } catch (Exception e) {
+            throw new SetupException("Could not initialize transformer handler.", e);
         }
 
         if (this.parameters != null) {
@@ -253,8 +241,7 @@ public class XSLTTransformer extends Abs
         result.setLexicalHandler(consumer);
         transformerHandler.setResult(result);
 
-        TraxErrorListener traxErrorListener = new TraxErrorListener(LOG,
-                this.source.toExternalForm());
+        TraxErrorListener traxErrorListener = new TraxErrorListener(LOG, this.source.toExternalForm());
         transformerHandler.getTransformer().setErrorListener(traxErrorListener);
 
         SAXConsumerAdapter saxConsumerAdapter = new SAXConsumerAdapter();

Modified: cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/util/ValidityValue.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/util/ValidityValue.java?rev=1347606&r1=1347605&r2=1347606&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/util/ValidityValue.java (original)
+++ cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/util/ValidityValue.java Thu Jun  7 13:29:26 2012
@@ -19,11 +19,6 @@ public class ValidityValue<V> {
 
     final private long lastModified;
 
-    public ValidityValue(final V value) {
-        this.value = value;
-        this.lastModified = 0;
-    }
-
     public ValidityValue(final V value, long lastModified) {
         this.value = value;
         this.lastModified = lastModified;

Modified: cocoon/cocoon3/trunk/cocoon-sitemap/src/main/java/org/apache/cocoon/sitemap/component/FileReaderComponent.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sitemap/src/main/java/org/apache/cocoon/sitemap/component/FileReaderComponent.java?rev=1347606&r1=1347605&r2=1347606&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sitemap/src/main/java/org/apache/cocoon/sitemap/component/FileReaderComponent.java (original)
+++ cocoon/cocoon3/trunk/cocoon-sitemap/src/main/java/org/apache/cocoon/sitemap/component/FileReaderComponent.java Thu Jun  7 13:29:26 2012
@@ -28,16 +28,9 @@ import org.apache.cocoon.pipeline.cachin
 import org.apache.cocoon.pipeline.component.CachingPipelineComponent;
 import org.apache.cocoon.pipeline.util.URLConnectionUtils;
 import org.apache.cocoon.sax.util.URLManipulationUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class FileReaderComponent extends AbstractReader implements CachingPipelineComponent {
 
-    /**
-     * Logger.
-     */
-    private static final Logger LOG = LoggerFactory.getLogger(FileReaderComponent.class);
-
     public FileReaderComponent() {
         super();
     }
@@ -83,9 +76,7 @@ public class FileReaderComponent extends
             }
 
         } catch (IOException e) {
-            String message = "FileReader cannot read from '" + this.source + "'";
-            LOG.error(message, e);
-            throw new ProcessingException(message, e);
+            throw new ProcessingException("FileReader cannot read from '" + this.source + "'", e);
         } finally {
             URLConnectionUtils.closeQuietly(connection);
         }

Modified: cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/java/org/apache/cocoon/stringtemplate/StringTemplateGenerator.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/java/org/apache/cocoon/stringtemplate/StringTemplateGenerator.java?rev=1347606&r1=1347605&r2=1347606&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/java/org/apache/cocoon/stringtemplate/StringTemplateGenerator.java (original)
+++ cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/java/org/apache/cocoon/stringtemplate/StringTemplateGenerator.java Thu Jun  7 13:29:26 2012
@@ -25,7 +25,6 @@ import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
 import org.apache.cocoon.pipeline.ProcessingException;
-import org.apache.cocoon.pipeline.SetupException;
 import org.apache.cocoon.pipeline.caching.CacheKey;
 import org.apache.cocoon.pipeline.caching.CompoundCacheKey;
 import org.apache.cocoon.pipeline.caching.ParameterCacheKey;
@@ -178,7 +177,6 @@ public class StringTemplateGenerator ext
      */
     @Override
     public void setConfiguration(final Map<String, ? extends Object> parameters) {
-
         this.url = (URL) parameters.get("source");
         setup((Map<String, Object>) parameters);
     }