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

Reply via email to