gpt4 book ai didi

java - 当 EJB 客户端失去与 Application Server 的连接时,是否有可以捕获的异常?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:33:38 26 4
gpt4 key购买 nike

我想为 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 接口(interface)的异常处理将略有变化。也就是说,接口(interface)中的每个方法都需要声明 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 允许您在实现接口(interface)时声明异常的子集,而 EJB 不会改变这一点。从 bean 本身抛出 RemoteException 会破坏整个要点,因此将其排除在外是个好主意。

关于java - 当 EJB 客户端失去与 Application Server 的连接时,是否有可以捕获的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6217830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com