You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by km...@apache.org on 2011/03/16 02:04:07 UTC

svn commit: r1082021 - in /db/derby/code/branches/10.6: ./ java/engine/org/apache/derby/jdbc/ java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/ java/testing/org/apache/derbyTesting/junit/

Author: kmarsden
Date: Wed Mar 16 01:04:07 2011
New Revision: 1082021

URL: http://svn.apache.org/viewvc?rev=1082021&view=rev
Log:
	DERBY-4907 EmbeddedXADataSource with ;create=true attribute set in setDatabaseName fails with java.sql.SQLException: Database not available

Patch contributed by Siddharth Srivastava <ak...@gmail.com> and Dave Brosius <db...@apache.org> . 

merge revision 1078461 from trunk


Modified:
    db/derby/code/branches/10.6/   (props changed)
    db/derby/code/branches/10.6/java/engine/org/apache/derby/jdbc/EmbeddedXADataSource.java
    db/derby/code/branches/10.6/java/engine/org/apache/derby/jdbc/ReferenceableDataSource.java
    db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/J2EEDataSourceTest.java
    db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/junit/JDBCDataSource.java

Propchange: db/derby/code/branches/10.6/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Mar 16 01:04:07 2011
@@ -1,2 +1,2 @@
-/db/derby/code/trunk:938547,938796,938959,939231,940462,940469,941627,942031,942286,942476,942480,942587,944152,946794,948045,948069,951346,951366,952138,952237,952581,954344,954421,954544,954748,955001,955540,955634,956075,956234,956445,956569,956659,957260,957902,958163,958257,958264,958508,958522,958555,958618,958939,959550,961892,962716,963206,963705,964039,964115,964402,965647,966393,967201,967304,980089,980684,986689,986834,987539,989099,990292,997325,998170,999119,999479,999485,1002291,1002682,1002853,1021426,1024511,1024528,1025615,1025795,1028716,1030043,1033485,1033864,1038514,1040658,1053724,1055169,1062096,1063809,1065061,1067250
+/db/derby/code/trunk:938547,938796,938959,939231,940462,940469,941627,942031,942286,942476,942480,942587,944152,946794,948045,948069,951346,951366,952138,952237,952581,954344,954421,954544,954748,955001,955540,955634,956075,956234,956445,956569,956659,957260,957902,958163,958257,958264,958508,958522,958555,958618,958939,959550,961892,962716,963206,963705,964039,964115,964402,965647,966393,967201,967304,980089,980684,986689,986834,987539,989099,990292,997325,998170,999119,999479,999485,1002291,1002682,1002853,1021426,1024511,1024528,1025615,1025795,1028716,1030043,1033485,1033864,1038514,1040658,1053724,1055169,1062096,1063809,1065061,1067250,1078461
 /db/derby/docs/trunk:954344

Modified: db/derby/code/branches/10.6/java/engine/org/apache/derby/jdbc/EmbeddedXADataSource.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.6/java/engine/org/apache/derby/jdbc/EmbeddedXADataSource.java?rev=1082021&r1=1082020&r2=1082021&view=diff
==============================================================================
--- db/derby/code/branches/10.6/java/engine/org/apache/derby/jdbc/EmbeddedXADataSource.java (original)
+++ db/derby/code/branches/10.6/java/engine/org/apache/derby/jdbc/EmbeddedXADataSource.java Wed Mar 16 01:04:07 2011
@@ -137,8 +137,11 @@ public class EmbeddedXADataSource extend
 			{
 				// If it is inactive, it is useless.
 				ra = null;
-
-				String dbName = getDatabaseName();
+				
+				// DERBY-4907 make sure the database name sent to find service
+				// does not include attributes.
+				String dbName = getShortDatabaseName();
+				
 				if (dbName != null) {
 
 					// see if database already booted, if it is, then don't make a

Modified: db/derby/code/branches/10.6/java/engine/org/apache/derby/jdbc/ReferenceableDataSource.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.6/java/engine/org/apache/derby/jdbc/ReferenceableDataSource.java?rev=1082021&r1=1082020&r2=1082021&view=diff
==============================================================================
--- db/derby/code/branches/10.6/java/engine/org/apache/derby/jdbc/ReferenceableDataSource.java (original)
+++ db/derby/code/branches/10.6/java/engine/org/apache/derby/jdbc/ReferenceableDataSource.java Wed Mar 16 01:04:07 2011
@@ -79,6 +79,9 @@ public class ReferenceableDataSource imp
 	private String description;
 	private String dataSourceName;
 	private String databaseName;
+	/** shortDatabaseName has attributes of databaseName stripped */
+	private String shortDatabaseName;	
+
 	private String password;
 	private String user;
 	private int loginTimeout;
@@ -109,11 +112,25 @@ public class ReferenceableDataSource imp
 	*/
 	public final synchronized void setDatabaseName(String databaseName) {
 		this.databaseName = databaseName;
+		if( databaseName!= null && (databaseName.indexOf(";") >= 0)){
+			String[] dbShort = databaseName.split(";");
+			this.shortDatabaseName = dbShort[0];
+		}
+		else {
+			this.shortDatabaseName = databaseName;
+		}
 		update();
 	}
 	public String getDatabaseName() {
 		return databaseName;
 	}
+	
+	/**
+	 * @return databaseName with attributes stripped.
+	 */
+	protected String getShortDatabaseName() {
+		return shortDatabaseName;
+	}
 
 	/** 
 		Set the data source name.  The property is not mandatory.  It is used

Modified: db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/J2EEDataSourceTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/J2EEDataSourceTest.java?rev=1082021&r1=1082020&r2=1082021&view=diff
==============================================================================
--- db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/J2EEDataSourceTest.java (original)
+++ db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/J2EEDataSourceTest.java Wed Mar 16 01:04:07 2011
@@ -821,6 +821,67 @@ public class J2EEDataSourceTest extends 
     }
 
     /**
+     * Test that a connection to XADataSource can be established
+     * successfully while creating a database using setDatabaseName()
+     * with create=true
+     *  
+     * @throws SQLException
+     * @throws XAException
+     */
+    public void testCreateInDatabaseName_XA() throws SQLException, XAException
+    {
+    	//test with XADataSource
+    	XADataSource xads = J2EEDataSource.getXADataSource();
+    	String dbName = TestConfiguration.getCurrent().getDefaultDatabaseName();    	
+    	J2EEDataSource.setBeanProperty(xads,"databaseName",dbName +";create=true");       
+    	XAConnection xa = xads.getXAConnection();
+    	Connection c = xa.getConnection();  
+    	c.setAutoCommit(false); 
+    	c.close();
+    }
+    
+    /**
+     * Test that a connection to PoolDataSource can be established
+     * successfully while creating a database using setDatabaseName()
+     * with create=true
+     * 
+     * @throws SQLException
+     */
+    
+    public void testCreateInDatabaseName_Pooled() throws SQLException
+    {
+    	//test with PooledConnection
+    	ConnectionPoolDataSource cpds = J2EEDataSource.getConnectionPoolDataSource();
+    	PooledConnection pc = cpds.getPooledConnection();
+    	String dbName = TestConfiguration.getCurrent().getDefaultDatabaseName();
+    	J2EEDataSource.setBeanProperty(cpds, "databaseName",dbName +";create=true");
+    	Connection c;
+    	c = pc.getConnection();
+    	c.setAutoCommit(false);
+    	c.close();
+    	pc.close();
+    }
+    
+    /**
+     * Test that a connection to JDBCDataSource can be established
+     * successfully while creating a database using setDatabaseName()
+     * with create=true
+     * 
+     * @throws SQLException
+     */
+    
+    public void testCreateInDatabaseName_DS() throws SQLException
+    {
+    	DataSource ds = JDBCDataSource.getDataSource();
+    	String dbName = TestConfiguration.getCurrent().getDefaultDatabaseName();
+    	JDBCDataSource.setBeanProperty(ds, "databaseName", dbName +";create=true");
+        Connection c = ds.getConnection();
+        c.setAutoCommit(false);
+        c.close();
+    }
+        
+    
+    /**
      * Test that a PooledConnection can be reused and closed
      * (separately) during the close event raised by the
      * closing of its logical connection.

Modified: db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/junit/JDBCDataSource.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/junit/JDBCDataSource.java?rev=1082021&r1=1082020&r2=1082021&view=diff
==============================================================================
--- db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/junit/JDBCDataSource.java (original)
+++ db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/junit/JDBCDataSource.java Wed Mar 16 01:04:07 2011
@@ -131,7 +131,7 @@ public class JDBCDataSource {
     }
     
     /**
-     * Return a DataSource object of the passsed in type
+     * Return a DataSource object of the passed in type
      * configured with the passed in Java bean properties.
      * This will actually work with any object that has Java bean
      * setter methods.
@@ -227,7 +227,7 @@ public class JDBCDataSource {
     
     /**
      * Clear a String Java bean property by setting it to null.
-     * @param ds ds DataSource to have property cleared
+     * @param ds DataSource to have property cleared
      * @param property name of property.
      */
     public static void clearStringBeanProperty(Object ds, String property)