The answers state this about onMessage() of a Message Driven Bean:
It can throw application exception. However, EJB 3.0 spec also adds that Message-driven beans should not, in general, throw RuntimeExceptions.
However how is it possible to throw an application exception when the MessageListener does not declare any checked exceptions??? Is the only possible way to throw a subclass of Runtime and annotate with @ApplicationException??
A remark concering @ApplicationException: You can also use the deployment descriptor to declare an exception as an application exception: I see no other way to use an already defined, unchecked exception (here java.lang.ArithmeticException) directly as an application exception.