java – 当EJB客户端失去与Application Server的连接时,是否存在
发布时间:2020-12-15 08:40:58 所属栏目:Java 来源:网络整理
导读:我想为EJB客户端应用程序丢失与应用程序服务器的连接时发生的特定情况创建异常处理程序.我们创建的代码能够以用户友好的方式处理客户端应用程序,以尝试在故障转移环境中重新连接到同一服务器或另一台服务器.通过“失去连接”,我的意思是需要重新连接.原因可
我想为EJB客户端应用程序丢失与应用程序服务器的连接时发生的特定情况创建异常处理程序.我们创建的代码能够以用户友好的方式处理客户端应用程序,以尝试在故障转移环境中重新连接到同一服务器或另一台服务器.通过“失去连接”,我的意思是需要重新连接.原因可能是网络问题,服务器锁定,服务中断等.
以下是我们正在寻找的内容(客户端代码): private void doSomething() throws RecoverableException { //(...) BusinessRemoteEJB ejb=ctx.lookup("BusinessRemoteEJB"); try { List<product> list=ejb.getProducts(); //(...) } catch (EJBException e){ Exception e = e.getCausedByException(); //Here is what I'm looking for: some excpetion that indicates a connection problem if(e !=null && e instanceof EJBConnectionException){ //This will be catched in a proper place to try to reconnect throw new RecoverableException(e); } else { //If it is any other excpetion,just let it work up the stack throw e; } 当然EJBConnectionException不存在.有什么类似的吗? 我们正在使用OpenEJB 1.4(符合EJB 3.x).但是,我们希望使用可以在不同应用程序服务器上使用的异常处理程序(如果可能). 另一件事是某些应用程序服务器提供某种故障转移机制,但我们的要求有点具体,我们可以直接在客户端代码中实现它. 解决方法
同样实现java.rmi.Remote的@Remote接口将使其异常处理略有改变.也就是说,接口中的每个方法都需要声明java.rmi.RemoteException.这将允许客户端接收与连接相关的问题.在缺少java.rmi.Remote的情况下,容器会将所有此类问题转换为EJBException.除了它是EJBException之外没有任何要求,因此依赖于EJBException的原因或任何子类是不可移植的.
@Remote public interface OrangeRemote extends java.rmi.Remote { public void doSomething() throws RemoteException; } @Stateless public class OrangeBean implements OrangeRemote { @Override public void doSomething() { //... } } 请注意,bean本身不需要在throws子句中声明RemoteException. Java允许您在实现接口时声明异常的子集,而EJB不会更改它.从bean本身抛出RemoteException会打败整个点,因此将其遗漏是一个好主意. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |