db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Van Couvering (JIRA)" <derby-...@db.apache.org>
Subject [jira] Commented: (DERBY-1130) Client should not allow databaseName to be set with setConnectionAttributes
Date Tue, 08 Aug 2006 18:30:14 GMT
    [ http://issues.apache.org/jira/browse/DERBY-1130?page=comments#action_12426671 ] 
David Van Couvering commented on DERBY-1130:

Hi, Deepa.  I apologize, I don't know how I missed your response on July 19th.  Almost a month
later I'm getting back to you.  That's embarassing.  Thank goodness for the 'patch available'

I am not sure how to reach closure on this.  What I am seeing is the following:

- If the databaseName property is not set, then we get an exception that makes sense - "Required
property databaseName not set"

- If the databaseName property is not set, but the database name is set through connection
attributes, we still get - "Required property databaseName not set."  Now if I were a naive
user this would be confusing - I set the databaseName property, why are you complaining? (Ignorant
that I am not allowed to set it via connection attributes.) A much more helpful messages would
be "You can not set the databaseName property through connection attributes.  Please set this
as a Derby DataSource property"

- If the databaseName property *is* set, everything works right

- If the databaseName property *is* set *and* the databaseName is specified through connection
attributes, this is again potentially confusing.  The user sees that they are connecting to
or creating database 'wombat' when they explicitly set the database name to 'kangaroo' (ignorant
perhaps that they are setting it to 'wombat' elsewhere in their code.  What is that about?
 And that is even harder to track down.  Here I think there is value in saying something like
"WARNING: property databaseName can not be set through connection attributes.  Using the databaseName
property 'wombat' that was set through the Derby DataSource."



> Client should not allow databaseName to be set with setConnectionAttributes
> ---------------------------------------------------------------------------
>                 Key: DERBY-1130
>                 URL: http://issues.apache.org/jira/browse/DERBY-1130
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Client
>    Affects Versions:,,,,,,,,,
>            Reporter: Kathey Marsden
>         Assigned To: Deepa Remesh
>             Fix For:
>         Attachments: d1130-client-v1.diff, d1130-client-v1.status, derby-1130-v1.diff,
> Per this thread,  setConnectionAttributes should not set databaseName. 
> http://www.nabble.com/double-check-on-checkDataSource-t1187602.html#a3128621
> Currently this is allowed for client but should be disabled.  I think it is OK to change
because we have documented that client will be changed to match embedded for implementation
defined behaviour.   Hopefully its use is rare as most folks would use the standard setDatabaseName.
 Still there should be a release not when the change is made and it would be better to change
it sooner than later:
> Below is the repro. 
> Here is the output with Client
> D>java DatabaseNameWithSetConnAttr
> ds.setConnectionAttributes(databaseName=wombat;create=true)
> ds.getDatabaseName() = null (should be null)
> FAIL: Should not have been able to set databaseName with connection attributes
> Also look for tests  disabled with this bug number in the test checkDataSource30.java
> import java.sql.*;
> import java.lang.reflect.Method;
> public class DatabaseNameWithSetConnAttr{
> 	public static void main(String[] args) {
> 		try {
> 			String attributes = "databaseName=wombat;create=true";
> 			org.apache.derby.jdbc.ClientDataSource ds = new
> 			org.apache.derby.jdbc.ClientDataSource();
> 			//org.apache.derby.jdbc.EmbeddedDataSource ds = new
> 			//org.apache.derby.jdbc.EmbeddedDataSource();
> 			System.out.println("ds.setConnectionAttributes(" + attributes + ")");
> 			ds.setConnectionAttributes(attributes);
> 			System.out.println("ds.getDatabaseName() = " +
> 							   ds.getDatabaseName() + " (should be null)" );
> 			Connection conn  = ds.getConnection();
> 			} catch (SQLException e) {
> 				String sqlState = e.getSQLState();
> 				if (sqlState != null && sqlState.equals("XJ041"))
> 				{
> 				System.out.println("PASS: An exception was thrown trying to get a connetion from
a datasource after setting databaseName with setConnectionAttributes");
> 				System.out.println("EXPECTED EXCEPTION: " + e.getSQLState() 
> 									   + " - " + e.getMessage());
> 				return;
> 				}
> 				while (e != null)
> 				{
> 					System.out.println("FAIL - UNEXPECTED EXCEPTION: " + e.getSQLState());
> 					e.printStackTrace();
> 					e = e.getNextException();
> 				}
> 				return;
> 			}
> 		System.out.println("FAIL: Should not have been able to set databaseName with connection
> 	}
> }

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira


View raw message