Estoy tratando de ejecutar informes de jaspe contra una base de datos en vivo y de informes, pero los informes ejecutados contra la base de datos en vivo arrojan excepciones sobre no encontrar las tablas correctas (aunque se encuentra el esquema público predeterminado). Parece que la conexión principal DataSource
no respeta las configuraciones de conexión H2 que especifican IGNORECASE=true
, ya que las columnas y tablas generadas están en mayúscula, por lo que mis consultas no lo hacen.¿Está ejecutando los informes de Jasper en un origen de datos h2 en 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)
}
}
}
lo que falla:
JasperPrint print = JasperFillManager.fillReport(compiledReport, params,dataSource.getConnection())
Durante la depuración, la única diferencia que' ve encontrado es que el origen de datos en vivo, cuando se inyecta o se mire con DatasourcesUtils.getDataSource(null)
, es un TransactionAwareDatasourceProxy
, y es un DatasourcesUtils.getDataSource('reporting')
BasicDataSource
¿Qué necesito hacer para Jasper para operar en la base de datos de H2 en memoria activa?
Este error no es reproducible en una base de datos real de postgres.
'autoServer = TRUE' aún falla, y el inicio manual de databsases no es una opción. 'jdbc: h2: ~/testDb' falla, al igual que el uso de una referencia de archivo explícitamente, con todas las combinaciones de modos de bloqueo y demoras de cierre. La segunda base de datos en memoria * funciona *, y la conexión puede ser utilizada tanto por la aplicación running grails * como por * jasper reports. –
¿Qué versión de H2 usas? ¿Con 'fallas' te refieres a que las tablas no están disponibles? Si obtiene una excepción, ¿podría publicarla? –
He actualizado mi pregunta. El problema parece ser que las tablas y columnas se escriben en mayúsculas dentro de H2, lo cual debería estar bien dado 'IGNORECASE = true', pero cuando paso la conexión, las consultas con nombres de tabla/columna en minúsculas fallan, solo con el origen de datos. Estoy usando H2 1.3.159. –