openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Jencks <>
Subject Possible problem with ddl with only a jta-datasource and sequences
Date Tue, 24 Apr 2007 17:52:40 GMT
Using derby, jta transactions (in geronimo), a table sequence,  
autocreation of tables, and only a jta-datasource, I get errors  
complaining that the sequence table doesn't exist.

Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: Table/ 
OPENJPASEQ WHERE ID = ? FOR UPDATE WITH RR} [code=20000, state=42X05]

If I supply a non-jta-datasource everything works fine.

My current theory about why this is happening is that the ddl to  
create all the tables is executed in a connection from the jta- 
datasource that's enrolled in a jta transaction.  Then we go to get  
an id from the sequence, the jta transaction is suspended, and a new  
tx is started, in which the ddl is not visible since the jta tx  
wasn't committed. (apparently ddl in derby is transactional)

Does this seem like a reasonable explanation?

I'm going to look for a way to run the ddl inside a separate  
transaction that can be committed, the same as how sequences work  
without a non-jta-datasource.  One way to do this would be to package  
the work up in a Runnable and execute it in an  appropriate  
transactional environment.  It might be easier to understand if the  
sequence code had a similar implementation.

david jencks

View raw message