anchor.diff:  
   
   [[readingAnInputSolutionFromADatabase]]
  -==== Reading An Input Solution From A Database (Or Other Repository)
  -
  -The benchmark configuration currently expects an `<inputSolutionFile>` element, so a separate file, for each dataset.
  -There are two ways to deal with this if your dataset is in a relational database or another type of repository:
  +==== Reading An Input Solution From A Database (Or Other Storage)
  +
  +There are two options if your dataset is in a relational database or another type of repository:
   
   * Extract the datasets from the database and serialize them to a local file (for example as XML with `XStreamSolutionFileIO` if XML isn't too verbose).
   Then use those files an `<inputSolutionFile>` elements.
  -* For each dataset, create a txt file that holds the unique id of the dataset.
  -Write <<customSolutionFileIO,a custom `SolutionFileIO`>> that reads that identifier, connects to the database and extract the problem identified by that id. Configure those txt files as `<inputSolutionFile>` elements.
  -
  -
  -[NOTE]
  -====
  -Local files are always better: they allow for faster, more reliable, offline benchmarking.
  -Otherwise, an unstable network connection can ruin a long running benchmark.
  -====
  +** The benchmarks is now more reliable because they run offline.
  +** Each dataset is only loaded just in time.
  +* Load all the datasets in advance and pass them to the `buildPlannerBenchmark()` method:
  ++
  +[source,java,options="nowrap"]
  +----
  +        PlannerBenchmark plannerBenchmark = benchmarkFactory.buildPlannerBenchmark(dataset1, dataset2, dataset3);
  +----
   
   
   [[warmingUpTheHotSpotCompiler]]
  
positive.code: </plannerBenchmark>
  ----
  
  This `PlannerBenchmark` will try three configurations (Tabu Search, Simulated Annealing and Late Acceptance) on two data sets (32queens and 64queens), so it will run six solvers.
  
  Every `<solverBenchmark>` element contains a solver configuration and one or more `<inputSolutionFile>` elements.
  It will run the solver configuration on each of those unsolved solution files.
  
negative.code:   <inheritedSolverBenchmark>
      <problemBenchmarks>
        ...
        <inputSolutionFile>data/cloudbalancing/unsolved/100computers-300processes.xml</inputSolutionFile>
        <inputSolutionFile>data/cloudbalancing/unsolved/200computers-600processes.xml</inputSolutionFile>
      </problemBenchmarks>
      <solver>
        ...<!-- Common solver configuration -->
  