mff-uk / odcs

ODCleanStore
1 stars 11 forks source link

Virtuoso 7 - cannot open detail of finished DBpedia execution. #953

Closed janvojt closed 10 years ago

janvojt commented 10 years ago

screenshot from 2013-12-19 18 04 33

janvojt commented 10 years ago

Related to #878.

janvojt commented 10 years ago

I could not reproduce this today on current version going through same scenario several times, also tried parallel executions.

janvojt commented 10 years ago

Happened again, I was not doing anything special:

21:44:31.229 [http-bio-8084-exec-18] ERROR c.c.m.x.o.f.AppEntry - Uncaught exception
java.lang.Error: java.lang.ClassCastException:java.lang.Short cannot be cast to openlink.util.Vector
    at virtuoso.jdbc4.VirtuosoConnection.read_request(Unknown Source) ~[virtjdbc-4.1.jar:na]
    at virtuoso.jdbc4.VirtuosoFuture.nextResult(Unknown Source) ~[virtjdbc-4.1.jar:na]
    at virtuoso.jdbc4.VirtuosoConnection.rollback(Unknown Source) ~[virtjdbc-4.1.jar:na]
    at org.apache.commons.dbcp.DelegatingConnection.rollback(DelegatingConnection.java:368) ~[commons-dbcp-1.4.jar:1.4]
    at org.apache.commons.dbcp.PoolableConnectionFactory.passivateObject(PoolableConnectionFactory.java:685) ~[commons-dbcp-1.4.jar:1.4]
    at org.apache.commons.pool.impl.GenericObjectPool.addObjectToPool(GenericObjectPool.java:1379) ~[commons-pool-1.5.4.jar:1.5.4]
    at org.apache.commons.pool.impl.GenericObjectPool.returnObject(GenericObjectPool.java:1342) ~[commons-pool-1.5.4.jar:1.5.4]
    at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:90) ~[commons-dbcp-1.4.jar:1.4]
    at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:191) ~[commons-dbcp-1.4.jar:1.4]
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.closeDatasourceConnection(DatabaseAccessor.java:493) ~[classes/:na]
    at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.closeConnection(DatasourceAccessor.java:520) ~[classes/:na]
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.closeConnection(DatabaseAccessor.java:518) ~[classes/:na]
    at org.eclipse.persistence.sessions.server.ExternalConnectionPool.releaseConnection(ExternalConnectionPool.java:111) ~[classes/:na]
    at org.eclipse.persistence.sessions.server.ServerSession.releaseConnectionAfterCall(ServerSession.java:614) ~[classes/:na]
    at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:580) ~[classes/:na]
    at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:250) ~[classes/:na]
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:242) ~[classes/:na]
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228) ~[classes/:na]
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:299) ~[classes/:na]
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:694) ~[classes/:na]
    at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2738) ~[classes/:na]
    at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2691) ~[classes/:na]
    at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:495) ~[classes/:na]
    at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1168) ~[classes/:na]
    at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899) ~[classes/:na]
    at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1127) ~[classes/:na]
    at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:403) ~[classes/:na]
    at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1215) ~[classes/:na]
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896) ~[classes/:na]
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1793) ~[classes/:na]
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1775) ~[classes/:na]
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1740) ~[classes/:na]
    at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:258) ~[classes/:na]
    at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:469) ~[classes/:na]
    at sun.reflect.GeneratedMethodAccessor62.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_45]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_45]
    at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:310) ~[spring-orm-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at com.sun.proxy.$Proxy79.getResultList(Unknown Source) ~[$Proxy79.class:na]
    at cz.cuni.mff.xrg.odcs.commons.app.dao.db.DbAccessReadBase.executeList(DbAccessReadBase.java:103) ~[classes/:na]
    at cz.cuni.mff.xrg.odcs.commons.app.dao.db.DbAccessReadBase.executeList(DbAccessReadBase.java:61) ~[classes/:na]
    at cz.cuni.mff.xrg.odcs.frontend.doa.container.CachedSource.loadByIndex(CachedSource.java:163) ~[classes/:na]
    at cz.cuni.mff.xrg.odcs.frontend.doa.container.CachedSource.getItemIds(CachedSource.java:333) ~[classes/:na]
    at cz.cuni.mff.xrg.odcs.frontend.container.ReadOnlyContainer.getItemIds(ReadOnlyContainer.java:258) ~[classes/:na]
    at org.tepi.filtertable.paged.PagedFilterTableContainer.getItemIds(PagedFilterTableContainer.java:84) ~[filteringtable-0.9.0.v7.jar:0.9.0.v7]
    at com.vaadin.ui.CustomTable.getItemIds(CustomTable.java:2195) ~[filteringtable-0.9.0.v7.jar:7.1.8]
    at com.vaadin.ui.CustomTable.getVisibleCellsNoCache(CustomTable.java:2145) ~[filteringtable-0.9.0.v7.jar:7.1.8]
    at com.vaadin.ui.CustomTable.refreshRenderedCells(CustomTable.java:1670) ~[filteringtable-0.9.0.v7.jar:7.1.8]
    at com.vaadin.ui.CustomTable.refreshRowCache(CustomTable.java:2615) ~[filteringtable-0.9.0.v7.jar:7.1.8]
    at com.vaadin.ui.CustomTable.containerItemSetChange(CustomTable.java:4407) ~[filteringtable-0.9.0.v7.jar:7.1.8]
    at cz.cuni.mff.xrg.odcs.frontend.container.ReadOnlyContainer.refresh(ReadOnlyContainer.java:112) ~[classes/:na]
    at cz.cuni.mff.xrg.odcs.frontend.gui.tables.RecordsTable.refresh(RecordsTable.java:177) ~[classes/:na]
    at cz.cuni.mff.xrg.odcs.frontend.gui.components.DebuggingView.fillContent(DebuggingView.java:242) ~[classes/:na]
    at cz.cuni.mff.xrg.odcs.frontend.gui.components.DebuggingView.refresh(DebuggingView.java:268) ~[classes/:na]
    at cz.cuni.mff.xrg.odcs.frontend.auxiliaries.RefreshManager$1.refresh(RefreshManager.java:71) ~[classes/:na]
    at com.github.wolfie.refresher.Refresher.fireRefreshEvents(Refresher.java:72) ~[refresher-1.2.1.7.jar:1.2.1.7]
    at com.github.wolfie.refresher.Refresher.access$1(Refresher.java:70) ~[refresher-1.2.1.7.jar:1.2.1.7]
    at com.github.wolfie.refresher.Refresher$1.refresh(Refresher.java:35) ~[refresher-1.2.1.7.jar:1.2.1.7]
    at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_45]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_45]
    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:168) ~[vaadin-server-7.1.8.jar:7.1.8]
    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:118) ~[vaadin-server-7.1.8.jar:7.1.8]
    at com.vaadin.server.communication.ServerRpcHandler.handleBurst(ServerRpcHandler.java:207) [vaadin-server-7.1.8.jar:7.1.8]
    at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:111) [vaadin-server-7.1.8.jar:7.1.8]
    at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:91) [vaadin-server-7.1.8.jar:7.1.8]
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:37) [vaadin-server-7.1.8.jar:7.1.8]
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1371) [vaadin-server-7.1.8.jar:7.1.8]
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:238) [vaadin-server-7.1.8.jar:7.1.8]
    at cz.cuni.mff.xrg.odcs.frontend.ODCSApplicationServlet.service(ODCSApplicationServlet.java:67) [classes/:na]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) [servlet-api.jar:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) ~[catalina.jar:7.0.41]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) ~[catalina.jar:7.0.41]
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) ~[org-netbeans-modules-web-httpmonitor.jar:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) ~[catalina.jar:7.0.41]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) ~[catalina.jar:7.0.41]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) ~[catalina.jar:7.0.41]
    at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:123) ~[catalina.jar:7.0.41]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java) ~[catalina.jar:7.0.41]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) ~[catalina.jar:7.0.41]
    at org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:171) ~[catalina.jar:7.0.41]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java) ~[catalina.jar:7.0.41]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) ~[catalina.jar:7.0.41]
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) ~[catalina.jar:7.0.41]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) ~[catalina.jar:7.0.41]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) ~[catalina.jar:7.0.41]
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) ~[tomcat-coyote.jar:7.0.41]
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) ~[tomcat-coyote.jar:7.0.41]
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) ~[tomcat-coyote.jar:7.0.41]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) ~[na:1.7.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) ~[na:1.7.0_45]
    at java.lang.Thread.run(Thread.java:744) ~[na:1.7.0_45]
janvojt commented 10 years ago

The problem is, that connection pool rollbacks transaction before returning connection to the pool. It is done by Apache DBCP connection pool manager, because tracking all transaction states would be too expensive. Instead, a rollback is called to make sure possible leftover queries are not commited by the next unit of work. This should be normally OK, but Virtuoso JDBC does not survive this.

To prevent rollback, I enabled auto commit, in which case rollback is skipped (see PoolableConnectionFactory#passivateObject()).