title: Handling errors and feedback when performing bulk operations in a multi-tiered architecture
body: <p>Let's say you have a business logic method that can perform some operation across a number of objects. Maybe you want to call a lottery number picking web service, once for each person selected from a list. In Java, the code might look something like this:</p>
  
  <pre><code>Set&lt;Person&gt; selectedPeople = ... // fetch list of people
  for ( Person person : selectedPeople ) {
      String lotteryNumber = callLotteryNumberWebService( person );
      // ...
  }
  </code></pre>
  
  <p>Note that the lottery number web service may have side-effects, like recording that the person has requested a lottery number (perhaps charging their account), so even if the web service call fails for one person, it may have succeeded for others. This information (the lottery numbers) will need to be fed back to some higher level (the view).</p>
  
  <p>If this were a case where a single operation took place, the business logic method could return a single value (say, the lottery number) or throw an exception with any details of the failure. But for bulk operations, it would be possible for a few of the operations to succeed and a few to fail.</p>
  
  <p>This seems like a type of problem that would occur in many applications and there should be a clean way to handle it. So, what is the best way to feed this type of information back from the business logic layer to another layer in an application (like a view), preferably in a generic way that can be reused for different types of data and operations?</p>