You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by cr...@apache.org on 2006/04/06 20:03:19 UTC

svn commit: r392022 - in /beehive/trunk/netui/src: core/org/apache/beehive/netui/core/urls/ core/org/apache/beehive/netui/core/urltemplates/ pageflow/org/apache/beehive/netui/pageflow/ pageflow/org/apache/beehive/netui/pageflow/internal/

Author: crogers
Date: Thu Apr  6 11:03:16 2006
New Revision: 392022

URL: http://svn.apache.org/viewcvs?rev=392022&view=rev
Log:
Fix for http://issues.apache.org/jira/browse/BEEHIVE-1093 to add the URLTemplateFactory and TemplatedURLFormatter to the request and reduce a synchronized bottleneck in ServletContext.

tests: bvt in netui, also ran the urlTemplates tests (WinXP)


Modified:
    beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urls/TemplatedURLFormatter.java
    beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urls/URLRewriterService.java
    beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urltemplates/URLTemplatesFactory.java
    beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowControlContainer.java
    beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java
    beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java
    beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultTemplatedURLFormatter.java

Modified: beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urls/TemplatedURLFormatter.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urls/TemplatedURLFormatter.java?rev=392022&r1=392021&r2=392022&view=diff
==============================================================================
--- beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urls/TemplatedURLFormatter.java (original)
+++ beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urls/TemplatedURLFormatter.java Thu Apr  6 11:03:16 2006
@@ -17,10 +17,10 @@
  */
 package org.apache.beehive.netui.core.urls;
 
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
 import java.util.Arrays;
 import java.util.List;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
 
 /**
  * Used by URLRewriterService to apply any relevant templates to a URL,
@@ -68,7 +68,7 @@
             Arrays.asList( new String[]{ PATH_TOKEN, QUERY_STRING_TOKEN } );
 
     /**
-     * Gets the TemplatedURLFormatter instance attribute of the ServletContext.
+     * Gets the TemplatedURLFormatter instance from a ServletContext attribute.
      *
      * @param servletContext the current ServletContext.
      * @return the TemplatedURLFormatter instance from the ServletContext.
@@ -86,7 +86,7 @@
     }
 
     /**
-     * Adds a given TemplatedURLFormatter instance as an attribute of the ServletContext.
+     * Adds a given TemplatedURLFormatter instance as an attribute on the ServletContext.
      *
      * @param servletContext the current ServletContext.
      * @param formatter the TemplatedURLFormatter instance to add as an attribute of the context
@@ -101,6 +101,40 @@
         }
 
         servletContext.setAttribute( TEMPLATED_URL_FORMATTER_ATTR, formatter );
+    }
+
+    /**
+     * Gets the TemplatedURLFormatter instance from a ServletRequest attribute.
+     *
+     * @param servletRequest the current ServletRequest.
+     * @return the TemplatedURLFormatter instance from the ServletRequest.
+     */
+    public static TemplatedURLFormatter getTemplatedURLFormatter(ServletRequest servletRequest)
+    {
+        assert servletRequest != null : "The ServletRequest cannot be null.";
+
+        if (servletRequest == null) {
+            throw new IllegalArgumentException("The ServletRequest cannot be null.");
+        }
+
+        return (TemplatedURLFormatter) servletRequest.getAttribute(TEMPLATED_URL_FORMATTER_ATTR);
+    }
+
+    /**
+     * Adds a given TemplatedURLFormatter instance as an attribute on the ServletRequest.
+     *
+     * @param servletRequest the current ServletRequest.
+     * @param formatter      the TemplatedURLFormatter instance to add as an attribute of the request
+     */
+    public static void initServletRequest(ServletRequest servletRequest, TemplatedURLFormatter formatter)
+    {
+        assert servletRequest != null : "The ServletRequest cannot be null.";
+
+        if (servletRequest == null) {
+            throw new IllegalArgumentException("The ServletRequest cannot be null.");
+        }
+
+        servletRequest.setAttribute(TEMPLATED_URL_FORMATTER_ATTR, formatter);
     }
 
     /**

Modified: beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urls/URLRewriterService.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urls/URLRewriterService.java?rev=392022&r1=392021&r2=392022&view=diff
==============================================================================
--- beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urls/URLRewriterService.java (original)
+++ beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urls/URLRewriterService.java Thu Apr  6 11:03:16 2006
@@ -17,20 +17,19 @@
  */
 package org.apache.beehive.netui.core.urls;
 
-import org.apache.beehive.netui.util.internal.InternalStringBuilder;
-
-import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
-import org.apache.beehive.netui.util.logging.Logger;
-
 import java.io.PrintStream;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.List;
 import java.util.Iterator;
+import java.util.List;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.util.internal.InternalStringBuilder;
+import org.apache.beehive.netui.util.logging.Logger;
+
 
 /**
  * Methods for registering URL rewriters, adding URL rewriters
@@ -403,7 +402,7 @@
         TemplatedURLFormatter formatter = getTemplatedURLFormatter( request );
         if ( formatter == null )
         {
-            formatter = TemplatedURLFormatter.getTemplatedURLFormatter( servletContext );
+            formatter = TemplatedURLFormatter.getTemplatedURLFormatter( request );
             if ( formatter == null )
             {
                 return uri.getURIString( uriContext );

Modified: beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urltemplates/URLTemplatesFactory.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urltemplates/URLTemplatesFactory.java?rev=392022&r1=392021&r2=392022&view=diff
==============================================================================
--- beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urltemplates/URLTemplatesFactory.java (original)
+++ beehive/trunk/netui/src/core/org/apache/beehive/netui/core/urltemplates/URLTemplatesFactory.java Thu Apr  6 11:03:16 2006
@@ -17,10 +17,11 @@
  */
 package org.apache.beehive.netui.core.urltemplates;
 
-import org.apache.beehive.netui.core.factory.Factory;
-
 import java.util.Collection;
 import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+
+import org.apache.beehive.netui.core.factory.Factory;
 
 /**
  * Access point to URL templates (an optional config file to help format
@@ -54,7 +55,7 @@
     protected Collection _requiredTokens = null;
 
     /**
-     * Gets the URLTemplatesFactory instance attribute of the ServletContext.
+     * Gets the URLTemplatesFactory instance from a ServletContext attribute.
      *
      * @param servletContext the current ServletContext.
      * @return the URLTemplatesFactory instance from the ServletContext.
@@ -72,7 +73,7 @@
     }
 
     /**
-     * Adds a given URLTemplatesFactory instance as an attribute of the ServletContext.
+     * Adds a given URLTemplatesFactory instance as an attribute on the ServletContext.
      *
      * @param servletContext the current ServletContext.
      * @param templatesFactory the URLTemplatesFactory instance to add as an attribute of the context
@@ -87,6 +88,40 @@
         }
 
         servletContext.setAttribute( URL_TEMPLATE_FACTORY_ATTR, templatesFactory );
+    }
+
+    /**
+     * Gets the URLTemplatesFactory instance from a ServletRequest attribute.
+     *
+     * @param servletRequest the current ServletRequest.
+     * @return the URLTemplatesFactory instance from the ServletRequest.
+     */
+    public static URLTemplatesFactory getURLTemplatesFactory(ServletRequest servletRequest)
+    {
+        assert servletRequest != null : "The ServletRequest cannot be null.";
+
+        if (servletRequest == null) {
+            throw new IllegalArgumentException("The ServletRequest cannot be null.");
+        }
+
+        return (URLTemplatesFactory) servletRequest.getAttribute(URL_TEMPLATE_FACTORY_ATTR);
+    }
+
+    /**
+     * Adds a given URLTemplatesFactory instance as an attribute on the ServletRequest.
+     *
+     * @param servletRequest   the current ServletRequest.
+     * @param templatesFactory the URLTemplatesFactory instance to add as an attribute of the request
+     */
+    public static void initServletRequest(ServletRequest servletRequest, URLTemplatesFactory templatesFactory)
+    {
+        assert servletRequest != null : "The ServletRequest cannot be null.";
+
+        if (servletRequest == null) {
+            throw new IllegalArgumentException("The ServletRequest cannot be null.");
+        }
+
+        servletRequest.setAttribute(URL_TEMPLATE_FACTORY_ATTR, templatesFactory);
     }
 
     /**

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowControlContainer.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowControlContainer.java?rev=392022&r1=392021&r2=392022&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowControlContainer.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowControlContainer.java Thu Apr  6 11:03:16 2006
@@ -53,7 +53,7 @@
     );
 
     /**
-     * This method will preform the beginContext() on any and all <code>ControlContainerContext</code> objects
+     * This method will perform the beginContext() on any and all <code>ControlContainerContext</code> objects
      * that are managed by the page flow runtime. If you call this, you must call the
      * <code>endContextOnPageFlow</code> method is also called.  The implementation may hold locks on the
      * control container and not calling the endContext may result in hangs and deadlocks.
@@ -67,7 +67,7 @@
 
 
     /**
-     * This method will preform the endContext() on any and all <code>ControlContainerContext</code> objects
+     * This method will perform the endContext() on any and all <code>ControlContainerContext</code> objects
      * that are managed by the page flow runtime.
      * @param flowController
      */

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java?rev=392022&r1=392021&r2=392022&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java Thu Apr  6 11:03:16 2006
@@ -18,6 +18,8 @@
 package org.apache.beehive.netui.pageflow;
 
 import org.apache.beehive.netui.core.urls.URLRewriterService;
+import org.apache.beehive.netui.core.urls.TemplatedURLFormatter;
+import org.apache.beehive.netui.core.urltemplates.URLTemplatesFactory;
 import org.apache.beehive.netui.pageflow.handler.Handlers;
 import org.apache.beehive.netui.pageflow.internal.*;
 import org.apache.beehive.netui.script.common.ImplicitObjectUtil;
@@ -143,10 +145,21 @@
             er.beginPageRequest( requestContext );
             long startTime = System.currentTimeMillis();
 
-            //
             // Register the default URLRewriter
-            //
             URLRewriterService.registerURLRewriter( 0, request, new DefaultURLRewriter() );
+
+            //
+            // A ServletContext may have synchronization associated with getting attributes.
+            // This could be a bottleneck under load for an app with pages that require lots
+            // of URL rewriting. To improve performance add the template factory and formatter
+            // to the request.
+            //
+            if (URLTemplatesFactory.getURLTemplatesFactory(request) == null) {
+                URLTemplatesFactory.initServletRequest(request, URLTemplatesFactory.getURLTemplatesFactory(_servletContext));
+            }
+            if (TemplatedURLFormatter.getTemplatedURLFormatter(request) == null) {
+                TemplatedURLFormatter.initServletRequest(request, TemplatedURLFormatter.getTemplatedURLFormatter(_servletContext));
+            }
 
             PageFlowRequestWrapper rw = PageFlowRequestWrapper.unwrap( request );
             boolean isForwardedRequest = rw != null && rw.isForwardedRequest();

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java?rev=392022&r1=392021&r2=392022&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java Thu Apr  6 11:03:16 2006
@@ -21,6 +21,8 @@
 import org.apache.beehive.netui.util.internal.ServletUtils;
 
 import org.apache.beehive.netui.core.urls.URLRewriterService;
+import org.apache.beehive.netui.core.urls.TemplatedURLFormatter;
+import org.apache.beehive.netui.core.urltemplates.URLTemplatesFactory;
 import org.apache.beehive.netui.pageflow.config.PageFlowActionForward;
 import org.apache.beehive.netui.pageflow.config.PageFlowActionMapping;
 import org.apache.beehive.netui.pageflow.handler.ActionForwardHandler;
@@ -816,10 +818,21 @@
         er.beginActionRequest( requestContext );
         long startTime = System.currentTimeMillis();
 
-        //
         // Register the default URLRewriter
-        //
         URLRewriterService.registerURLRewriter( 0, request, new DefaultURLRewriter() );
+
+        //
+        // A ServletContext may have synchronization associated with getting attributes.
+        // This could be a bottleneck under load for an app with pages that require lots
+        // of URL rewriting. To improve performance add the template factory and formatter
+        // to the request.
+        //
+        if (URLTemplatesFactory.getURLTemplatesFactory(request) == null) {
+            URLTemplatesFactory.initServletRequest(request, URLTemplatesFactory.getURLTemplatesFactory(servletContext));
+        }
+        if (TemplatedURLFormatter.getTemplatedURLFormatter(request) == null) {
+            TemplatedURLFormatter.initServletRequest(request, TemplatedURLFormatter.getTemplatedURLFormatter(servletContext));
+        }
 
         PageFlowRequestWrapper rw = PageFlowRequestWrapper.unwrap( request );
         boolean isForwardedRequest = rw != null && rw.isForwardedRequest();

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultTemplatedURLFormatter.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultTemplatedURLFormatter.java?rev=392022&r1=392021&r2=392022&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultTemplatedURLFormatter.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultTemplatedURLFormatter.java Thu Apr  6 11:03:16 2006
@@ -17,15 +17,15 @@
  */
 package org.apache.beehive.netui.pageflow.internal;
 
-import org.apache.beehive.netui.core.urls.URIContext;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+
 import org.apache.beehive.netui.core.urls.MutableURI;
 import org.apache.beehive.netui.core.urls.TemplatedURLFormatter;
+import org.apache.beehive.netui.core.urls.URIContext;
 import org.apache.beehive.netui.core.urltemplates.URLTemplate;
 import org.apache.beehive.netui.core.urltemplates.URLTemplatesFactory;
 
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
-
 
 /**
  * Default implementation of TemplatedURLFormatter for formatting URLs
@@ -60,7 +60,7 @@
         // If it is found, apply the value to the template.
         String result = null;
         URLTemplate template = null;
-        URLTemplatesFactory factory = URLTemplatesFactory.getURLTemplatesFactory( servletContext );
+        URLTemplatesFactory factory = URLTemplatesFactory.getURLTemplatesFactory( request );
 
         if ( factory != null )
         {