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 )
{