以下是一些sudo代码:

//controller method
public String method1()
{
    EJBBean1 bean1;
    bean1.method1();
}

//EJBBean1 class
public void method1()
{
    EJBBean2 bean2;
    bean2.method2();
}

//EJBBean2 class
public void method2()
{
    EJBBean3 bean3;
    bean3.method3();
}

//EJBBean3 class
public void method3()
{
    throw NullPointerException();
}


EJB对象是通过依赖项注入来注入的。

如果EJBBean3的method3抛出SystemException,那么EJB容器是否会删除所有EJB对象(EJBBean1、2和3)?

最佳答案

在正常情况下

嵌套的StateFullEJB具有特殊的行为,所包含的EJB保持会话。

在您的情况下,当EjbBean1被销毁时,EjbBean1将拥有新的专用EjbBean2,EjbBean2也将被销毁。同样的情况适用于EjbBean2-EjbBean3。

因此,EjbBean1负责在EjbBean1.remove方法(@Remove方法)中的EjbBean2.remove中调用remove。

Samples

对于例外情况...

    When ever a System Exception thrown by a bean method, EJB Container invalidates
the EJB object and destroys the bean instance.The bean instance directly moved into
 DOES not exists state and any @PreDestroy methods are not invoked.

A System  exception is any unchecked Exception not annotated as an @Application Exception


请参阅here

因此,您的EjbBean3将被Ejb容器自动销毁,并且异常传播到父方法EjbBean2和EJbBean1。由于没有一个bean捕获NullPointerException
这些实例将由容器自动删除。

注意**,假定NullPointerException是系统异常(即未注释/配置)

08-03 16:47