@Override
	protected <T> T execute(String sql, int fetchSize, boolean returnKeys, PreparedStatementCallback<T> action,
			Object... args) {
		if ((action instanceof QueryCallback<?>) == false) {
			return dataAccessor.execute(sql, fetchSize, returnKeys, action, args);
		}
		
		TaskParameters parameters = new JdbcQueryTaskParameters(sql, fetchSize, returnKeys, action, args);
		
		Task task = new JdbcQueryTask(dataAccessor);
		
		TaskRepository.addTask(task, parameters);
		
		T result = TaskRepository.processTask(task, parameters, timeout);
		
		return result;
	}