db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-4172) You can open a read-write connection to a database which was originally opened by another thread using the classpath subprotocol
Date Fri, 24 Apr 2009 13:37:32 GMT

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

Knut Anders Hatlen commented on DERBY-4172:
-------------------------------------------

I think you can see a similar issue with the jar protocol:

  jdbc:derby:jar:(mydb.jar)wombat
  jdbc:derby:jar:(/export/home/mydb.jar)wombat

To avoid a special rule for the directory subprotocol, perhaps we could say: A logical database
name consists of the subprotocol plus a canonical database path determined by the subprotocol's
persistent service.

The described behaviour sounds fine to me. Basically, what you suggest we disallow is the
following (assuming /path/to is in the classpath):

connect 'jdbc:derby:directory:/path/to/wombat'; -> OK
connect 'jdbc:derby:classpath:wombat'; -> ERROR: The database '/path/to/wombat' is already
opened using another protocol

This would currently work, but the second (read-only) connection could see strange behaviour
if the first connection makes any changes to the database, so I think disallowing it is fine.

> You can open a read-write connection to a database which was originally opened by another
thread using the classpath subprotocol
> --------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-4172
>                 URL: https://issues.apache.org/jira/browse/DERBY-4172
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.6.0.0
>            Reporter: Rick Hillegas
>
> The original connection, using the classpath subprotocol, was supposed to open the DATABASE
(not the connection) as read-only, according to the Developer's Guide section titled "Database
connection examples". However, I am able to write to this database in another connection which
opens the database using the default, file-based protocol.
> At a minimum, the documentation is wrong. But the documentation may be trying to impose
a consistent, easily described model on the behavior of our subprotocols. It may be that the
behavior of our subprotocols cannot be described by a simple set of rules that users can grasp
easily.
> To show this problem, I created a database and then moved it into a directory on my classpath
(in this case, trunk/classes). Here is a script which shows this behavior:
> connect 'jdbc:derby:classpath:derby10.6' as conn1;
> -- fails because a database which is opened on the classpath is supposed to be marked
as read-only
> insert into t( a ) values 1;
> connect 'jdbc:derby:trunk/classes/derby10.6' as conn2;
> -- this succeeds even though the database is supposed to be read-only
> -- according to the Developer's Guide section "Database connection examples"
> insert into t( a ) values 2;
> select * from t;
> delete from t;

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