[ 
http://issues.apache.org/jira/browse/DERBY-1130?page=comments#action_12422273 ] 
            
Deepa Remesh commented on DERBY-1130:
-------------------------------------

Thanks David and Dan for looking at this issue.

As David suggests, I think it would be better to throw an exception if database 
name property is set in setConnectionAttributes method for a DataSource. I 
think this will make both these cases clearer:
1. We need to set the "databaseName" Java bean *property* for the DataSource 
object. We cannot expect that the databaseName property in connectionAttributes 
will get used.
2. If we have set "databaseName" Java bean *property* for the DataSource 
object, we cannot over-ride it using databaseName property in connection 
attributes.

As Dan suggests, use of "Derby DataSource property" in the message may help 
clarify the situation. However, I tend to think it could still be confusing why 
the databaseName property in connectionAttributes is not getting used. I plan 
to change setConnectionAttributes method in both embedded and client data 
sources to check that "databaseName" property cannot be set using this method. 
Please let me know if anyone thinks this is not okay.

David, I did not understand the following comment:
"
I also think it's problematic that we just ignore the connection attributes if 
the database name is null. Shouldn't we raise an exception at that point saying 
something like "you can't set connection attributes for this connection because 
the database name is not specified" ? 
"

Isn't the check for the databaseName property (which is a required property) 
enough for this? If this required property is not set, then we will not be able 
to use the DataSource and will be throwing an exception.

> 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: 10.1.1.0, 10.1.1.1, 10.1.1.2, 10.1.2.0, 10.1.2.1, 
> 10.1.2.2, 10.1.2.3, 10.2.0.0, 10.1.3.0, 10.1.2.4
>            Reporter: Kathey Marsden
>         Assigned To: Deepa Remesh
>         Attachments: 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 attributes");
>       }
> }

-- 
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

        

Reply via email to