Excellent,

These kind of improvement are very important.
We need to have an overview of what is done by each component to be able to improve the code quality and the performance.
(Actually, we need a design dossier ;-)   )

Salutations,
Cyriaque,

le 11/08/2006 09:10 [EMAIL PROTECTED] a écrit :
Author: thorsten
Date: Fri Aug 11 00:10:20 2006
New Revision: 430701

URL: http://svn.apache.org/viewvc?rev=430701&view=rev
Log:
Moving the request/generation of the properties out of the contract 
implementation bean since it will not change for one structurer file. The 
properties will be now generated once per structurer instead of x times for x 
contracts. This reduces the processing load quite a bit.

Modified:
    
forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/ContractBeanDOMImpl.java
    
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/src/java/org/apache/forrest/dispatcher/ContractBeanDOMImpl.java
URL: 
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/ContractBeanDOMImpl.java?rev=430701&r1=430700&r2=430701&view=diff
==============================================================================
--- 
forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/ContractBeanDOMImpl.java
 (original)
+++ 
forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/ContractBeanDOMImpl.java
 Fri Aug 11 00:10:20 2006
@@ -115,6 +115,8 @@
private URIResolver m_uriResolver; + private Object defaultVariables;
+
     /**
      * The ContractBean contains all fields to work with contracts. It is a
      * helper bean.
@@ -126,14 +128,16 @@
* * @param manager
      * @param parameterHelper
+ * @param defaultProperties * @throws ParserConfigurationException
      */
-    public ContractBeanDOMImpl(ServiceManager manager, HashMap 
parameterHelper,URIResolver uriResolver)
+    public ContractBeanDOMImpl(ServiceManager manager, HashMap 
parameterHelper,Document defaultProperties, URIResolver uriResolver)
             throws ParserConfigurationException {
         m_uriResolver=uriResolver;
         this.manager = manager;
         dispatcherHelper = new DispatcherHelper(manager);
         this.parameterHelper = parameterHelper;
+        this.defaultVariables=defaultProperties;
     }
/*
@@ -252,12 +256,8 @@
                      */
                     // default forrest properties
                     Transformer transformer = cachedXSLT.newTransformer();
-                    String request= (String) 
parameterHelper.get(DispatcherTransformer.DISPATCHER_REQUEST_ATTRIBUTE);
-                    String propertyURI= "cocoon://"+request+".props";
-                    Node defaultVariables = 
org.apache.forrest.dispatcher.util.SourceUtil
-                            .readDOM(propertyURI, this.manager);
                     transformer.setParameter("defaultVariables",
-                            defaultVariables);
+                            this.defaultVariables);
                     transformer.setOutputProperty(
                             OutputKeys.OMIT_XML_DECLARATION, "yes");
                     transformer.setOutputProperty(OutputKeys.INDENT, "yes");

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?rev=430701&r1=430700&r2=430701&view=diff
==============================================================================
--- 
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
 Fri Aug 11 00:10:20 2006
@@ -23,6 +23,7 @@
 import java.util.Iterator;
 import java.util.Map;
+import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.URIResolver;
@@ -193,6 +194,8 @@
private String requestId; + private Document defaultProperties;
+
     public static final String HOOKS_TRANSFORMER_PARAMETER = 
"hooksTransformer";
public static final String PATH_PARAMETER = "path";
@@ -292,6 +295,16 @@
             getLogger().error(error);
             throw new ProcessingException(error);
         }
+        String propertyURI= "cocoon://"+requestId+".props";
+        try {
+            this.defaultProperties = 
org.apache.forrest.dispatcher.util.SourceUtil
+            .readDOM(propertyURI, this.manager);
+        } catch (Exception e1) {
+            String error = "dispatcherError:\n"
+                + "Could not get the properties for "+propertyURI;
+        getLogger().error(error);
+        throw new ProcessingException(error);
+        }
         parameterHelper.put(DISPATCHER_REQUEST_ATTRIBUTE, requestId);
         this.requestedFormat = parameters.getParameter(
                 STRUCTURER_FORMAT_ATTRIBUTE, null);
@@ -620,9 +633,10 @@
         try {
             if (contract == null)
                 contract = new ContractBeanDOMImpl(this.manager,
-                        parameterHelper,(URIResolver)this);
-            else
-                contract.initialize();
+                        parameterHelper,defaultProperties,(URIResolver)this);
+            // This is not needed since the manager did not change.
+            //else
+              //  contract.initialize();
         } catch (Exception e) {
             String error = DispatcherException.ERROR_500 + "\n"
                     + "component: ContractBean" + "\n"