gvSIG bugs #4541

Errores accediendo a tablas de SpatiaLite.

Added by Joaquín del Cerro Murciano almost 7 years ago. Updated over 6 years ago.

Status:Closed% Done:

0%

Priority:NormalSpent 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

Revision 43377
Added by Joaquín del Cerro Murciano almost 7 years ago

refs #4539, #4540, #4541, #4272, #4453, Corregidos varios errores en la carga de capas de BBDD (postgresql, spatialite, h2spatial) y en la exportacion a estos.

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

Also available in: Atom PDF