Author: dain Date: Mon Jul 23 12:48:39 2007 New Revision: 558845 URL: http://svn.apache.org/viewvc?view=rev&rev=558845 Log: DBCP-150 added setter for connectionProperties in BasicDataSource
Modified: jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/BasicDataSource.java jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestBasicDataSource.java Modified: jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/BasicDataSource.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/BasicDataSource.java?view=diff&rev=558845&r1=558844&r2=558845 ============================================================================== --- jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/BasicDataSource.java (original) +++ jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/BasicDataSource.java Mon Jul 23 12:48:39 2007 @@ -1093,6 +1093,40 @@ } /** + * Sets the connection properties passed to driver.connect(...). + * + * Format of the string must be [propertyName=property;]* + * + * NOTE - The "user" and "password" properties will be added + * explicitly, so they do not need to be included here. + * + * @param connectionProperties the connection properties used to + * create new connections + */ + public void setConnectionProperties(String connectionProperties) { + if (connectionProperties == null) throw new NullPointerException("connectionProperties is null"); + + String[] entries = connectionProperties.split(";"); + Properties properties = new Properties(); + for (int i = 0; i < entries.length; i++) { + String entry = entries[i]; + if (entry.length() > 0) { + int index = entry.indexOf('='); + if (index > 0) { + String name = entry.substring(0, index); + String value = entry.substring(index + 1); + properties.setProperty(name, value); + } else { + // no value is empty string which is how java.util.Properties works + properties.setProperty(entry, ""); + } + } + } + this.connectionProperties = properties; + this.restartNeeded = true; + } + + /** * Close and release all connections that are currently stored in the * connection pool associated with our data source. * Modified: jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestBasicDataSource.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestBasicDataSource.java?view=diff&rev=558845&r1=558844&r2=558845 ============================================================================== --- jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestBasicDataSource.java (original) +++ jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestBasicDataSource.java Mon Jul 23 12:48:39 2007 @@ -67,6 +67,57 @@ ds.close(); ds = null; } + + public void testSetProperties() throws Exception { + // normal + ds.setConnectionProperties("name1=value1;name2=value2;name3=value3"); + assertEquals(3, ds.connectionProperties.size()); + assertEquals("value1", ds.connectionProperties.getProperty("name1")); + assertEquals("value2", ds.connectionProperties.getProperty("name2")); + assertEquals("value3", ds.connectionProperties.getProperty("name3")); + + // make sure all properties are replaced + ds.setConnectionProperties("name1=value1;name2=value2"); + assertEquals(2, ds.connectionProperties.size()); + assertEquals("value1", ds.connectionProperties.getProperty("name1")); + assertEquals("value2", ds.connectionProperties.getProperty("name2")); + assertFalse(ds.connectionProperties.containsKey("name3")); + + // no value is empty string + ds.setConnectionProperties("name1=value1;name2"); + assertEquals(2, ds.connectionProperties.size()); + assertEquals("value1", ds.connectionProperties.getProperty("name1")); + assertEquals("", ds.connectionProperties.getProperty("name2")); + + // no value (with equals) is empty string + ds.setConnectionProperties("name1=value1;name2="); + assertEquals(2, ds.connectionProperties.size()); + assertEquals("value1", ds.connectionProperties.getProperty("name1")); + assertEquals("", ds.connectionProperties.getProperty("name2")); + + // single value + ds.setConnectionProperties("name1=value1"); + assertEquals(1, ds.connectionProperties.size()); + assertEquals("value1", ds.connectionProperties.getProperty("name1")); + + // single value with trailing ; + ds.setConnectionProperties("name1=value1;"); + assertEquals(1, ds.connectionProperties.size()); + assertEquals("value1", ds.connectionProperties.getProperty("name1")); + + // single value wit no value + ds.setConnectionProperties("name1"); + assertEquals(1, ds.connectionProperties.size()); + assertEquals("", ds.connectionProperties.getProperty("name1")); + + // null should throw a NullPointerException + try { + ds.setConnectionProperties(null); + fail("Expected NullPointerException"); + } catch (NullPointerException e) { + // expected + } + } public void testTransactionIsolationBehavior() throws Exception { Connection conn = getConnection(); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]