If a checked exception is thrown then the container won't destroy the instance or mark the transaction for rollback.
It an unchecked exception is thrown, the transaction is marked for rollback and the bean instance is killed.
Since CreateException is a checked exception, if it is thrown by ejbPostCreate(), then nothing special happens according to the rules we just summarized. The data from ejbCreate() will still be in the database if we don't do anything besides throw an exception. (Remember that ejbCreate() and ejbPostCreate() run in the same transaction.) What we need to do is set the transaction so that it gets rolled back before we throw the exception. (Or we could throw an EJBException, but that wouldn't be what the client expects, so go with the other solution.) Does that help answer your question?