I think you mean "contradictory" not "controversial".
And the statements aren't contradictory - they are in fact complimentary.
The
endpoint interface is a remote interface
as seen by the client and therefore losing the remote connection is always a possibility. If the connection is lost or cannot be created the
client's application server throws a subclass of java.rmi.RemoteException. Note this exception
isn't coming from the implementing bean.
The
implementing bean on the other hand "lives" on the application server that is running the service (not the client's application server) and therefore doesn't know about any of the connection problems that the client may be having. Throwing of java.rmi.RemoteExceptions is entirely the responsibility of the client's application server. The bean is only allowed to throw "application exceptions" (which show up in the WSDL as
SOAP Faults) which cannot derive from java.rmi.RemoteExceptions.
Basically the rules state that java.rmi.RemoteException (or a subclass thereof) cannot be used to represent an "application exception" but must always be treated as a "system exception".
Enterprise JavaBeans, 3rd Edition: 14.6.1. Application Exceptions Versus System Exceptions
An application exception is any exception that does not extend java.lang.RuntimeException or java.rmi.RemoteException. System exceptions are java.lang.RuntimeException and its subtypes, including EJBException.
An application exception must never extend either the RuntimeException, the RemoteException, or one of their subtypes.