java.rmi.RemoteException 和javax.ejb.EJBException

客户端以收到javax.ejb.EJBException 或java.rmi.RemoteException来表明它调用企业bean 方法或正确完成调用失败。异常可以由容器或客户端与容器之间的通信子系统抛出。
一般情况下,如果客户端从方法调用收到javax.ejb.EJBException 或java.rmi.RemoteException,那么它不知道企业bean 的方法是否完成。如果客户端在事务上下文中执行,则客户端事务可以或不必由通信子系统或目标bean 的容器标记为回滚。
例如,如果后台事务服务器或目标bean 的容器由于业务方法部分完成而担心数据的完整性,那么事务将被标记为回滚。例如当目标bean 的方法由于RuntimeException 而返回,或如果远程服务器在业务方法执行期间宕机,那么就会发生业务方法的部分完成。
标记事务回滚不是必需的。例如当在客户端的通信子系统不能将请求发送到服务器时,就可以不标记事务回滚。
当在事务上下文中执行的客户端从企业bean 调用中收到EJBException 或RemoteException,那么客户端可以使用下列的策略来处理异常:
停止事务。如果客户都是事务的发起者,那么它可以简单的回滚它的事务。如果客户端不是事务的发起者,那么它可以标记事务回滚或执行引起事务回滚的操作。例如,如果客户端是一个企业bean,那么企业bean
可以抛出一个RuntimeException 来让容器回滚事务。
继续事务。客户端可以在同一个或其他的企业bean 上执行附加的操作,并最后试着提交事务。如果事务在EJBException 或RemoteException 被抛到客户端时被标记为回滚,那么提交会失败。
如果客户端选择继续事务,那么客户端可以首先查询事务的状态以避免在以标记为回滚的事务上进行无用的计算。如果客户端是使用容器管理事务分割的企业bean ,那么它可以使用EJBContext.getRollbackOnly 方法来测试事务是否已经被标记为回滚;如果客户端是使用bean 管理事务分割的企业bean 或其他客户端类型,则它可以使用UserTransaction.getStatus 方法来得到事务的状态。

Javax.ejb.EJBTransactionRolledbackException ,javax.ejb.TransactionRolledbackLocalException 和javax.transaction.TransactionRolledbackException
Javax.ejb.EJBTransactionRolledbackException ,javax.ejb.TransactionRolledbackLocalException 都是Javax.ejb.EJBException 的子类。javax.transaction.TransactionRolledbackException 是java.rmi.RemoteException的子类。它在JTA 标准扩展中定义。
如果客户端接收到这些异常,那么客户端一定知道事务已经被回滚。它继续这个事务也是无用的,因为事务不再会被提交。

Java.ejb.EJBTransactionRequiredException ,javax.ejb.TransactionRequiredLocalException 和javax.transaction.TransactionRequiredException
Java.ejb.EJBTransactionRequiredException 和javax.ejb.TransactionRequiredLocalException 是javax.ejb.EJBException 的子类。javax.transaction.TransactionRequiredException 是java.rmi.RemoteException 的子类。它被定义在JTA 标准的扩展中。
Java.ejb.EJBTransactionRequiredException ,javax.ejb.TransactionRequiredLocalException 和javax.transaction.TransactionRequiredException 通知客户端目标企业bean 必须在客户端的事务中被调用,但调用企业bean 的客户端没有事务上下文。
这个错误通常表示应用没有被正确地建立。

Javax.ejb.NoSuchEJBException ,javax.ejb.NoSuchObjectLocalException 和java.rmi.NoSuchObjectException
Javax.ejb.NoSuchEJBException 是javax.ejb.EJBException 的子类。如果本地业务方法由于EJB 对象不存在而不能完成,则会话bean 的业务接口向客户端抛出这个异常。
javax.ejb.NoSuchObjectLocalException 是javax.ejb.EJBException 的子类。如果本地业务方法由于EJB 对象不再存在而不能完成,则抛出这个异常。
java.rmi.NoSuchObjectException 是java.rmi.RemoteException 的子类。如果远程业务方法由于EJB 对象不再存在而不能完成,则抛出这个异常。

你可能感兴趣的:(ejb3)