If client x calls method1() and method2() of SFSB y in a transaction then container will call afterBegin(),method1(),method2(),beforeCompletion(),afterCompletion(boolean), assuming method1() and method2() have transaction attribute set to "Required". What kind of code Bean Provider would put in afterBegin(),beforeCompletion(),afterCompletion(boolean)? Bean Provider can update bean state with latest data from a database in afterBegin(), modify it in method1() and method2(), write it back into database just before transaction completes in beforeCompletion(). In afterCompletion(false) Bean Provider can undo the changes to bean state because transaction was rollbacked. In this scenario it does not make sense to access database in afterCompletion. I think writers of the EJB specs had this scenario in their mind when they decided not to let programmers access database and other ejb in afterCompletion. Someone can probably come with a reason that they need to access the database in afterCompletion() but the code can be refactored and made cleaner without doing so.