fgo*_*lez 6 java multithreading ejb-3.0
我正在学习EJB,到目前为止我已经读过EJB中不允许多线程,因为它是应该关心线程安全的容器,让开发人员只关注业务逻辑,所以基本上这意味着EJB确保只有一个线程可以同时访问Session bean中的方法.
当我们有许多用户访问EJB中的相同方法时会发生什么?容器是序列化的,还是正在创建bean的不同实例,每个线程一个?
有人可以解释一下这个政策是什么?另外我有点困惑,为什么不允许多线程,所以我们不能创建自己的线程,为什么我们有@Asynchronous注释?
是的,它创建了几个实例,并将它们集中在一起.请参阅Oracle官方文档:
因为无状态会话bean永远不会被钝化,所以它的生命周期只有两个阶段:不存在并准备好调用业务方法.图22-4说明了无状态会话bean的各个阶段.
EJB容器通常创建并维护一个无状态会话bean池,开始无状态会话bean的生命周期.容器执行任何依赖注入,然后调用带注释的@PostConstruct方法(如果存在).现在,bean已准备好让客户端调用其业务方法.
在生命周期结束时,EJB容器调用带注释的方法@PreDestroy(如果存在).然后bean的实例准备好进行垃圾回收.