The two major questions are:
... when should should you return false / null and when should you throw an exception?
I've always been of the opinion that a method should only throw exceptions for events that are truly fatal. For example, a search method returning no results is not an exception. However, a method that internally uses that search method may throw an exception under certain scenarios if it was intending on operating those results.
Others are of the opinion that everything should be thrown as an exception. The argument is that even something like no results should trigger exception-handling code, and the easiest way to do this is have the callee fall into a catch block. ( I would counter that, even in the catch block, you need to special case different scenarios, so why "pretend" that something is an exception? To me, it seems clearer what's going on )
... should the framework ever handle an exception itself, or always throw to the callee?
So... What's your best practice / opinion?