Home » apache-tomcat-6.0.26-src » org.apache » tomcat » util » threads » [javadoc | source]

    1   /*
    2    *  Licensed to the Apache Software Foundation (ASF) under one or more
    3    *  contributor license agreements.  See the NOTICE file distributed with
    4    *  this work for additional information regarding copyright ownership.
    5    *  The ASF licenses this file to You under the Apache License, Version 2.0
    6    *  (the "License"); you may not use this file except in compliance with
    7    *  the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
   10    *
   11    *  Unless required by applicable law or agreed to in writing, software
   12    *  distributed under the License is distributed on an "AS IS" BASIS,
   13    *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   14    *  See the License for the specific language governing permissions and
   15    *  limitations under the License.
   16    */
   17   
   18   package org.apache.tomcat.util.threads;
   19   
   20   import java.util.Hashtable;
   21   
   22   /** Special thread that allows storing of attributes and notes.
   23    *  A guard is used to prevent untrusted code from accessing the
   24    *  attributes.
   25    *
   26    *  This avoids hash lookups and provide something very similar
   27    * with ThreadLocal ( but compatible with JDK1.1 and faster on
   28    * JDK < 1.4 ).
   29    *
   30    * The main use is to store 'state' for monitoring ( like "processing
   31    * request 'GET /' ").
   32    */
   33   public class ThreadWithAttributes extends Thread {
   34       
   35       private Object control;
   36       public static int MAX_NOTES=16;
   37       private Object notes[]=new Object[MAX_NOTES];
   38       private Hashtable attributes=new Hashtable();
   39       private String currentStage;
   40       private Object param;
   41       
   42       private Object thData[];
   43   
   44       public ThreadWithAttributes(Object control, Runnable r) {
   45           super(r);
   46           this.control=control;
   47       }
   48       
   49       public final Object[] getThreadData(Object control ) {
   50           return thData;
   51       }
   52       
   53       public final void setThreadData(Object control, Object thData[] ) {
   54           this.thData=thData;
   55       }
   56   
   57       /** Notes - for attributes that need fast access ( array )
   58        * The application is responsible for id management
   59        */
   60       public final void setNote( Object control, int id, Object value ) {
   61           if( this.control != control ) return;
   62           notes[id]=value;
   63       }
   64   
   65       /** Information about the curent performed operation
   66        */
   67       public final String getCurrentStage(Object control) {
   68           if( this.control != control ) return null;
   69           return currentStage;
   70       }
   71   
   72       /** Information about the current request ( or the main object
   73        * we are processing )
   74        */
   75       public final Object getParam(Object control) {
   76           if( this.control != control ) return null;
   77           return param;
   78       }
   79   
   80       public final void setCurrentStage(Object control, String currentStage) {
   81           if( this.control != control ) return;
   82           this.currentStage = currentStage;
   83       }
   84   
   85       public final void setParam( Object control, Object param ) {
   86           if( this.control != control ) return;
   87           this.param=param;
   88       }
   89   
   90       public final Object getNote(Object control, int id ) {
   91           if( this.control != control ) return null;
   92           return notes[id];
   93       }
   94   
   95       /** Generic attributes. You'll need a hashtable lookup -
   96        * you can use notes for array access.
   97        */
   98       public final Hashtable getAttributes(Object control) {
   99           if( this.control != control ) return null;
  100           return attributes;
  101       }
  102   }

Home » apache-tomcat-6.0.26-src » org.apache » tomcat » util » threads » [javadoc | source]