gvSIG bugs #4797

Updated by Joaquín del Cerro Murciano over 6 years ago

Si cargo una capa Spatialite en la vista y justo después intento seleccionar alguna geometría en la vista, se produce un error:

<pre>
java.lang.RuntimeException: Can't perform operation 'CountOperation'.
at org.gvsig.fmap.dal.store.jdbc2.spi.operations.AbstractConnectionOperation.perform(AbstractConnectionOperation.java:45)
at org.gvsig.fmap.dal.store.jdbc2.spi.JDBCStoreProviderBase$CountValue.calculate(JDBCStoreProviderBase.java:86)
at org.gvsig.fmap.dal.store.jdbc2.spi.JDBCStoreProviderBase$CountValue.get(JDBCStoreProviderBase.java:97)
at org.gvsig.fmap.dal.store.jdbc2.spi.JDBCStoreProviderBase$CountValue.get(JDBCStoreProviderBase.java:71)
at org.gvsig.fmap.dal.store.jdbc2.spi.JDBCStoreProviderBase.getFeatureCount(JDBCStoreProviderBase.java:322)
at org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore.getFeatureCount(DefaultFeatureStore.java:2431)
at org.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection.getData(DefaultFeatureReferenceSelection.java:330)
at org.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection.select(DefaultFeatureReferenceSelection.java:147)
at org.gvsig.fmap.dal.feature.impl.DefaultFeatureSelection.select(DefaultFeatureSelection.java:337)
at org.gvsig.fmap.dal.feature.impl.DefaultFeatureSelection.select(DefaultFeatureSelection.java:441)
at org.gvsig.fmap.dal.feature.impl.DefaultFeatureSelection.select(DefaultFeatureSelection.java:471)
at org.gvsig.fmap.dal.feature.impl.DefaultFeatureSelection.select(DefaultFeatureSelection.java:446)
at org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore.setSelection(DefaultFeatureStore.java:813)
at org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore.setSelection(DefaultFeatureStore.java:764)
at org.gvsig.fmap.mapcontrol.tools.PointSelectionListener.point(PointSelectionListener.java:93)
at org.gvsig.app.project.documents.view.toolListeners.PointSelectListener.point(PointSelectListener.java:58)
at org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior.mouseReleased(PointBehavior.java:94)
at org.gvsig.fmap.mapcontrol.tools.CompoundBehavior.mouseReleased(CompoundBehavior.java:294)
at org.gvsig.fmap.mapcontrol.MapControl$MapToolListener.mouseReleased(MapControl.java:1777)
at java.awt.Component.processMouseEvent(Component.java:6535)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6300)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
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:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
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: org.sqlite.SQLiteException: [SQLITE_BUSY] The database file is locked (database is locked)
at org.sqlite.core.DB.newSQLException(DB.java:909)
at org.sqlite.core.DB.newSQLException(DB.java:921)
at org.sqlite.core.DB.throwex(DB.java:886)
at org.sqlite.core.DB.exec(DB.java:155)
at org.sqlite.jdbc3.JDBC3Connection.setAutoCommit(JDBC3Connection.java:164)
at org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:331)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.setAutoCommit(PoolingDataSource.java:317)
at org.gvsig.fmap.dal.store.jdbc2.spi.operations.AbstractConnectionOperation.perform_operation(AbstractConnectionOperation.java:67)
at org.gvsig.fmap.dal.store.jdbc2.spi.operations.AbstractConnectionOperation.perform(AbstractConnectionOperation.java:41)
... 50 more
</pre>


Si reintento la selección, a veces se repito el error, pero otras veces funciona correctamente. Si hago alguna otra operación (zoom, abrir la tabla, seleccionar en la tabla, etc) antes de seleccionar las geometrías en la vista, parece funcionar correctamente.

Me sucede tanto en la revisión r133 como la r136 del SVN del proyecto Spatialite.

Pasos para reproducirlo:
- cargamos una capa Spatialite en la vista
- seleccionamos la capa en el TOC
- seleccionamos la herramienta para seleccionar geometrías de la vista
- pinchamos sobre una geometría

No estoy seguro, pero creo que el problema es que en ResultSetEntryBase(ResulSetControlerBase).create (líneas 183-199) se crea una transacción para el Resulset. Más adelante se hace una CountOperation pero el resultset sigue abierto, por lo que la transacción del resultset sigue activa y la nueva transacción del CountOperation falla.

Back