db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rick Hillegas (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-4719) Define consistent Derby data source behavior
Date Mon, 28 Jun 2010 14:52:50 GMT

    [ https://issues.apache.org/jira/browse/DERBY-4719?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12883167#action_12883167
] 

Rick Hillegas commented on DERBY-4719:
--------------------------------------

Thanks for your detailed explanation of this bizarre and confusing behavior, Kristian. I'm
going to mouse in my initial comments from the email thread which triggered this JIRA. I can
imagine that this inconsistency is very frustrating to our users.

<mousedInComments>
Each of the options you are considering will create backward compatibility problems for some
applications. I believe that silent behavior changes are worse than noisy ones. I think that
we could talk ourselves into an incompatible behavior change if the javadoc explicitly says
that the behavior is undefined today.

However, I don't see much value in moving from one inconsistent behavior to another. If we
want to tackle this confusion, then I would recommend that we define the behavior explicitly
in the javadoc and make all of the DataSources conform to the defined behavior.
</mousedInComments>

I think that the following behavior would be easy for users to understand if it were consistent
across all Derby DataSources:

i) The connection attribute string should be parsed by all of the DataSources and its directives
should be followed.

ii) Derby should raise an exception (or at least a warning) if an attribute is set to an illegal
value.

iii) In the case where conflicting values are specified for an attribute (e.g., one value
is specified in the connection string and another value is specified in an explicit setter
method), then the most recent specification should prevail.

I think that (1a) would be incremental movement toward this set of rules.

Thanks,
-Rick

> Define consistent Derby data source behavior
> --------------------------------------------
>
>                 Key: DERBY-4719
>                 URL: https://issues.apache.org/jira/browse/DERBY-4719
>             Project: Derby
>          Issue Type: Task
>          Components: Documentation, Javadoc, JDBC, Network Client
>    Affects Versions: 10.7.0.0
>            Reporter: Kristian Waagan
>
> The behavior of the various data source implementations in Derby isn't consistent.
> As a starting point, from the thread [1] on derby-dev:
> -----
> Hi,
> I have been investigating how the various Derby data source implementations behave when
it comes to [bean] properties.
> Properties and attributes are used interchangeably, and I'll be using the following abbreviations:
>  o DS-[E|C] the "normal" data souce embedded/client
>  o CP-[E|C] ConnectionPoolDataSource embedded/client
>  o XA-[E|C] XADataSource embedded/client
> Here are some of the current issues:
>  1) CP-C and XA-C effectively ignore the connection attribute string for certain attributes
(those who have individual setters, DERBY-4067)
>  2) *-E don't update the internal property state based on the connection attribute string
(i.e. specifying ";user=myuser" won't change the return value of getUser() after connect).
>  3) Only some of the properties are updated from the connection attribute string. This
is as expected, but it is confusing that for instance 'traceDirectory' is updated and 'traceLevel'
isn't.
>  4) *-C has 'APP' as the default user, *-E has <null>.
>  5) Some property setters accept all values, others throw an exception if the value is
invalid.
> I don't think all these issues should be fixed, but I'd like to fix (1), as it has caused
some trouble in the past (i.e., user not understanding why the settings aren't taking effect).
> There are several possible fixes for (1):
>  1a) Make CP-C and XA-C process the connection attribute string to update the internal
state.
>  1b) Make DS-C ignore the connection attribute string (may break existing deployments).
>  1c) Throw exception if a property with a setter is specified in the connection attribute
string.
> I don't care that much about which solution is chosen, but I'd prefer that the various
data sources are consistent. For instance, it would be nice if a user could swap ClientDataSource
with ClientConnectionPoolDataSource without having to change the data source definition. For
instance, doing this today with "ssl=basic" in the connection attribute string would make
DS-C connect with SSL, but CP-C would connection without SSL.
> We have this wording in the JavaDoc for ClienBaseDataSource.setConnectionAttributes(String):
> "Set this property to pass in more Derby specific connection URL attributes.
> Any attributes that can be set using a property of this DataSource implementation (e.g
user, password) should not be set in connectionAttributes. Conflicting settings in connectionAttributes
and properties of the DataSource will lead to unexpected behaviour."
> Any opinions or questions on any of this?
> Regards, 
> -----
> [1] http://old.nabble.com/Derby-data-sources-to28692616.html#a28692616

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message