Following the style used in Joshua Bloch's Effective Java and in agreement with the answers to this question, I've used AssertionErrors in the past in the Java SE environment for code paths that should never possibly be executed.
Looking at Java EE, the EJB 3.1 specification says
If the bean method encounters a system exception or error, it should simply propagate the error from the bean method to the container (i.e., the bean method does not have to catch the exception).
and a little further down, it says that the concerned EJB instance has to be discarded in the case of a non-ApplicationException. As far as I know, if another instance of that EJB is required in a subsequent request, the container takes one from the pool or creates a new one if necessary, so there should be no problems associated with that (except of course if it was a @Singleton EJB).
Is it appropriate/good style to use an AssertionError in a session bean method for indicating programming errors? Or is there a more fitting Throwable subtype for that?