Regarding the use of session EJBs, what I have seen until now in "real world applications" (if I remeber correctly) are stateless session EJB used as "facades" for transactional (via CMT) business logic methods. I have not seen any stateful session EJBs, though. Indeed it seems that their use as "shopping carts" for example, found in Java EE books, means that their state should be stored in some way in the persistent storage. But this seems to suggest that also other parts of the application domain, as modeled in the database, should be mapped to stateful EJB-s, which seems to be overly complex.
So, could you give specific examples, based on your experience/expertise, of how stateful session EJBs used in today's (as opposed to 2003, for example) applications?