FileDocCategorySizeDatePackage
CoordinatorLogPool.javaAPI DocGlassfish v2 API5327Fri May 04 22:36:36 BST 2007com.sun.jts.CosTransactions

CoordinatorLogPool

public class CoordinatorLogPool extends Object
The CoordinatorLogPool is used as a cache for CoordinatorLog objects. This pool allows the re-use of these objects which are very expensive to instantiate. The pool is used by replacing calls to 'new CoordinatorLog()' in the TopCoordinator with calls to CoordinatorLogPool.getCoordinatorLog(). The getCoordinatorLog() method attempts to return a CoordinatorLog from the pool. If the pool is empty it instantiates a new CoordinatorLog. Objects are re-used by calling CoordinatorLogPool.putCoordinatorLog() to return a CoordinatorLog object back to the pool. At this time a check is made to ensure that the internal pool size doesn't exceed a pre set limit. If it does, then the object is discarded and not put back into the pool. The pool was added to improve performance of transaction logging
version
1.00
author
Arun Krishnan
see

Fields Summary
private Stack
pool
private static final int
MAXSTACKSIZE
public static CoordinatorLogPool
CLPool
public static Hashtable
CLPooltable
Constructors Summary
public CoordinatorLogPool()
constructor

    

           
      
	pool = new Stack();
    
Methods Summary
public static synchronized CoordinatorLoggetCoordinatorLog()
get a CoordinatorLog object from the cache. Instantiate a new CoordinatorLog object if the cache is empty.

        if (Configuration.isDBLoggingEnabled() || 
            Configuration.isFileLoggingDisabled())
            return null;
	if (CLPool.pool.empty()) {
	    return new CoordinatorLog();
	}
	else {
	    CoordinatorLog cl = (CoordinatorLog) CLPool.pool.pop();
	    return cl;
	}
    
public static synchronized CoordinatorLoggetCoordinatorLog(java.lang.String logPath)

        CoordinatorLogPool clpool = (CoordinatorLogPool)CLPooltable.get(logPath);
        if (clpool == null) {
            clpool = new CoordinatorLogPool();
            CLPooltable.put(logPath,clpool);
        }
        if (clpool.pool.empty()) {
            return new CoordinatorLog(logPath);
        }
        else {
            return (CoordinatorLog)clpool.pool.pop();
        }
    
public static voidputCoordinatorLog(CoordinatorLog cl)
return a CoordinatorLog object to the cache. To limit the size of the cache a check is made to ensure that the cache doesn't already have more that MAXSTACKSIZE elements. If so the object being returned is discarded.

	if (CLPool.pool.size() <= MAXSTACKSIZE) {
	    CLPool.pool.push(cl);
	} 
    
public static voidputCoordinatorLog(CoordinatorLog cl, java.lang.String logPath)

        CoordinatorLogPool clpool = (CoordinatorLogPool)CLPooltable.get(logPath);
        if (clpool == null) {
            clpool = new CoordinatorLogPool();
            CLPooltable.put(logPath,clpool);
        }
        if (clpool.pool.size() <= MAXSTACKSIZE) {
            clpool.pool.push(cl);
        }