You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by lu...@apache.org on 2003/11/25 19:05:06 UTC
cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime PerThreadTagHandlerPool.java
luehe 2003/11/25 10:05:06
Modified: jasper2/src/share/org/apache/jasper/runtime
PerThreadTagHandlerPool.java
Log:
General cleanup (for instance, perThread.get() was always returning null)
Revision Changes Path
1.4 +46 -61 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/PerThreadTagHandlerPool.java
Index: PerThreadTagHandlerPool.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/PerThreadTagHandlerPool.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- PerThreadTagHandlerPool.java 2 Sep 2003 21:39:59 -0000 1.3
+++ PerThreadTagHandlerPool.java 25 Nov 2003 18:05:06 -0000 1.4
@@ -63,27 +63,28 @@
import java.util.Enumeration;
import java.util.Hashtable;
+import java.util.Vector;
-import javax.servlet.Servlet;
+import javax.servlet.ServletConfig;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.Tag;
+import org.apache.jasper.Constants;
+
/**
- * Pool of tag handlers that can be reused.
- * Experimental: use thread local.
+ * Thread-local based pool of tag handlers that can be reused.
*
* @author Jan Luehe
* @author Costin Manolache
*/
public class PerThreadTagHandlerPool extends TagHandlerPool {
- public static int MAX_SIZE=100;
+ private int maxSize;
+
+ // For cleanup
+ private Vector perThreadDataVector;
- private int maxSize=MAX_SIZE;
- private int initialSize=5;
- private ThreadLocal perThread=new ThreadLocal();
- // for cleanup
- private Hashtable threadData=new Hashtable();
+ private ThreadLocal perThread;
private static class PerThreadData {
Tag handlers[];
@@ -95,26 +96,28 @@
*/
public PerThreadTagHandlerPool() {
super();
+ perThreadDataVector = new Vector();
}
- protected void init(Servlet servlet) {
- String maxSizeS=TagHandlerPool.getOption(servlet.getServletConfig(), OPTION_MAXSIZE, null);
- maxSize=Integer.parseInt(maxSizeS);
- if( maxSize <0 ) {
- maxSize=MAX_SIZE;
+ protected void init(ServletConfig config) {
+ maxSize = Constants.MAX_POOL_SIZE;
+ String maxSizeS = getOption(config, OPTION_MAXSIZE, null);
+ if (maxSizeS != null) {
+ maxSize = Integer.parseInt(maxSizeS);
+ if (maxSize < 0) {
+ maxSize = Constants.MAX_POOL_SIZE;
+ }
}
- }
- /**
- * Constructs a tag handler pool with the given capacity.
- *
- * @param capacity Tag handler pool capacity
- * @deprecated
- */
- public PerThreadTagHandlerPool(int capacity) {
- this.maxSize = capacity;
- //this.handlers = new Tag[capacity];
- //this.current = -1;
+ perThread = new ThreadLocal() {
+ protected Object initialValue() {
+ PerThreadData ptd = new PerThreadData();
+ ptd.handlers = new Tag[maxSize];
+ ptd.current = -1;
+ perThreadDataVector.addElement(ptd);
+ return ptd;
+ }
+ };
}
/**
@@ -128,8 +131,8 @@
* @throws JspException if a tag handler cannot be instantiated
*/
public Tag get(Class handlerClass) throws JspException {
- PerThreadData ptd=(PerThreadData)perThread.get();
- if( ptd!=null && ptd.current >=0 ) {
+ PerThreadData ptd = (PerThreadData)perThread.get();
+ if(ptd.current >=0 ) {
return ptd.handlers[ptd.current--];
} else {
try {
@@ -149,44 +152,26 @@
*/
public void reuse(Tag handler) {
PerThreadData ptd=(PerThreadData)perThread.get();
-
- if( ptd==null ) {
- ptd=new PerThreadData();
- ptd.handlers=new Tag[ initialSize ];
- ptd.current=0;
- threadData.put( ptd, ptd );
- }
-
if (ptd.current < (ptd.handlers.length - 1)) {
ptd.handlers[++ptd.current] = handler;
- return;
- }
-
- // no more space
- if( ptd.handlers.length < maxSize ) {
- // reallocate
- Tag newH[]=new Tag[ptd.handlers.length + initialSize];
- System.arraycopy(ptd.handlers, 0, newH, 0, ptd.handlers.length);
- ptd.handlers=newH;
- ptd.handlers[++ptd.current]=handler;
- return;
+ } else {
+ handler.release();
}
-
- //else
- handler.release();
}
/**
- * Calls the release() method of all available tag handlers in this tag
- * handler pool.
+ * Calls the release() method of all tag handlers in this tag handler pool.
*/
- public synchronized void release() {
- Enumeration ptdE=threadData.keys();
- while( ptdE.hasMoreElements() ) {
- PerThreadData ptd=(PerThreadData)ptdE.nextElement();
- for (int i=ptd.current; i>=0; i--) {
- if( ptd.handlers != null && ptd.handlers[i]!=null )
- ptd.handlers[i].release();
+ public void release() {
+ Enumeration enum = perThreadDataVector.elements();
+ while (enum.hasMoreElements()) {
+ PerThreadData ptd = (PerThreadData)enum.nextElement();
+ if (ptd.handlers != null) {
+ for (int i=ptd.current; i>=0; i--) {
+ if (ptd.handlers[i] != null) {
+ ptd.handlers[i].release();
+ }
+ }
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org