gvSIG bugs #4541
Errores accediendo a tablas de SpatiaLite.
Status: | Closed | % Done: | 0% | |
---|---|---|---|---|
Priority: | Normal | Spent time: | - | |
Assignee: | Joaquín del Cerro Murciano | |||
Category: | Database | |||
Target version: | 2.4.0-2829 (rev. org.gvsig.desktop-2.0.195) | |||
Severity: | Minor | Add-on version: | ||
gvSIG version: | 2.4.0 | Add-on build: | ||
gvSIG build: | 2827 | Add-on resolve version: | ||
Operative System: | Linux | Add-on resolve build: | ||
Keywords: | Proyecto: | |||
Has patch: | Hito: | |||
Add-on name: | Unknown |
Description
Al cargar capas de SpatialLite (he probado con distintas capas, cargando una, o hasta cinco a la vez) de repente da un error y deja de poder acceder a la BBDD.
En el log aparece un error algo como:
DEBUG 47504 AWT-EventQueue-0 org.gvsig.spatialite.dal.SpatiaLiteHelper - closeConnection: connection = 1555878508 DEBUG 47506 AWT-EventQueue-0 org.gvsig.fmap.dal.store.jdbc2.spi.operations.AbstractConnectionOperation - preparing execution of CalculateEnvelopeOfColumnOperation. DEBUG 47507 AWT-EventQueue-0 org.gvsig.spatialite.dal.SpatiaLiteHelper$ConnectionProvider - getConnectionWritable. count 65, url jdbc:spatialite:/home/jjdelcerro/datos/geodata/db/sqlite/test DEBUG 47511 AWT-EventQueue-0 org.gvsig.spatialite.dal.SpatiaLiteHelper - getConnection: connection = 932908367 DEBUG 47511 AWT-EventQueue-0 org.gvsig.fmap.dal.store.jdbc2.spi.operations.AbstractConnectionOperation - Excuting operation CalculateEnvelopeOfColumnOperation. DEBUG 47512 AWT-EventQueue-0 org.gvsig.fmap.dal.store.jdbc2.JDBCUtils - execute query SQL: SELECT ST_AsBinary(Extent("geometry")) FROM "country" DEBUG 47513 AWT-EventQueue-0 org.gvsig.spatialite.dal.SpatiaLiteHelper - closeConnection: connection = 932908367 WARN 47516 AWT-EventQueue-0 org.gvsig.geodb.vectorialdb.wizard.WizardVectorialDB - Can't create layer 'country'. java.lang.RuntimeException: Can't calculate envelope. at org.gvsig.fmap.dal.store.jdbc2.spi.JDBCStoreProviderBase$EnvelopeValue.calculate(JDBCStoreProviderBase.java:127) at org.gvsig.fmap.dal.store.jdbc2.spi.JDBCStoreProviderBase$EnvelopeValue.get(JDBCStoreProviderBase.java:142) at org.gvsig.fmap.dal.store.jdbc2.spi.JDBCStoreProviderBase$EnvelopeValue.get(JDBCStoreProviderBase.java:94) at org.gvsig.fmap.dal.store.jdbc2.spi.JDBCStoreProviderBase.getEnvelope(JDBCStoreProviderBase.java:455) at org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore.getEnvelope(DefaultFeatureStore.java:471) at org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect.getFullEnvelope(FLyrVect.java:218) at org.gvsig.geodb.vectorialdb.wizard.WizardVectorialDB.execute(WizardVectorialDB.java:200) at org.gvsig.app.extension.AddLayer.doAddLayers(AddLayer.java:322) at org.gvsig.app.extension.AddLayer.execute(AddLayer.java:226) at org.gvsig.app.extension.AddLayer.execute(AddLayer.java:144) at org.gvsig.andami.actioninfo.impl.DefaultActionInfo.execute(DefaultActionInfo.java:307) at org.gvsig.andami.ui.mdiFrame.MDIFrame.actionPerformed(MDIFrame.java:993) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.Component.processMouseEvent(Component.java:6533) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6298) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at org.gvsig.andami.ui.AndamiEventQueue.dispatchEvent(AndamiEventQueue.java:50) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Caused by: java.lang.RuntimeException: Can't perform operation 'CalculateEnvelopeOfColumnOperation'. at org.gvsig.fmap.dal.store.jdbc2.spi.operations.AbstractConnectionOperation.perform_operation(AbstractConnectionOperation.java:77) at org.gvsig.fmap.dal.store.jdbc2.spi.operations.AbstractConnectionOperation.perform(AbstractConnectionOperation.java:41) at org.gvsig.fmap.dal.store.jdbc2.spi.JDBCStoreProviderBase$EnvelopeValue.calculate(JDBCStoreProviderBase.java:124) ... 50 more Caused by: org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException: An JDBC driver exception was throw at org.gvsig.fmap.dal.store.jdbc2.spi.operations.CalculateEnvelopeOfColumnOperation.calculateEnvelopeOfColumn(CalculateEnvelopeOfColumnOperation.java:147) at org.gvsig.fmap.dal.store.jdbc2.spi.operations.CalculateEnvelopeOfColumnOperation.perform(CalculateEnvelopeOfColumnOperation.java:52) at org.gvsig.fmap.dal.store.jdbc2.spi.operations.AbstractConnectionOperation.perform_operation(AbstractConnectionOperation.java:70) ... 52 more Caused by: java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such function: Extent) at org.spatialite.core.DB.newSQLException(DB.java:892) at org.spatialite.core.DB.newSQLException(DB.java:903) at org.spatialite.core.DB.throwex(DB.java:870) at org.spatialite.core.NativeDB.prepare(Native Method) at org.spatialite.core.DB.prepare(DB.java:213) at org.spatialite.jdbc3.JDBC3Statement.executeQuery(JDBC3Statement.java:81) at org.gvsig.fmap.dal.store.jdbc2.JDBCUtils.executeQuery(JDBCUtils.java:27) at org.gvsig.fmap.dal.store.jdbc2.spi.operations.CalculateEnvelopeOfColumnOperation.calculateEnvelopeOfColumn(CalculateEnvelopeOfColumnOperation.java:136) ... 54 more
Este error me ha tenido muy despistado; hasta que he visto la consola. Alli salen mas mensajes:
DEBUG 112818 [MapControl Drawer Worker] (SpatiaLiteHelper.java:161) - closeConnection: connection = 1247377721 DEBUG 112819 [MapControl Drawer Worker] (ResulSetControlerBase.java:116) - Close ResulSetEntryBase id 1 (total 0) DEBUG 115580 [MapControl Drawer Worker] (SpatiaLiteHelper.java:90) - getConnectionWritable. count 65, url jdbc:spatialite:/home/jjdelcerro/datos/geodata/db/sqlite/test ERROR: Too many connections: max 64 ERROR unable to initialize the SpatiaLite extension: NULL cache !!! DEBUG 115586 [MapControl Drawer Worker] (SpatiaLiteHelper.java:152) - getConnection: connection = 758262837 WARN 115587 [MapControl Drawer Worker] (MapControl.java:1356) - Problems drawing mapcontext. org.gvsig.fmap.dal.exception.ReadException: There was errors loading from 'country'. at org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect.draw(FLyrVect.java:346) at org.gvsig.fmap.mapcontext.impl.DefaultMapContextDrawer$DrawList.drawLayer(DefaultMapContextDrawer.java:549) at org.gvsig.fmap.mapcontext.impl.DefaultMapContextDrawer$DrawList.draw(DefaultMapContextDrawer.java:530) at org.gvsig.fmap.mapcontext.impl.DefaultMapContextDrawer$DrawList.drawLayers(DefaultMapContextDrawer.java:469) at org.gvsig.fmap.mapcontext.impl.DefaultMapContextDrawer.draw(DefaultMapContextDrawer.java:147) at org.gvsig.fmap.mapcontext.MapContext.draw(MapContext.java:1183) at org.gvsig.fmap.mapcontrol.MapControl$PaintingRequest.paint(MapControl.java:1344) at org.gvsig.fmap.mapcontrol.MapControl$Drawer$Worker.run(MapControl.java:1564) at java.lang.Thread.run(Thread.java:745) Caused by: org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.LegendDrawingException: Problems drawing layer at org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractVectorialLegend.internalDraw(AbstractVectorialLegend.java:472) at org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractVectorialLegend.draw(AbstractVectorialLegend.java:358) at org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractVectorialLegend.draw(AbstractVectorialLegend.java:144) at org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect.draw(FLyrVect.java:330) ... 8 more Caused by: java.lang.RuntimeException: Can't perform operation 'ResultSetForSetProviderOperation'. at org.gvsig.fmap.dal.store.jdbc2.spi.operations.AbstractConnectionOperation.perform(AbstractConnectionOperation.java:45) at org.gvsig.fmap.dal.store.jdbc2.impl.JDBCSetProvider.createFastIterator(JDBCSetProvider.java:320) at org.gvsig.fmap.dal.store.jdbc2.impl.JDBCSetProvider.createFastIterator(JDBCSetProvider.java:291) at org.gvsig.fmap.dal.store.jdbc2.impl.JDBCSetProvider.createFastIterator(JDBCSetProvider.java:56) at org.gvsig.fmap.dal.feature.spi.AbstractFeatureSetProvider.fastIterator(AbstractFeatureSetProvider.java:99) at org.gvsig.fmap.dal.feature.spi.AbstractFeatureSetProvider.fastIterator(AbstractFeatureSetProvider.java:94) at org.gvsig.fmap.dal.feature.impl.featureset.FastDefaultIterator.<init>(FastDefaultIterator.java:52) at org.gvsig.fmap.dal.feature.impl.featureset.DefaultFeatureSet.fastIterator(DefaultFeatureSet.java:343) at org.gvsig.fmap.dal.feature.impl.featureset.AbstractFeatureSet.doAccept(AbstractFeatureSet.java:72) at org.gvsig.fmap.dal.feature.impl.featureset.AbstractFeatureSet.doAccept(AbstractFeatureSet.java:67) at org.gvsig.tools.visitor.impl.AbstractIndexedVisitable.doAccept(AbstractIndexedVisitable.java:63) at org.gvsig.tools.visitor.impl.AbstractVisitable.accept(AbstractVisitable.java:49) at org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractVectorialLegend.drawFeaturesSingleLayer(AbstractVectorialLegend.java:560) at org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractVectorialLegend.drawFeatures(AbstractVectorialLegend.java:542) at org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractVectorialLegend.internalDraw(AbstractVectorialLegend.java:464) ... 11 more Caused by: org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecutePreparedSQLException: An JDBC exception was throw when execute SQL: 'SELECT ST_AsBinary("geometry"), "pk" FROM "country" WHERE ST_Intersects((ST_GeomFromWKB((x'00000000030000000100000005c065d269349a4d24c06592bc1b2d96cc40672d96cb65b2dcc06592bc1b2d96cc40672d96cb65b2dc405df695d0a85428c065d269349a4d24405df695d0a85428c065d269349a4d24c06592bc1b2d96cc'), (4326))), ("geometry")) ORDER BY "pk" ASC' with params {unknow} at org.gvsig.fmap.dal.store.jdbc2.impl.ResulSetControlerBase.create(ResulSetControlerBase.java:198) at org.gvsig.fmap.dal.store.jdbc2.impl.ResulSetControlerBase.create(ResulSetControlerBase.java:163) at org.gvsig.fmap.dal.store.jdbc2.impl.ResulSetControlerBase.create(ResulSetControlerBase.java:21) at org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation.createResultSet(ResultSetForSetProviderOperation.java:189) at org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation.perform_operation(ResultSetForSetProviderOperation.java:67) at org.gvsig.fmap.dal.store.jdbc2.spi.operations.AbstractConnectionOperation.perform(AbstractConnectionOperation.java:41) ... 25 more Caused by: java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such function: ST_AsBinary) at org.spatialite.core.DB.newSQLException(DB.java:892) at org.spatialite.core.DB.newSQLException(DB.java:903)
En principio parece que no se cierren las conexiones con la BBDD pero si que se esta haciendo un close
DEBUG 47511 AWT-EventQueue-0 org.gvsig.spatialite.dal.SpatiaLiteHelper - getConnection: connection = 932908367 DEBUG 47511 AWT-EventQueue-0 org.gvsig.fmap.dal.store.jdbc2.spi.operations.AbstractConnectionOperation - Excuting operation CalculateEnvelopeOfColumnOperation. DEBUG 47512 AWT-EventQueue-0 org.gvsig.fmap.dal.store.jdbc2.JDBCUtils - execute query SQL: SELECT ST_AsBinary(Extent("geometry")) FROM "country" DEBUG 47513 AWT-EventQueue-0 org.gvsig.spatialite.dal.SpatiaLiteHelper - closeConnection: connection = 932908367
el metodo closeConnection tiene el codigo:
public void closeConnection(Connection connection) { logger.debug("closeConnection: connection = "+connection.hashCode()); try { connection.close(); } catch (SQLException ex) { logger.warn("Can't close connection.",ex); } }
Por lo que parece que si que se cirran las conexiones.
Ahora mismo no se por donde cogerlo. Habra que seguir investigando.
Associated revisions
History
#1 Updated by Joaquín del Cerro Murciano almost 7 years ago
- Target version changed from 2.4.0-2850-final (rev. org.gvsig.desktop-2.0.220) to 2.4.0-2829 (rev. org.gvsig.desktop-2.0.195)
- Status changed from New to Fixed
No tengo muy claro que de todo lo que he tocado lo ha arreglado.
He hecho muchas pruebas y reescrito codigo muchas veces.
El cambio mas significativo ha sido:
- Activar la cache compartida al abrir la conexion con SpatiaLite.
Habia documetacion diciendo que deberia hacerse, pero no lo habia
hecho por que no habia visto como hacerlo.
- Sustituir el obtener la conexion directamente por usar el pool de
conexiones de apache commons.
Sospecho que la conjuncion de estas dos cosas es lo que ha causado que acabe funcionando.
#2 Updated by Álvaro Anguix over 6 years ago
- Status changed from Fixed to Closed