1 22 23 24 package com.mchange.v2.c3p0.stmt; 25 26 import java.sql.*; 27 import com.mchange.v2.async.AsynchronousRunner; 28 29 public final class DoubleMaxStatementCache extends GooGooStatementCache 30 { 31 int max_statements; 33 Deathmarch globalDeathmarch = new Deathmarch(); 34 35 int max_statements_per_connection; 36 DeathmarchConnectionStatementManager dcsm; 37 38 public DoubleMaxStatementCache(AsynchronousRunner blockingTaskAsyncRunner, int max_statements, int max_statements_per_connection) 39 { 40 super( blockingTaskAsyncRunner ); 41 this.max_statements = max_statements; 42 this.max_statements_per_connection = max_statements_per_connection; 43 } 44 45 protected ConnectionStatementManager createConnectionStatementManager() 47 { return (this.dcsm = new DeathmarchConnectionStatementManager()); } 48 49 void addStatementToDeathmarches( Object pstmt, Connection physicalConnection ) 51 { 52 globalDeathmarch.deathmarchStatement( pstmt ); 53 dcsm.getDeathmarch( physicalConnection ).deathmarchStatement( pstmt ); 54 } 55 56 void removeStatementFromDeathmarches( Object pstmt, Connection physicalConnection ) 57 { 58 globalDeathmarch.undeathmarchStatement( pstmt ); 59 dcsm.getDeathmarch( physicalConnection ).undeathmarchStatement( pstmt ); 60 } 61 62 boolean prepareAssimilateNewStatement(Connection pcon) 63 { 64 int cxn_stmt_count = dcsm.getNumStatementsForConnection( pcon ); 65 if (cxn_stmt_count < max_statements_per_connection) { 67 int global_size = this.countCachedStatements(); 68 return ( global_size < max_statements || (global_size == max_statements && globalDeathmarch.cullNext()) ); 69 } 70 else return (cxn_stmt_count == max_statements_per_connection && dcsm.getDeathmarch( pcon ).cullNext()); 72 } 73 } 74 | Popular Tags |