db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Deepa Remesh (JIRA)" <derby-...@db.apache.org>
Subject [jira] Updated: (DERBY-1130) Client should not allow databaseName to be set with setConnectionAttributes
Date Fri, 11 Aug 2006 16:37:15 GMT
     [ http://issues.apache.org/jira/browse/DERBY-1130?page=all ]

Deepa Remesh updated DERBY-1130:

    Attachment: d1130-test-dataSourceReference.diff

Thanks Sunitha, Kathey and David for looking at the patch. 

I noticed this patch is causing a failure in jdbcapi/dataSourceReference.java. Sorry about
that. I had only run derbynetclientmats before submitting the patch as this was a client-only
change. But found that client data sources are also tested in jdbcapi/dataSourceReference.java
which is run only in embedded framework. I am attaching a patch 'd1130-test-dataSourceReference.diff'
which modifies dataSourceReference test to resolve this failure. The failure was because we
now check the connection attributes in the call to setConnectionAttributes itself. Before
the patch, this check was deferred to getConnection method. The patch only modifies this test
and I checked that the test passes with it. Please take a look and commit if okay.

For David's suggestion, "if the databaseName property is null in the DataSource and databaseName
is set in connectionAttributes, to raise the exception "databaseName attribute cannot be set
using the DataSource method setConnectionAttributes" rather than "required property databaseName
not set." -- e.g. to give the former exception precedence."

If I understand correctly, this is already being handled as David suggests. This is tested
in jdbcapi/checkDataSource.java in '"testClientDSConnectionAttributes" method.

Kathey, I will post a release note for this. 

> 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, d1130-test-dataSourceReference.diff,
d1130-test-dataSourceReference.status, derby-1130-v1.diff, derby-1130-v1.status
> 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