Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安全地检查EJB是否存在,如果不存在,则防止回滚';T_Java_Jboss_Ejb - Fatal编程技术网

Java 安全地检查EJB是否存在,如果不存在,则防止回滚';T

Java 安全地检查EJB是否存在,如果不存在,则防止回滚';T,java,jboss,ejb,Java,Jboss,Ejb,我有一些清理代码,可能会尝试引用不存在的(有状态的)EJB。例如: try{ //In my case ejb is actually a delegate. Not sure this makes a difference ejb.doSomeMethod(); }catch(NoSuchEJBException nsejb){ //Deal with this but continue } 但是,NoSuchEJBException正在导致事务回滚。 有没有办法防止

我有一些清理代码,可能会尝试引用不存在的(有状态的)EJB。例如:

try{
    //In my case ejb is actually a delegate. Not sure this makes a difference
    ejb.doSomeMethod();
}catch(NoSuchEJBException nsejb){
    //Deal with this but continue
}
但是,NoSuchEJBException正在导致事务回滚。

有没有办法防止回滚或检查
ejb
是否不再存在?

好的,您可以在一个新事务中运行该代码,然后回滚,但不会影响外部事务

什么会导致EJB不存在?您是否在运行时取消部署它们?它是一个会话ejb(在本例中是一个购物车)。他们可能死于抛出运行时或被容器丢弃和销毁。我假设您正在使用
@ejb
注释访问ejb。如果是这样,在出现异常等情况时,容器通常不应该删除它们。即使是这样,每当您尝试访问这些EJB/代理时,容器也应该创建一个新实例。当web用户需要时,以编程方式创建Cart,然后存储这些Cart。如果cart被放弃(并最终被容器销毁)或出现意外异常,则存储的句柄将在对其调用任何方法时抛出NoSuchEJBException。嗯,您正在谈论有状态会话bean,不是吗?看起来这是唯一的选项。