You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2003/01/30 20:36:32 UTC
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core ApplicationFilterChain.java
remm 2003/01/30 11:36:32
Modified: catalina/src/share/org/apache/catalina/core
ApplicationFilterChain.java
Log:
- Remove the use of a collection by an array (less overhead, no object
allocation).
- The default pipeline configuration is not hotspot free (next in line: optimizing
the request dispatcher and HTTP auth).
Revision Changes Path
1.5 +45 -31 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationFilterChain.java
Index: ApplicationFilterChain.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationFilterChain.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ApplicationFilterChain.java 25 Nov 2002 21:03:50 -0000 1.4
+++ ApplicationFilterChain.java 30 Jan 2003 19:36:32 -0000 1.5
@@ -99,6 +99,12 @@
final class ApplicationFilterChain implements FilterChain {
+ // -------------------------------------------------------------- Constants
+
+
+ public static final int INCREMENT = 10;
+
+
// ----------------------------------------------------------- Constructors
@@ -116,17 +122,23 @@
/**
- * The set of filters that will be executed on this chain.
+ * Filters.
*/
- private ArrayList filters = new ArrayList();
+ private ApplicationFilterConfig[] filters =
+ new ApplicationFilterConfig[0];
/**
- * The iterator that is used to maintain the current position in the filter chain.
- * This iterator is called the first time that <code>doFilter()</code>
- * is called.
+ * The int which is used to maintain the current position
+ * in the filter chain.
*/
- private Iterator iterator = null;
+ private int pos = 0;
+
+
+ /**
+ * The int which gives the current number of filters in the chain.
+ */
+ private int n = 0;
/**
@@ -171,9 +183,9 @@
final ServletResponse res = response;
try {
java.security.AccessController.doPrivileged(
- new java.security.PrivilegedExceptionAction()
- {
- public Object run() throws ServletException, IOException {
+ new java.security.PrivilegedExceptionAction() {
+ public Object run()
+ throws ServletException, IOException {
internalDoFilter(req,res);
return null;
}
@@ -195,17 +207,13 @@
}
}
- private void internalDoFilter(ServletRequest request, ServletResponse response)
+ private void internalDoFilter(ServletRequest request,
+ ServletResponse response)
throws IOException, ServletException {
- // Construct an iterator the first time this method is called
- if (this.iterator == null)
- this.iterator = filters.iterator();
-
// Call the next filter if there is one
- if (this.iterator.hasNext()) {
- ApplicationFilterConfig filterConfig =
- (ApplicationFilterConfig) iterator.next();
+ if (pos < n) {
+ ApplicationFilterConfig filterConfig = filters[pos++];
Filter filter = null;
try {
filter = filterConfig.getFilter();
@@ -215,15 +223,14 @@
if( System.getSecurityManager() != null ) {
final ServletRequest req = request;
final ServletResponse res = response;
- Principal principal = ((HttpServletRequest) req).getUserPrincipal();
+ Principal principal =
+ ((HttpServletRequest) req).getUserPrincipal();
Class[] classType = new Class[]{ServletRequest.class,
ServletResponse.class,
FilterChain.class};
Object[] args = new Object[]{req, res, this};
- SecurityUtil.doAsPrivilege("doFilter",
- filter,
- classType,
- args);
+ SecurityUtil.doAsPrivilege
+ ("doFilter", filter, classType, args);
} else {
filter.doFilter(request, response, this);
}
@@ -267,7 +274,8 @@
if( System.getSecurityManager() != null ) {
final ServletRequest req = request;
final ServletResponse res = response;
- Principal principal = ((HttpServletRequest) req).getUserPrincipal();
+ Principal principal =
+ ((HttpServletRequest) req).getUserPrincipal();
Class[] classType = new Class[]{ServletRequest.class,
ServletResponse.class};
Object[] args = new Object[]{req, res};
@@ -318,7 +326,13 @@
*/
void addFilter(ApplicationFilterConfig filterConfig) {
- this.filters.add(filterConfig);
+ if (n == filters.length) {
+ ApplicationFilterConfig[] newFilters =
+ new ApplicationFilterConfig[n + INCREMENT];
+ System.arraycopy(filters, 0, newFilters, 0, n);
+ filters = newFilters;
+ }
+ filters[n++] = filterConfig;
}
@@ -328,9 +342,9 @@
*/
void release() {
- this.filters.clear();
- this.iterator = null;
- this.servlet = null;
+ n = 0;
+ pos = 0;
+ servlet = null;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org