anchor.diff:  public CompletionStage<Response> getSingle(@PathParam("id") Long id) {
       AsyncSession session = driver.asyncSession();
       return session
  -        .readTransactionAsync(tx ->
  -            tx.runAsync("MATCH (f:Fruit) WHERE id(f) = $id RETURN f", Values.parameters("id", id))
  +        .readTransactionAsync(tx -> tx
  +            .runAsync("MATCH (f:Fruit) WHERE id(f) = $id RETURN f", Values.parameters("id", id))
  +            .thenCompose(fn -> fn.singleAsync())
       )
  -    .thenCompose(fn -> fn.singleAsync())
       .handle((record, exception) -> {
           if(exception != null) {
               Throwable source = exception;
  
positive.code: public CompletionStage<Response> create(Fruit fruit) {
      AsyncSession session = driver.asyncSession();
      return session
          .writeTransactionAsync(tx ->
              tx.runAsync("CREATE (f:Fruit {name: $name}) RETURN f", Values.parameters("name", fruit.name))
          )
          .thenCompose(fn -> fn.singleAsync())
          .thenApply(record -> Fruit.from(record.get("f").asNode()))
          .thenCompose(persistedFruit -> session.closeAsync().thenApply(signal -> persistedFruit))
          .thenApply(persistedFruit -> Response
  
negative.code: with online backup and high availability extensions licensed under a closed-source commercial license.
  
  include::./status-include.adoc[]
  
  == Programming model
  
  