以下是一些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是系统异常(即未注释/配置)