db-derby-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From fed <fury...@gmail.com>
Subject Problem upgrading a derby database, ArrayIndexOutOfBoundsException on getIndexInfo()
Date Sat, 30 Jun 2012 21:24:51 GMT
Hi,

I posted time ago on this mailing list a similar question about an
upgrading problem but i never found a solution, now i think i have the
same problem with another derby database, i hope i can find a solution
this time.

I have a derby database 10.8.x and i use it with jdo/datanuclues.
I am trying to update it to 10.9 but after updating it the database
becomes unusable, it gives me an ArrayIndexOutOfBoundsException on
conn.getMetaData().getIndexInfo(... ).

I don't know very well what creates this error but i try to explain
some steps that i found that reproduce it.

1 - I acess the database with some client, for example Squirrel Sql (
squirrel sql uses the 10.9 driver version to access the db). It is not
need to execute any query or whatever just access the database and
close it.

2 - I update the database from 10.8 -> 10.9 using the upgrade = true
properties while connection to it and i close/shutdown the database.

3-  from datanucleus i have a tool that generate/update the schema of
the database, i run this tool and the operation fails.

>From derby.log logs i can see at the end of logs:

Sat Jun 30 22:41:55 CEST 2012
Thread[SwingWorker-pool-2-thread-2,5,main] (XID = 89554052),
(SESSIONID = 5), (DATABASE = db/rilevdata), (DRDAID = null), Executing
prepared statement: EXECUTE STATEMENT SYS."getTables" :End prepared
statement with 7 parameters begin parameter #1: % :end parameter begin
parameter #2: % :end parameter begin parameter #3:
FASCEMONTEORENEW_LISTA :end parameter begin parameter #4: T :end
parameter begin parameter #5: V :end parameter begin parameter #6: A
:end parameter begin parameter #7: S :end parameter
Sat Jun 30 22:41:55 CEST 2012
Thread[SwingWorker-pool-2-thread-2,5,main] (XID = 89554052),
(SESSIONID = 5), (DATABASE = db/rilevdata), (DRDAID = null), Begin
compiling prepared statement: EXECUTE STATEMENT SYS."getIndexInfo"
:End prepared statement
Sat Jun 30 22:41:55 CEST 2012
Thread[SwingWorker-pool-2-thread-2,5,main] (XID = 89554052),
(SESSIONID = 5), (DATABASE = db/rilevdata), (DRDAID = null), End
compiling prepared statement: EXECUTE STATEMENT SYS."getIndexInfo"
:End prepared statement
Sat Jun 30 22:41:55 CEST 2012
Thread[SwingWorker-pool-2-thread-2,5,main] (XID = 89554052),
(SESSIONID = 5), (DATABASE = db/rilevdata), (DRDAID = null), Cleanup
action starting
Sat Jun 30 22:41:55 CEST 2012
Thread[SwingWorker-pool-2-thread-2,5,main] (XID = 89554052),
(SESSIONID = 5), (DATABASE = db/rilevdata), (DRDAID = null), Failed
Statement is: null
java.lang.ArrayIndexOutOfBoundsException: 4
	at org.apache.derby.impl.sql.GenericParameterValueSet.initialize(Unknown
Source)
	at org.apache.derby.impl.sql.execute.BaseActivation.setupActivation(Unknown
Source)
	at org.apache.derby.impl.sql.GenericActivationHolder.<init>(Unknown Source)
	at org.apache.derby.impl.sql.GenericPreparedStatement.getActivation(Unknown
Source)
	at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.<init>(Unknown Source)
	at org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedConnection.prepareMetaDataStatement(Unknown
Source)
	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.prepareSPS(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQueryUsingSystemTables(Unknown
Source)
	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(Unknown
Source)
	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(Unknown
Source)
	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.doGetIndexInfo(Unknown
Source)
	at org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getIndexInfo(Unknown
Source)
	at org.apache.commons.dbcp.DelegatingDatabaseMetaData.getIndexInfo(DelegatingDatabaseMetaData.java:327)
	at org.datanucleus.store.rdbms.schema.RDBMSSchemaHandler.getRDBMSTableIndexInfoForTable(RDBMSSchemaHandler.java:616)
	at org.datanucleus.store.rdbms.schema.RDBMSSchemaHandler.getRDBMSTableIndexInfoForTable(RDBMSSchemaHandler.java:585)
	at org.datanucleus.store.rdbms.schema.RDBMSSchemaHandler.getSchemaData(RDBMSSchemaHandler.java:202)
	at org.datanucleus.store.rdbms.table.TableImpl.getExistingCandidateKeys(TableImpl.java:1097)
	at org.datanucleus.store.rdbms.table.TableImpl.validateCandidateKeys(TableImpl.java:696)
	at org.datanucleus.store.rdbms.table.TableImpl.validateConstraints(TableImpl.java:398)
	at org.datanucleus.store.rdbms.table.ClassTable.validateConstraints(ClassTable.java:3234)
	at org.datanucleus.store.rdbms.RDBMSManager$ClassAdder.performTablesValidation(RDBMSManager.java:2827)
	at org.datanucleus.store.rdbms.RDBMSManager$ClassAdder.addClassTablesAndValidate(RDBMSManager.java:2557)
	at org.datanucleus.store.rdbms.RDBMSManager$ClassAdder.run(RDBMSManager.java:2203)
	at org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:113)
	at org.datanucleus.store.rdbms.RDBMSManager.addClasses(RDBMSManager.java:987)
	at org.datanucleus.store.rdbms.SchemaTool.createSchema(SchemaTool.java:699)
	at presenze.gestione_update.GeneraSchemaUpdate.genera(GeneraSchemaUpdate.java:225)
	at presenze.gui.gestione_update.JFrameGestioneUpdate.updateSchema(JFrameGestioneUpdate.java:308)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.javabuilders.swing.handler.event.background.SwingBackgroundProcessingHandler$1.doInBackground(SwingBackgroundProcessingHandler.java:64)
	at javax.swing.SwingWorker$1.call(Unknown Source)
	at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at javax.swing.SwingWorker.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)


and from now the database is unusable.


As test, with the database in this state if i run the code above i get
the same exception.

		try {
			Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
			Connection conn =
DriverManager.getConnection("jdbc:derby:db\\rilevdata", "sa", "sa");

			conn.getMetaData().getIndexInfo(null, "sa", "FASCEMONTEORENEW_LISTA
", false, false);
			
			conn.close();
		} catch (SQLException se) {
			
			log.error("exception", se);
			
			while (se != null) {
				System.out.println("SQLState=" + se.getSQLState() + se.getMessage());
				se.printStackTrace();
				se = se.getNextException();
			}
			

		}
	}


I have to say an import note: this happen only if in the first step i
access the db before upgrading it, and before running the tool from
datanucleus that update my schema,

If i skip the step 1 i can updgrade the db, update the schema and i
don't get the exception and the test code runs well.

But, to be clear,  these was just some steps that i found that cause
the problem;  the problem can happen in other different situations but
i was not able to find other steps to reproduce it.

Thanks for the help.

Regards

Mime
View raw message