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 Florian Brunner <fb...@gmx.ch> on 2007/08/20 16:09:37 UTC

Exceptions with multiple connections

Hi,

I'm testing various JDBC drivers. My unit tests (see 
AbstractSqlTest.java) work with the SQLite db and the SQLite JDBC driver 
from http://www.ch-werner.de/javasqlite/ (see JDBCDriverTest.java).

With Derby there seems to be a problem when a second statement tries to 
read its result set while a first statement did not commit/ rollback yet.

Using the Derby network server and the ClientDriver (see 
ClientDriverTest.java) I get the following exceptions:
---------------------------------------------------------------------------------------------
Testsuite: org.apache.derby.jdbc.ClientDriverTest
Tests run: 2, Failures: 0, Errors: 2, Time elapsed: 131.199 sec

Testcase: 
testUpdateSelectCommitSelect(org.apache.derby.jdbc.ClientDriverTest):   
 Caused an ERROR
DERBY SQL error: SQLCODE: -1, SQLSTATE: 40XL1, SQLERRMC: 40XL1
org.apache.derby.client.am.SqlException: DERBY SQL error: SQLCODE: -1, 
SQLSTATE: 40XL1, SQLERRMC: 40XL1
        at org.apache.derby.client.am.ResultSet.completeSqlca(Unknown 
Source)
        at 
org.apache.derby.client.net.NetResultSetReply.parseFetchError(Unknown 
Source)
        at 
org.apache.derby.client.net.NetResultSetReply.parseCNTQRYreply(Unknown 
Source)
        at 
org.apache.derby.client.net.NetResultSetReply.readFetch(Unknown Source)
        at org.apache.derby.client.net.ResultSetReply.readFetch(Unknown 
Source)
        at org.apache.derby.client.net.NetResultSet.readFetch_(Unknown 
Source)
        at org.apache.derby.client.am.ResultSet.flowFetch(Unknown Source)
        at org.apache.derby.client.net.NetCursor.getMoreData_(Unknown 
Source)
        at org.apache.derby.client.am.Cursor.next(Unknown Source)
        at org.apache.derby.client.am.ResultSet.nextX(Unknown Source)
        at org.apache.derby.client.am.ResultSet.next(Unknown Source)
        at common.AbstractSqlTest.assertAllFromTbl1(AbstractSqlTest.java:82)
        at 
common.AbstractSqlTest.testUpdateSelectCommitSelect(AbstractSqlTest.java:94)


Testcase: 
testUpdateSelectRollbackSelect(org.apache.derby.jdbc.ClientDriverTest):   
 Caused an ERROR
DERBY SQL error: SQLCODE: -1, SQLSTATE: 40XL1, SQLERRMC: 40XL1
org.apache.derby.client.am.SqlException: DERBY SQL error: SQLCODE: -1, 
SQLSTATE: 40XL1, SQLERRMC: 40XL1
        at org.apache.derby.client.am.ResultSet.completeSqlca(Unknown 
Source)
        at 
org.apache.derby.client.net.NetResultSetReply.parseFetchError(Unknown 
Source)
        at 
org.apache.derby.client.net.NetResultSetReply.parseCNTQRYreply(Unknown 
Source)
        at 
org.apache.derby.client.net.NetResultSetReply.readFetch(Unknown Source)
        at org.apache.derby.client.net.ResultSetReply.readFetch(Unknown 
Source)
        at org.apache.derby.client.net.NetResultSet.readFetch_(Unknown 
Source)
        at org.apache.derby.client.am.ResultSet.flowFetch(Unknown Source)
        at org.apache.derby.client.net.NetCursor.getMoreData_(Unknown 
Source)
        at org.apache.derby.client.am.Cursor.next(Unknown Source)
        at org.apache.derby.client.am.ResultSet.nextX(Unknown Source)
        at org.apache.derby.client.am.ResultSet.next(Unknown Source)
        at common.AbstractSqlTest.assertAllFromTbl1(AbstractSqlTest.java:82)
        at 
common.AbstractSqlTest.testUpdateSelectRollbackSelect(AbstractSqlTest.java:103)
---------------------------------------------------------------------------------------------

I also tried to set timeSlice to 2000, but it didn't help.

Using the embedded Derby db and the EmbeddedDriver (see 
EmbeddedDriverTest.java) I get the following exceptions:

---------------------------------------------------------------------------------------------
There were 2 errors:
1) 
testUpdateSelectCommitSelect(org.apache.derby.jdbc.EmbeddedDriverTest)ERROR 
40XL1: A lock could not be obtained within the time requested
        at 
org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
        at 
org.apache.derby.impl.services.locks.LockSet.lockObject(Unknown Source)
        at 
org.apache.derby.impl.services.locks.SinglePool.zeroDurationlockObject(Unknown 
Source)
        at 
org.apache.derby.impl.store.raw.xact.RowLocking2nohold.lockRecordForRead(Unknown 
Source)
        at 
org.apache.derby.impl.store.access.conglomerate.OpenConglomerate.lockPositionForRead(Unknown 
Source)
        at 
org.apache.derby.impl.store.access.conglomerate.GenericScanController.fetchRows(Unknown 
Source)
        at 
org.apache.derby.impl.store.access.heap.HeapScan.fetchNextGroup(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.BulkTableScanResultSet.reloadArray(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.BulkTableScanResultSet.getNextRowCore(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(Unknown 
Source)
        at 
org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedResultSet.next(Unknown Source)
        at common.AbstractSqlTest.assertAllFromTbl1(AbstractSqlTest.java:82)
        at 
common.AbstractSqlTest.testUpdateSelectCommitSelect(AbstractSqlTest.java:94)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
2) 
testUpdateSelectRollbackSelect(org.apache.derby.jdbc.EmbeddedDriverTest)ERROR 
40XL1: A lock could not be obtained within the time requested
        at 
org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
        at 
org.apache.derby.impl.services.locks.LockSet.lockObject(Unknown Source)
        at 
org.apache.derby.impl.services.locks.SinglePool.zeroDurationlockObject(Unknown 
Source)
        at 
org.apache.derby.impl.store.raw.xact.RowLocking2nohold.lockRecordForRead(Unknown 
Source)
        at 
org.apache.derby.impl.store.access.conglomerate.OpenConglomerate.lockPositionForRead(Unknown 
Source)
        at 
org.apache.derby.impl.store.access.conglomerate.GenericScanController.fetchRows(Unknown 
Source)
        at 
org.apache.derby.impl.store.access.heap.HeapScan.fetchNextGroup(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.BulkTableScanResultSet.reloadArray(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.BulkTableScanResultSet.getNextRowCore(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(Unknown 
Source)
        at 
org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedResultSet.next(Unknown Source)
        at common.AbstractSqlTest.assertAllFromTbl1(AbstractSqlTest.java:82)
        at 
common.AbstractSqlTest.testUpdateSelectRollbackSelect(AbstractSqlTest.java:103)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

FAILURES!!!
Tests run: 2,  Failures: 0,  Errors: 2
---------------------------------------------------------------------------------------------

Can somebody help me to get it work?

Thanks!

-Florian

Re: Exceptions with multiple connections

Posted by Bryan Pendleton <bp...@amberpoint.com>.
> Can somebody help me to get it work?

Perhaps you are using a different transaction isolation level with
Derby than you are with the other databases you're testing, causing
you to experience lock contention in Derby but not in other databases.

http://db.apache.org/derby/docs/dev/devguide/cdevconcepts15366.html

You could try setting your program up so that it explicitly specifies
the isolation level, to avoid different results on different databases
which may have differing default isolation levels.

thanks,

bryan