客户端以收到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 对象不再存在而不能完成,则抛出这个异常。
分享到:
相关推荐
这些方法通常抛出`java.rmi.RemoteException`,因为网络通信中可能出现的各种问题。 2. **实现远程对象**:创建一个实现远程接口的类,实现接口中声明的方法。这些方法将被序列化并通过网络传输。 3. **注册远程...
2. **实现远程接口**:然后,创建一个实现远程接口的类,该类通常需要继承自`java.rmi.Remote`接口,并且抛出`java.rmi.RemoteException`。在这个实现类中,你需要实现远程接口中的所有方法。 3. **创建并注册远程...
java.rmi.activation java.rmi.dgc java.rmi.registry java.rmi.server java.security java.security.acl java.security.cert java.security.interfaces java.security.spec java.sql java.text java....
java.rmi.activation java.rmi.dgc java.rmi.registry java.rmi.server java.security java.security.acl java.security.cert java.security.interfaces java.security.spec java.sql java.text java....
java.rmi.activation java.rmi.dgc java.rmi.registry java.rmi.server java.security java.security.acl java.security.cert java.security.interfaces java.security.spec java.sql java.text java....
错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.net.BindException: Address already in use: JVM_Bind 这里说的是1099端口被其它进程占用...
1. **远程接口(Remote Interface)**:这是定义远程方法的接口,需要继承java.rmi.Remote接口,并声明抛出java.rmi.RemoteException的异常。 2. **远程对象(Remote Object)**:实现了远程接口的类,这个类的对象...
此外,为了运行RMI程序,还需要配置Java的RMI运行环境,包括设置JVM的`-Djava.rmi.server.hostname`属性,确保服务器和客户端的RMI通信通道畅通。在实际开发中,可能还需要考虑异常处理、安全性、并发控制等高级话题...
java.rmi.activation java.rmi.dgc java.rmi.registry java.rmi.server java.security java.security.acl java.security.cert java.security.interfaces java.security.spec java.sql java.text java....
在linux上启动jmeter-server报错: ...Server failed to start: java.rmi.RemoteException: Cannot start. localhost is a loopback address. An error occurred: Cannot start. localhost is a loopback address.
所有的远程方法都会在这个接口中声明,并且可能会抛出`java.rmi.RemoteException`。 2. **远程对象(Remote Object)**:实现了远程接口的类实例,它驻留在服务器端JVM,负责处理来自客户端的远程方法调用。 3. **...
1. **远程对象(Remote Object)**:这是RMI的核心,它是一个实现了特定接口(继承自java.rmi.Remote)的对象,该接口中的方法声明抛出java.rmi.RemoteException。远程对象可以驻留在网络上的任何地方,并通过网络...
这个接口必须继承`java.rmi.Remote`,并且其方法必须抛出`RemoteException`。这是一个示例接口`Payment`: ```java import java.rmi.Remote; import java.rmi.RemoteException; public interface Payment extends ...
- RMI提供了特殊的异常类型,如`java.rmi.RemoteException`,这是所有RMI相关的运行时异常的超类。 - 由于网络通信的不确定性,需要捕获并处理可能的网络错误和远程方法执行失败。 4. **安全性** - RMI支持基于...
这个压缩包“java_rmi.zip”可能包含了关于如何设置和使用Java RMI的示例代码或教程。 Java RMI的核心概念是接口的序列化和反序列化,以及一个名为RMIServer的远程服务器和一个RMIClient的远程客户端。当一个远程...
import java.rmi.RemoteException; public interface MyRemoteInterface extends Remote { String doSomething(String input) throws RemoteException; } ``` 远程对象是实现了远程接口的类,它实际上是在远程JVM...
- **`java.rmi.RemoteException`**:表示远程调用异常。 综上所述,RMI不仅提供了一种简洁高效的方式来进行分布式对象间的通信,而且还被广泛应用于多种J2EE框架中,为开发者提供了一个强大而灵活的分布式编程工具...
例如,可以使用`java.rmi.server.RMIClientSocketFactory`和`java.rmi.server.RMIServerSocketFactory`自定义网络层的实现,实现特定的安全策略。 四、RMI服务端优化 1. 异步调用:通过使用`java.rmi.activation`...
首先,我们需要定义一个远程接口 `HelloInterface`,它继承自 `java.rmi.Remote`。这个接口声明了需要被远程调用的方法,例如 `say()` 方法。远程接口的方法必须抛出 `RemoteException`,这是所有 RMI 相关异常的根...