Sto tentando di eseguire report jasper su un database live e di report, ma tutti i report eseguiti sul database live generano eccezioni per non trovare le tabelle giuste (sebbene sia stato trovato lo schema PUBLIC predefinito). Sembra che la connessione principale DataSource
non stia rispettando le impostazioni di connessione H2 che specificano IGNORECASE=true
, poiché le colonne e le tabelle generate sono in maiuscolo, perché le mie query non lo sono.Esecuzione di rapporti Jasper contro un'origine dati h2 in memoria?
DataSource.groovy dataSource:
dataSource {
hibernate {
cache.use_second_level_cache = false
cache.use_query_cache = false
}
dbCreate = "create-drop" // one of 'create', 'create-drop','update'
pooled = true
driverClassName = "org.h2.Driver"
username = "sa"
password = ""
url = "jdbc:h2:mem:testDb;MODE=PostgreSQL;IGNORECASE=TRUE;DATABASE_TO_UPPER=false"
jndiName = null
dialect = null
}
Datasources.groovy dataSource:
datasource(name: 'reporting') {
environments(['development', 'test'])
domainClasses([SomeClass])
readOnly(false)
driverClassName('org.h2.Driver')
url('jdbc:h2:mem:testReportingDb;MODE=PostgreSQL;IGNORECASE=TRUE;DATABASE_TO_UPPER=false')
username('sa')
password('')
dbCreate('create-drop')
logSql(false)
dialect(null)
pooled(true)
hibernate {
cache {
use_second_level_cache(false)
use_query_cache(false)
}
}
}
Cosa fallisce:
JasperPrint print = JasperFillManager.fillReport(compiledReport, params,dataSource.getConnection())
Durante il debug, l'unica differenza che ho' ho trovato è che l'origine dati dal vivo, quando iniettato o guardato con DatasourcesUtils.getDataSource(null)
, è un TransactionAwareDatasourceProxy
, e DatasourcesUtils.getDataSource('reporting')
è un BasicDataSource
Che cosa devo fare per Jasper di operare sul database attivo in memoria H2?
Questo errore non è riproducibile con un vero database postgres.
'autoServer = TRUE' non riesce ancora e l'avvio manuale dei database non è un'opzione. 'jdbc: h2: ~/testDb' fallisce, così come usare esplicitamente un riferimento al file, con tutte le combinazioni di modalità di blocco e ritardi di chiusura. Il secondo database in memoria * funziona * e la connessione può essere utilizzata sia dai report in esecuzione grails * che in * jasper. –
Quale versione di H2 usi? Con "fallisce" intendi che le tabelle non sono disponibili? Se ricevi un'eccezione, potresti postarla? –
Ho aggiornato la mia domanda. Il problema sembra essere che le tabelle e le colonne vengono capitalizzate in H2, il che dovrebbe essere corretto dato 'IGNORECASE = true', ma quando passo la connessione, le query con nomi di tabelle/colonne in minuscolo falliscono, solo con l'origine dati. Sto usando H2 1.3.159. –