Bootstrap

c3p0.properties .vs. c3p0-config.xml

 

摘自c3p0.jar,方便查看

//c3p0.properties

#
# This file is detritus from various testing attempts
# the values below may change
,  and often do not represent
# reasonable values for the parameters.
#

#c3p0.testConnectionOnCheckout
= true
#c3p0.testConnectionOnCheckin
= true
#c3p0.minPoolSize
= 3
#c3p0.maxPoolSize
= 20
#c3p0.checkoutTimeout
= 2000
#c3p0.idleConnectionTestPeriod
= 5
#c3p0.maxConnectionAge
= 10
#c3p0.maxIdleTime
= 2
#c3p0.maxIdleTimeExcessConnections
= 1
#c3p0.propertyCycle
= 1
#c3p0.numHelperThreads
= 10
#c3p0.unreturnedConnectionTimeout
= 15
#c3p0.debugUnreturnedConnectionStackTraces
= true
#c3p0.maxStatements
= 30
#c3p0.maxStatementsPerConnection
= 5
#c3p0.maxAdministrativeTaskTime
= 3
#c3p0.preferredTestQuery
= SELECT  1
#c3p0.preferredTestQuery
= SELECT a FROM emptyyukyuk WHERE a  =   5
#c3p0.preferredTestQuery
= SELECT a FROM testpbds WHERE a  =   5
#c3p0.usesTraditionalReflectiveProxies
= true
#c3p0.automaticTestTable
= PoopyTestTable
#c3p0.acquireIncrement
= 4
#c3p0.acquireRetryDelay
= 1000
#c3p0.acquireRetryAttempts
= 60
#c3p0.connectionTesterClassName
= com.mchange.v2.c3p0.test.AlwaysFailConnectionTester
#c3p0.initialPoolSize
= 10

c3p0.jdbcUrl
= jdbc:postgresql://localhost/c3p0-test
c3p0.driverClass
= org.postgresql.Driver
c3p0.user
= swaldman
c3p0.password
= test
#c3p0.user
= poop
#c3p0.password
= scoop

#com.mchange.v2.log.MLog
= com.mchange.v2.log.log4j.Log4jMLog
#com.mchange.v2.log.MLog
= com.mchange.v2.log.jdk14logging.Jdk14MLog
#com.mchange.v2.log.MLog
= com.mchange.v2.log.FallbackMLog
#com.mchange.v2.log.NameTransformer
= com.mchange.v2.log.PackageNames
#com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL
= ALL


#com.mchange.v2.c3p0.VMID
= poop

 

 

//c3p0-config.xml 

< c3p0-config >
  
< default-config >
    
<!--  <property name="automaticTestTable">con_test</property>  -->
    
<!--  <property name="checkoutTimeout">30000</property>  -->
    
<!--  <property name="idleConnectionTestPeriod">30</property>  -->
    
<!--  <property name="initialPoolSize">10</property>  -->
    
<!--  <property name="maxIdleTime">30</property>  -->
    
<!--  <property name="maxIdleTimeExcessConnections">10</property>  -->
    
<!--  <property name="maxConnectionAge">60</property>  -->
    
<!--  <property name="propertyCycle">1</property>  -->
    
<!--  <property name="maxPoolSize">25</property>  -->
    
<!--  <property name="minPoolSize">5</property>  -->
    
<!--  <property name="maxStatements">0</property>  -->
    
<!--  <property name="maxStatementsPerConnection">5</property>  -->
    
<!--  <property name="maxAdministrativeTaskTime">4</property>  -->
    
<!--  <property name="connectionCustomizerClassName">com.mchange.v2.c3p0.test.TestConnectionCustomizer</property>  -->
    
<!--  <property name="unreturnedConnectionTimeout">15</property>  -->
    
<!--  <property name="debugUnreturnedConnectionStackTraces">true</property>  -->

    
<!--
    <user-overrides user="swaldman">
      <property name="debugUnreturnedConnectionStackTraces">true</property>
    </user-overrides>
    
-->

  
</ default-config >

<!--
  <named-config name="dumbTestConfig">
    <property name="maxStatements">200</property>
    <property name="jdbcUrl">jdbc:test</property>
    <user-overrides user="poop">
      <property name="maxStatements">300</property>
    </user-overrides>
   </named-config>
-->

</ c3p0-config >


 

 

//解析properties

 

/*
 * Distributed as part of c3p0 v.0.9.1.2
 *
 * Copyright (C) 2005 Machinery For Change, Inc.
 *
 * Author: Steve Waldman <[email protected]>
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 2.1, as 
 * published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this software; see the file LICENSE.  If not, write to the
 * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307, USA.
 
*/



package  com.mchange.v2.c3p0.cfg;

import  java.io. * ;
import  java.lang.reflect. * ;
import  java.util. * ;
import  com.mchange.v2.cfg. * ;
import  com.mchange.v2.log. * ;
import  com.mchange.v2.c3p0.impl. * ;

public   final   class  C3P0ConfigUtils
{
    
public final static String PROPS_FILE_RSRC_PATH     = "/c3p0.properties";
    
public final static String PROPS_FILE_PROP_PFX      = "c3p0.";
    
public final static int    PROPS_FILE_PROP_PFX_LEN  = 5;

    
private final static String[] MISSPELL_PFXS = {"/c3pO""/c3po""/C3P0""/C3PO"}
    
    
final static MLogger logger = MLog.getLogger( C3P0ConfigUtils.class );
    
    
static
    
{
        
if ( logger.isLoggable(MLevel.WARNING) && C3P0ConfigUtils.class.getResource( PROPS_FILE_RSRC_PATH ) == null )
        
{
            
// warn on a misspelling... its an ugly way to do this, but since resources are not listable...
            for (int i = 0; i < MISSPELL_PFXS.length; ++i)
            
{
                String test 
= MISSPELL_PFXS[i] + ".properties";
                
if (C3P0ConfigUtils.class.getResource( MISSPELL_PFXS[i] + ".properties" ) != null)
                
{
                    logger.warning(
"POSSIBLY MISSPELLED c3p0.properties CONFIG RESOURCE FOUND. " +
                                   
"Please ensure the file name is c3p0.properties, all lower case, " +
                                   
"with the digit 0 (NOT the letter O) in c3p0. It should be placed " +
                                   
" in the top level of c3p0's effective classpath.");
                    
break;
                }

            }

        }

    }


    
public static HashMap extractHardcodedC3P0Defaults(boolean stringify)
    
{
 HashMap out 
= new HashMap();

 
try
     
{
  Method[] methods 
= C3P0Defaults.class.getMethods();
  
for (int i = 0, len = methods.length; i < len; ++i)
      
{
   Method m 
= methods[i];
   
int mods = m.getModifiers();
   
if ((mods & Modifier.PUBLIC) != 0 && (mods & Modifier.STATIC) != 0 && m.getParameterTypes().length == 0)
       
{
    
if (stringify)
        
{
     Object val 
= m.invoke( nullnull );
     
if ( val != null )
         out.put( m.getName(), String.valueOf( val ) );
        }

    
else
        out.put( m.getName(), m.invoke( 
nullnull ) );
       }

      }

     }

 
catch (Exception e)
     
{
  logger.log( MLevel.WARNING, 
"Failed to extract hardcoded default config!?", e );
     }


 
return out;
    }


    
public static HashMap extractHardcodedC3P0Defaults()
    
return extractHardcodedC3P0Defaults( true ); }

    
public static HashMap extractC3P0PropertiesResources()
    
{
 HashMap out 
= new HashMap();

//  Properties props = findResourceProperties();
//  props.putAll( findAllC3P0Properties() );

  Properties props 
= findAllC3P0Properties();
 
for (Iterator ii = props.keySet().iterator(); ii.hasNext(); )
     
{
  String key 
= (String) ii.next();
  String val 
= (String) props.get(key);
  
if ( key.startsWith(PROPS_FILE_PROP_PFX) )
      out.put( key.substring(PROPS_FILE_PROP_PFX_LEN).trim(), val.trim() );
     }


 
return out;
    }


    
public static C3P0Config configFromFlatDefaults(HashMap flatDefaults)
    
{
 NamedScope defaults 
= new NamedScope();
 defaults.props.putAll( flatDefaults );
 
 HashMap configNamesToNamedScopes 
= new HashMap();
 
 
return new C3P0Config( defaults, configNamesToNamedScopes ); 
    }

    
    
public static String getPropFileConfigProperty( String prop )
    
return MultiPropertiesConfig.readVmConfig().getProperty( prop ); }

    
private static Properties findResourceProperties()
    
return MultiPropertiesConfig.readVmConfig().getPropertiesByResourcePath(PROPS_FILE_RSRC_PATH); }

    
private static Properties findAllC3P0Properties()
    
return MultiPropertiesConfig.readVmConfig().getPropertiesByPrefix("c3p0"); }

    
static Properties findAllC3P0SystemProperties()
    
{
 Properties out 
= new Properties();

 SecurityException sampleExc 
= null;
 
try
     
{
  
for (Iterator ii = C3P0Defaults.getKnownProperties().iterator(); ii.hasNext(); )
      
{
   String key 
= (String) ii.next();
   String prefixedKey 
= "c3p0." + key;
   String value 
= System.getProperty( prefixedKey );
   
if (value != null && value.trim().length() > 0)
       out.put( key, value );
      }

     }

 
catch (SecurityException e)
     
{ sampleExc = e; }

 
return out;
    }


    
private C3P0ConfigUtils()
    
{}
}


 

 

//解析xml

 

/*
 * Distributed as part of c3p0 v.0.9.1.2
 *
 * Copyright (C) 2005 Machinery For Change, Inc.
 *
 * Author: Steve Waldman <[email protected]>
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 2.1, as 
 * published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this software; see the file LICENSE.  If not, write to the
 * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307, USA.
 
*/



package  com.mchange.v2.c3p0.cfg;

import  java.io. * ;
import  java.util. * ;
import  javax.xml.parsers. * ;
import  org.w3c.dom. * ;
import  com.mchange.v2.log. * ;

import  com.mchange.v1.xml.DomParseUtils;

public   final   class  C3P0ConfigXmlUtils
{
    
public final static String XML_CONFIG_RSRC_PATH     = "/c3p0-config.xml";

    
final static MLogger logger = MLog.getLogger( C3P0ConfigXmlUtils.class );

    
public final static String LINESEP;

    
private final static String[] MISSPELL_PFXS = {"/c3p0""/c3pO""/c3po""/C3P0""/C3PO"}
    
private final static char[]   MISSPELL_LINES = {'-''_'};
    
private final static String[] MISSPELL_CONFIG = {"config""CONFIG"};
    
private final static String[] MISSPELL_XML = {"xml""XML"};

    
// its an ugly way to do this, but since resources are not listable...
    
//
    
// this is only executed once, and does about 40 tests (for now)
    
// should I care about the cost in initialization time?
    
//
    
// should only be run if we've checked for the correct file, but
    
// not found it
    private final static void warnCommonXmlConfigResourceMisspellings()
    
{
        
if (logger.isLoggable( MLevel.WARNING) )
        
{
            
for (int a = 0, lena = MISSPELL_PFXS.length; a < lena; ++a)
            
{
                StringBuffer sb 
= new StringBuffer(16);
                sb.append( MISSPELL_PFXS[a] );
                
for (int b = 0, lenb = MISSPELL_LINES.length; b < lenb; ++b)
                
{
                    sb.append(MISSPELL_LINES[b]);
                    
for (int c = 0, lenc = MISSPELL_CONFIG.length; c < lenc; ++c)
                    
{
                        sb.append(MISSPELL_CONFIG[c]);
                        sb.append(
'.');
                        
for (int d = 0, lend = MISSPELL_XML.length; d < lend; ++d)
                        
{
                            sb.append(MISSPELL_XML[d]);
                            String test 
= sb.toString();
                            
if (!test.equals(XML_CONFIG_RSRC_PATH))
                            
{
                                Object hopefullyNull 
= C3P0ConfigXmlUtils.class.getResource( test );
                                
if (hopefullyNull != null)
                                
{
                                    logger.warning(
"POSSIBLY MISSPELLED c3p0-conf.xml RESOURCE FOUND. " +
                                                   
"Please ensure the file name is c3p0-config.xml, all lower case, " +
                                                   
"with the digit 0 (NOT the letter O) in c3p0. It should be placed " +
                                                   
" in the top level of c3p0's effective classpath.");
                                    
return;
                                }

                            }

                        }

                    }


                }

            }

        }

    }


    
static
    
{
        String ls;

        
try
        
{ ls = System.getProperty("line.separator"" "); }
        
catch (Exception e)
        
{ ls = " "; }

        LINESEP 
= ls;

    }


    
public static C3P0Config extractXmlConfigFromDefaultResource() throws Exception
    
{
        InputStream is 
= null;

        
try
        
{
            is 
= C3P0ConfigUtils.class.getResourceAsStream(XML_CONFIG_RSRC_PATH);
            
if ( is == null )
            
{
                warnCommonXmlConfigResourceMisspellings();
                
return null;
            }

            
else
                
return extractXmlConfigFromInputStream( is );
        }

        
finally
        
{
            
try if (is != null) is.close(); }
            
catch (Exception e)
            
{
                
if ( logger.isLoggable( MLevel.FINE ) )
                    logger.log(MLevel.FINE,
"Exception on resource InputStream close.", e);
            }

        }

    }


    
public static C3P0Config extractXmlConfigFromInputStream(InputStream is) throws Exception
    
{
        DocumentBuilderFactory fact 
= DocumentBuilderFactory.newInstance();
        DocumentBuilder db 
= fact.newDocumentBuilder();
        Document doc 
= db.parse( is );

        
return extractConfigFromXmlDoc(doc);
    }


    
public static C3P0Config extractConfigFromXmlDoc(Document doc) throws Exception
    
{
        Element docElem 
= doc.getDocumentElement();
        
if (docElem.getTagName().equals("c3p0-config"))
        
{
            NamedScope defaults;
            HashMap configNamesToNamedScopes 
= new HashMap();

            Element defaultConfigElem 
= DomParseUtils.uniqueChild( docElem, "default-config" );
            
if (defaultConfigElem != null)
                defaults 
= extractNamedScopeFromLevel( defaultConfigElem );
            
else
                defaults 
= new NamedScope();
            NodeList nl 
= DomParseUtils.immediateChildElementsByTagName(docElem, "named-config");
            
for (int i = 0, len = nl.getLength(); i < len; ++i)
            
{
                Element namedConfigElem 
= (Element) nl.item(i);
                String configName 
= namedConfigElem.getAttribute("name");
                
if (configName != null && configName.length() > 0)
                
{
                    NamedScope namedConfig 
= extractNamedScopeFromLevel( namedConfigElem );
                    configNamesToNamedScopes.put( configName, namedConfig);
                }

                
else
                    logger.warning(
"Configuration XML contained named-config element without name attribute: " + namedConfigElem);
            }

            
return new C3P0Config( defaults, configNamesToNamedScopes );
        }

        
else
            
throw new Exception("Root element of c3p0 config xml should be 'c3p0-config', not '" + docElem.getTagName() + "'.");
    }


    
private static NamedScope extractNamedScopeFromLevel(Element elem)
    
{
        HashMap props 
= extractPropertiesFromLevel( elem );
        HashMap userNamesToOverrides 
= new HashMap();

        NodeList nl 
= DomParseUtils.immediateChildElementsByTagName(elem, "user-overrides");
        
for (int i = 0, len = nl.getLength(); i < len; ++i)
        
{
            Element perUserConfigElem 
= (Element) nl.item(i);
            String userName 
= perUserConfigElem.getAttribute("user");
            
if (userName != null && userName.length() > 0)
            
{
                HashMap userProps 
= extractPropertiesFromLevel( perUserConfigElem );
                userNamesToOverrides.put( userName, userProps );
            }

            
else
                logger.warning(
"Configuration XML contained user-overrides element without user attribute: " + LINESEP + perUserConfigElem);
        }


        
return new NamedScope(props, userNamesToOverrides);
    }


    
private static HashMap extractPropertiesFromLevel(Element elem)
    
{
        
// System.err.println( "extractPropertiesFromLevel()" );

        HashMap out 
= new HashMap();

        
try
        
{
            NodeList nl 
= DomParseUtils.immediateChildElementsByTagName(elem, "property");
            
int len = nl.getLength();
            
for (int i = 0; i < len; ++i)
            
{
                Element propertyElem 
= (Element) nl.item(i);
                String propName 
= propertyElem.getAttribute("name");
                
if (propName != null && propName.length() > 0)
                
{
                    String propVal 
= DomParseUtils.allTextFromElement(propertyElem, true);
                    out.put( propName, propVal );
                    
//System.err.println( propName + " -> " + propVal );
                }

                
else
                    logger.warning(
"Configuration XML contained property element without name attribute: " + LINESEP + propertyElem);
            }

        }

        
catch (Exception e)
        
{
            logger.log( MLevel.WARNING, 
                            
"An exception occurred while reading config XML. " +
                            
"Some configuration information has probably been ignored."
                            e );
        }


        
return out;
    }


    
private C3P0ConfigXmlUtils()
    
{}
}


 

 

/*
 * Distributed as part of c3p0 v.0.9.1.2
 *
 * Copyright (C) 2005 Machinery For Change, Inc.
 *
 * Author: Steve Waldman <[email protected]>
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 2.1, as 
 * published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this software; see the file LICENSE.  If not, write to the
 * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307, USA.
 
*/



package  com.mchange.v1.xml;

import  java.util. * ;
import  org.xml.sax. * ;
import  org.w3c.dom. * ;
import  com.mchange.v1.util.DebugUtils;

public   final   class  DomParseUtils
{
    
final static boolean DEBUG = true;

    
/**
     * 
@return null if child doesn't exist.
     
*/

    
public static String allTextFromUniqueChild(Element elem, String childTagName)
 
throws DOMException
    
return allTextFromUniqueChild( elem, childTagName, false ); }

    
/**
     * 
@return null if child doesn't exist.
     
*/

        
public static String allTextFromUniqueChild(Element elem, String childTagName, boolean trim)
 
throws DOMException
    
{
 Element uniqueChild 
= uniqueChildByTagName( elem, childTagName );
 
if (uniqueChild == null)
     
return null;
 
else
     
return DomParseUtils.allTextFromElement( uniqueChild, trim );
    }


    
public static Element uniqueChild(Element elem, String childTagName) throws DOMException
    
return uniqueChildByTagName( elem, childTagName); }

    
/**
     * 
@deprecated use uniqueChild(Element elem, String childTagName)
     
*/

    
public static Element uniqueChildByTagName(Element elem, String childTagName) throws DOMException
    
{
 NodeList nl 
= elem.getElementsByTagName(childTagName);
 
int len = nl.getLength();
 
if (DEBUG)
     DebugUtils.myAssert( len 
<= 1 ,
     
"There is more than one (" + len + ") child with tag name: " + 
     childTagName 
+ "!!!" );
 
return (len == 1 ? (Element) nl.item( 0 ) : null);
    }


    
public static String allText(Element elem) throws DOMException
    
return allTextFromElement( elem ); }

    
public static String allText(Element elem, boolean trim) throws DOMException
    
return allTextFromElement( elem, trim ); }

    
/** @deprecated use allText(Element elem) */
    
public static String allTextFromElement(Element elem) throws DOMException
    
return allTextFromElement( elem, false); }

    
/** @deprecated use allText(Element elem, boolean trim) */
    
public static String allTextFromElement(Element elem, boolean trim) throws DOMException
    
{
 StringBuffer textBuf 
= new StringBuffer();
 NodeList nl 
= elem.getChildNodes();
 
for (int j = 0, len = nl.getLength(); j < len; ++j)
     
{
  Node node 
= nl.item(j);
  
if (node instanceof Text) //includes Text and CDATA!
      textBuf.append(node.getNodeValue());
     }

 String out 
= textBuf.toString();
 
return ( trim ? out.trim() : out );
    }


    
public static String[] allTextFromImmediateChildElements( Element parent, String tagName ) 
 
throws DOMException
    
return allTextFromImmediateChildElements( parent, tagName, false ); }

    
public static String[] allTextFromImmediateChildElements( Element parent, String tagName, boolean trim ) 
 
throws DOMException
    
{
 NodeList nl 
= immediateChildElementsByTagName( parent, tagName );
 
int len = nl.getLength();
 String[] out 
= new String[ len ];
 
for (int i = 0; i < len; ++i)
     out[i] 
= allText( (Element) nl.item(i), trim );
 
return out;
    }



    
public static NodeList immediateChildElementsByTagName( Element parent, String tagName )
 
throws DOMException
    
return getImmediateChildElementsByTagName( parent, tagName ); }

    
/**
     * 
@deprecated use immediateChildrenByTagName( Element parent, String tagName )
     
*/

    
public static NodeList getImmediateChildElementsByTagName( Element parent, String tagName )
 
throws DOMException
    
{
 
final List nodes = new ArrayList();
 
for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling())
     
if (child instanceof Element && ((Element) child).getTagName().equals(tagName))
  nodes.add(child);
 
return new NodeList()
     
{
  
public int getLength()
  
return nodes.size(); }

  
public Node item( int i )
  
return (Node) nodes.get( i ); }
     }
;
    }


    
public static String allTextFromUniqueImmediateChild(Element elem, String childTagName)
 
throws DOMException
    
{
 Element uniqueChild 
= uniqueImmediateChildByTagName( elem, childTagName );
 
if (uniqueChild == null)
     
return null;
 
return DomParseUtils.allTextFromElement( uniqueChild );
    }


    
public static Element uniqueImmediateChild(Element elem, String childTagName) 
 
throws DOMException
    
return uniqueImmediateChildByTagName( elem, childTagName); }

    
/**
     * 
@deprecated use uniqueImmediateChild(Element elem, String childTagName) 
     
*/

    
public static Element uniqueImmediateChildByTagName(Element elem, String childTagName) 
 
throws DOMException
    
{
 NodeList nl 
= getImmediateChildElementsByTagName(elem, childTagName);
 
int len = nl.getLength();
 
if (DEBUG)
     DebugUtils.myAssert( len 
<= 1 ,
     
"There is more than one (" + len + ") child with tag name: " + 
     childTagName 
+ "!!!" );
 
return (len == 1 ? (Element) nl.item( 0 ) : null);
    }


    
/**
     * 
@deprecated use Element.getAttribute(String val)
     
*/

    
public static String attrValFromElement(Element element, String attrName)
 
throws DOMException
    
{
 Attr attr 
= element.getAttributeNode( attrName );
 
return (attr == null ? null : attr.getValue());
    }


    
private DomParseUtils()
    
{}
}



 

 

 

 

 

;