You are viewing a plain text version of this content. The canonical link for it is here.
Posted to svn@forrest.apache.org by th...@apache.org on 2006/09/18 09:51:11 UTC

svn commit: r447311 - in /forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher: default.plugin.properties.xml internal.xmap src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java

Author: thorsten
Date: Mon Sep 18 00:51:10 2006
New Revision: 447311

URL: http://svn.apache.org/viewvc?view=rev&rev=447311
Log:
FOR-931
Activating enhanced caching. We are using now an AggregateValidity over all contracts and their raw data
(if exists). Still we can move some methods (marked with *) to the startDocument method and make the jx 
generator cacheable. You can turn the caching on/off by either define it in your f.p.x or on a request base
by adding "?dispatcher.caching=off" to the requested url. 

Modified:
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/default.plugin.properties.xml
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/internal.xmap
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java

Modified: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/default.plugin.properties.xml
URL: http://svn.apache.org/viewvc/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/default.plugin.properties.xml?view=diff&rev=447311&r1=447310&r2=447311
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/default.plugin.properties.xml (original)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/default.plugin.properties.xml Mon Sep 18 00:51:10 2006
@@ -22,4 +22,5 @@
   <property name="dispatcher.fallback.theme-ext" value=".fv"/>
   <property name="dispatcher.themer" value="org.apache.forrest.themes.core"/>
   <property name="dispatcher.home" value="org.apache.forrest.plugin.internal.dispatcher"/>
+  <property name="dispatcher.caching" value="on" />
 </properties>

Modified: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/internal.xmap
URL: http://svn.apache.org/viewvc/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/internal.xmap?view=diff&rev=447311&r1=447310&r2=447311
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/internal.xmap (original)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/internal.xmap Mon Sep 18 00:51:10 2006
@@ -169,6 +169,7 @@
         <map:transform type="dispatcher">
           <map:parameter name="cacheKey" value="{0}" />
           <map:parameter name="validityFile" value="cocoon:/resolve.structurer.{1}" />
+          <map:parameter name="dispatcher.caching" value="{forrest:dispatcher.caching}" />
           <map:parameter name="request" value="{1}" />
           <map:parameter name="type" value="internal{2}" />
         </map:transform>
@@ -183,6 +184,7 @@
         <map:transform type="dispatcher">
           <map:parameter name="cacheKey" value="{0}" />
           <map:parameter name="validityFile" value="cocoon:/resolve.structurer.{1}" />
+          <map:parameter name="dispatcher.caching" value="{forrest:dispatcher.caching}" />
           <map:parameter name="request" value="{1}" />
           <map:parameter name="type" value="css" />
         </map:transform>
@@ -206,6 +208,7 @@
         <map:transform type="dispatcher">
           <map:parameter name="cacheKey" value="{0}" />
           <map:parameter name="validityFile" value="cocoon:/resolve.structurer.{1}" />
+          <map:parameter name="dispatcher.caching" value="{forrest:dispatcher.caching}" />
           <map:parameter name="request" value="{1}" />
           <map:parameter name="type" value="xhtml2" />
         </map:transform>

Modified: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java
URL: http://svn.apache.org/viewvc/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java?view=diff&rev=447311&r1=447310&r2=447311
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java (original)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java Mon Sep 18 00:51:10 2006
@@ -19,7 +19,6 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.Serializable;
-import java.net.MalformedURLException;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -46,6 +45,7 @@
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.source.SourceException;
 import org.apache.excalibur.source.SourceValidity;
+import org.apache.excalibur.source.impl.validity.AggregatedValidity;
 import org.apache.excalibur.xml.xpath.XPathProcessor;
 import org.apache.forrest.dispatcher.ContractBean;
 import org.apache.forrest.dispatcher.ContractBeanDOMImpl;
@@ -196,7 +196,9 @@
 
     private Document defaultProperties;
 
-    private SourceValidity validity;
+    private AggregatedValidity validity;
+
+    private String validityOverride;
 
     public static final String HOOKS_TRANSFORMER_PARAMETER = "hooksTransformer";
 
@@ -206,6 +208,13 @@
     public static final String CACHE_PARAMETER = "cacheKey";
     public static final String VALIDITY_PARAMETER = "validityFile";
 
+    private static final String VALIDITY_OVERRIDE_PARAMETER = "dispatcher.caching";
+    
+    private static final String CACHING_OFF = "off";
+    
+    private static final String CACHING_ON = "on";
+    
+
     /**
      * Constructor Set the namespace
      */
@@ -230,6 +239,19 @@
      *         component is currently not cacheable.
      */
     public SourceValidity getValidity() {
+//      You can either request URL?dispatcher.caching=off
+        // or add this property to forrest.properties.xml
+        // to force a SourceValidity.INVALID
+        if(null!=validityFile&!(validityOverride.equals(CACHING_OFF))){
+            this.validity= new AggregatedValidity();
+            try {
+                this.validity.add(m_resolver.resolveURI(validityFile).getValidity());
+            } catch (Exception e) {
+                getLogger().error(e.getMessage());
+            }
+        }
+        else 
+            this.validity=null;
         return this.validity;
     }
 
@@ -258,6 +280,7 @@
      */
     public void recycle() {
         localRecycle();
+        this.validity = null;
         super.recycle();
 
     }
@@ -296,19 +319,14 @@
         this.requestId= parameters.getParameter(
                 DISPATCHER_REQUEST_ATTRIBUTE, null);
         this.cacheKey = parameters.getParameter(
-                this.CACHE_PARAMETER, null);
+                CACHE_PARAMETER, null);
         if(null==this.cacheKey) getLogger().warn("Caching not activated! Declare the CACHE_KEY_PARAMETER="+CACHE_PARAMETER+" in your sitemap.");
         this.validityFile = parameters.getParameter(
-                this.VALIDITY_PARAMETER, null);
-        // FIXME: We are taking here a shortcut that we need to enhance ASAP
-        // We assume that all contracts that a structurer may include
-        // have not changed, which may the wrong assumption.
-        // The workaround is to do a touch on the $validityFile
-        // to force a SourceValidity.INVALID
-        if(null!=validityFile)
-            this.validity=m_resolver.resolveURI(validityFile).getValidity();
-        else 
-            this.validity=null;
+                VALIDITY_PARAMETER, null);
+        this.validityOverride = parameters.getParameter(
+                VALIDITY_OVERRIDE_PARAMETER, "");
+        this.cacheKey+=validityOverride;
+        
         if (requestId == null) {
             String error = "dispatcherError:\n"
                     + "You have to set the \"request\" parameter in the sitemap!";
@@ -336,16 +354,7 @@
             throw new ProcessingException(error);
         }
         parameterHelper.put(STRUCTURER_FORMAT_ATTRIBUTE, requestedFormat);
-        /*
-         * this.pathXSL = parameters.getParameter(PATH_PARAMETER,null); if
-         * (this.pathXSL==null){ String warning = "dispatcherError:\n" + "You
-         * did not set up the \"path\" parameter in the sitemap, we are not
-         * going to support default variables in contracts." + " Meaning that
-         * you are not able to use e.g. $skin-img-dir, if you do the contract
-         * bean implementation will throw an exception.";
-         * getLogger().warn(warning); }
-         * parameterHelper.put(PATH_PARAMETER,pathXSL);
-         */
+
         this.hooksXSL = parameters.getParameter(HOOKS_TRANSFORMER_PARAMETER,
                 null);
         try {
@@ -673,6 +682,15 @@
                 String contractUri = ContractBean.CONTRACT_RESOLVE_PREFIX + "."
                         + currentFormat + "." + value;
                 try {
+                    // Adding the contract to the validity object.
+                    // As soon the contract changes we want a rebuild of 
+                    // the page and not the cached object.
+                    if(!validityOverride.equals(CACHING_OFF)) {
+                        SourceValidity contractValidityId = m_resolver.resolveURI(contractUri).getValidity();
+//                      we cannot allow null in an AggregatedValidity
+                        if (null!=contractValidityId)
+                            this.validity.add(contractValidityId);
+                    }
                     Document doc = org.apache.forrest.dispatcher.util.SourceUtil
                             .readDOM(contractUri, this.manager);
                     contract.setContractImpl(doc, contractUri);
@@ -699,6 +717,15 @@
                 // contract is a nugget-contract
                 contract.setNugget(true);
                 try {
+                    // Adding the raw data to the validity object.
+                    // As soon the raw data changes we want a rebuild of 
+                    // the page and not the cached object.
+                    if(!validityOverride.equals(CACHING_OFF)) {
+                        SourceValidity contractValidityRaw = m_resolver.resolveURI(value).getValidity();
+                        // we cannot allow null in an AggregatedValidity
+                        if(null!=contractValidityRaw)
+                            this.validity.add(contractValidityRaw);
+                    }
                     Document doc = org.apache.forrest.dispatcher.util.SourceUtil
                             .readDOM(value, this.manager);
                     contract.setContractRawData(doc);