You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-user@db.apache.org by Thomas Neumann <t....@olympus-labautomation.com> on 2005/01/24 13:34:12 UTC
Re: Cannot connect a second time to an embedded Cloudscape/Derby
Thanks for link on the maven info.
I tried a workaround by not using the embedded version of derby for my
tests. So I started up a network server of derby that is running inside
JBoss and access it via the db2jcc drivers. So the build script worked
without a problem. It was able to connect twice to the network server.
Which is not supprising, since it is a standard scenario. But it showed
me that the build script is working fine.
Beside this I just fixed another incompatiblity between Windows and
Linux in another piece of software of us. The problem arised out of the
fact, that the interaction between locks and channels in the Java NIO
package is different on Windows than on Linux. On Linux the locks are
handled on a per OS process/JVM level. So that when I open a channel on
a file on Linux and lock this file, another channel in the *same* OS
process/JVM is still able to access the file. While under Windows the
second channel would receive an exception because this file is locked by
the first channel, even it is running in the *same* JVM.
I could guess that there is something similar inside derby. Since derby
is locking the db-file when the DBMS is started. So I could imagine that
when I access the derby db the second time a second channel is opened,
and there are still locks around of the first channel that is used
during the first time. Which results in a exception that is than
translated to the error "Failed to start database" on windows.And on
Linux it would work perfectly fine.
Well it's just a guess and I'm not familiar with the architecture of
derby to go through the source code to verify this possiblity.
Does anybody have experience with a similar scenario?
Thanks
Thomas
jta@bristowhill.com wrote:
>This doesn't address why you get the failure on Windows and not on
>Linux. But I searched for "maven" on the derby lists and found the
>instructions Jeremy posted in December on using derby from maven:
>
>http://mail-archives.apache.org/eyebrowse/ReadMsg?listName=derby-user@db.apache.org&msgId=2033145
>
>I wonder if eliminating one moving part from your scenario might help
>isolate the actual problem.
>
> -jean
>
>
>Thomas Neumann wrote:
>
>
>
>>Hello,
>>
>>since I had problems with our local mailer daemon to confirm my
>>subscription to the derby mailing list I do not know if this mail was
>>send to the other list members. So this actually the second trial to
>>send this mail. Sorry for any inconvenience if you have received this
>>mail twice.
>>
>>I have a problem with the embedded Cloudscape/Derby version on Windows
>>in my maven build script. This build script uses the maven hibernate
>>plug in to create the dbms. The connection URL for the db is
>>jdbc:derby:db/derby/dmstest;create=true
>>This works fine. Afterwards when the schema creation is finished in a
>>second step unit tests should run on this db using the same connection
>>URL. They fail with the following exception.
>>
>>Caused by: SQL Exception: Failed to start database 'db/derby/dmstest',
>>see the next exception for details.
>>at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java)
>>at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java)
>>at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Util.java)
>>at
>>org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(EmbedConnection.java)
>>
>>at
>>org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(EmbedConnection.java)
>>
>>at org.apache.derby.impl.jdbc.EmbedConnection.(EmbedConnection.java)
>>at org.apache.derby.impl.jdbc.EmbedConnection20.(EmbedConnection20.java)
>>at org.apache.derby.impl.jdbc.EmbedConnection30.(EmbedConnection30.java)
>>at org.apache.derby.jdbc.Driver30.getNewEmbedConnection(Driver30.java)
>>at org.apache.derby.jdbc.Driver169.connect(Driver169.java)
>>at org.apache.derby.jdbc.EmbeddedDriver.connect(EmbeddedDriver.java)
>>at
>>org.apache.tools.ant.taskdefs.JDBCTask.getConnection(JDBCTask.java:342)
>>
>>This is the same exception as if a second JVM is running with an
>>embedded Cloudscape/Derby instance in it already accessing the same
>>database. But I sware there is no second JVM running.
>>
>>Another curiosity on this, the same build script is running on a linux
>>box without any problems.
>>
>>I'm using windows xp pro, JDK 1.4.2-06 and Cloudscape/Derby 10 for this
>>scenario
>>
>>Can anybody give me a hint or knows a workaround for this problem?
>>
>>Thanks in advance
>>
>>
>>
>>
>
>
>