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]

Reply via email to