class CassandraJobStore implements JobStore {

    @Override
    public Observable<Task> retrieveTask(String taskId) {
        return Observable
                .fromCallable((Callable<Statement>) () -> {
                    transactionLogger().logBeforeRead(retrieveActiveTaskStatement, "retrieveTask", taskId);
                    return retrieveActiveTaskStatement.bind(taskId);
                })
                .flatMap(statement -> execute(statement).flatMap(resultSet -> {
                    Row row = resultSet.one();
                    if (row != null) {
                        String value = row.getString(0);
                        Task task = deserializeTask(value);

                        transactionLogger().logAfterRead(retrieveActiveTaskStatement, "retrieveTask", task);

                        return Observable.just(task);
                    } else {
                        return Observable.error(JobStoreException.taskDoesNotExist(taskId));
                    }
                }));
    }

    @Inject public  CassandraJobStore(CassandraStoreConfiguration configuration,
                             Session session,
                             TitusRuntime titusRuntime);
      CassandraJobStore(CassandraStoreConfiguration configuration,
                      Session session,
                      TitusRuntime titusRuntime,
                      ObjectMapper mapper,
                      int initialBucketCount,
                      int maxBucketSize);

}