Exception when running executionquery

I am upgrading one of our components from activiti 5.14 → flowable 5 → flowable 6
Now, with all changes made to accomodate flowable 6 I get an excpetion when i am attempting get a processInstance by businesskey:

java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyResultSet.getNString(Ljava/lang/String;)Ljava/lang/String; is abstract

Do you have any idea why this happens?

We are using oracle DB, relevant stack trace follows:

java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyResultSet.getNString(Ljava/lang/String;)Ljava/lang/String; is abstract
at com.mchange.v2.c3p0.impl.NewProxyResultSet.getNString(NewProxyResultSet.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ibatis.logging.jdbc.ResultSetLogger.invoke(ResultSetLogger.java:68)
at com.sun.proxy.$Proxy157.getNString(Unknown Source)
at org.apache.ibatis.type.NStringTypeHandler.getNullableResult(NStringTypeHandler.java:37)
at org.apache.ibatis.type.NStringTypeHandler.getNullableResult(NStringTypeHandler.java:26)
at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:66)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyAutomaticMappings(DefaultResultSetHandler.java:516)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:397)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:351)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:326)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:299)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:192)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at org.flowable.common.engine.impl.db.DbSqlSession.selectListWithRawParameter(DbSqlSession.java:199)
at org.flowable.common.engine.impl.db.DbSqlSession.selectListWithRawParameter(DbSqlSession.java:193)
at org.flowable.common.engine.impl.db.DbSqlSession.selectList(DbSqlSession.java:155)
at org.flowable.engine.impl.persistence.entity.data.impl.MybatisExecutionDataManager.findExecutionsByQueryCriteria(MybatisExecutionDataManager.java:235)
at org.flowable.engine.impl.persistence.entity.ExecutionEntityManagerImpl.findExecutionsByQueryCriteria(ExecutionEntityManagerImpl.java:129)
at org.flowable.engine.impl.ExecutionQueryImpl.executeList(ExecutionQueryImpl.java:802)
at org.flowable.common.engine.impl.AbstractQuery.execute(AbstractQuery.java:143)
at org.flowable.engine.impl.interceptor.CommandInvoker$1.run(CommandInvoker.java:51)
at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperation(CommandInvoker.java:93)
at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperations(CommandInvoker.java:72)
at org.flowable.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:56)
at org.flowable.engine.impl.interceptor.BpmnOverrideContextInterceptor.execute(BpmnOverrideContextInterceptor.java:25)
at org.flowable.common.engine.impl.interceptor.TransactionContextInterceptor.execute(TransactionContextInterceptor.java:53)
at org.flowable.common.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:71)
at org.flowable.idm.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:49)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
at org.flowable.idm.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:46)
at org.flowable.common.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:35)
at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:56)
at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:51)
at org.flowable.common.engine.impl.AbstractQuery.list(AbstractQuery.java:114)
at no.storebrand.aps.service.ProcessService.getExecutionIdForAnsatt(ProcessService.java:226)

Are you using the Spring Boot support from Flowable?

From what I can see you are using the c3p0 pool. However, in the Flowable OSS Applications and in our tests we have switched to HikariCP. Is it possible for you to switch to it as well?

Just to clarify, we are not mandating HikariCP. Users should use the Connection Pool that suites them the best. It can be that MyBatis the persistence layer that we use to do low level SQL uses things which are not present in c3p0. Can you please let us know which version of c3p0 you are using so we can give it a go?

Thanks for the quick response :slight_smile:
We are not using Spring boot. but we are using SpringProcessEngineConfiguration and the SpringFlowable5CompatibilityHandlerFactory, but that is probably not relevant in this case…?
I had version 0.9.1.2 of c3p0 when i discovered the error, I then upgraded to latest version 0.9.5.2 but still the same error.
I will have a look at HikariCP and see if we can use it.

Just an update, by switching to HikariCP flowable queries seems to work fine. Thanks @filiphr.
Though, given the widespread use of c3p0, I guess it would be smart for you to figure out these problems also.

Thanks for letting us know. We are going to try a sample project with c3p0 as well just to validate what the exact problem is. My initial thought is that MyBatis uses from the JDBC API which is not implemented by c3p0.

The problem with c3p0 is that it’s last update has been in December 2015 which is almost 3 years now. As I said we are going to try and have a look at it to see why it isn’t working,

This error is thrown when an application tries to call an abstract method without actual implementation. Abstract methods have no body and cannot be executed. This error can only occur at run time if the definition of some class has incompatibly changed since the currently executing method was last compiled. It usually happens after some library is upgraded while some is not. The dependencies are missing somehow. This means that you are using an old java version of an interface implementation which is missing a new interface method. For example java.sql.Connection interface got a new getSchema method in 1.7. If you have 1.6 JDBC driver and call Connection.getSchema you will get AbstractMethodError. So, make sure you have the latest jar file in your class path not a older copy.