有状态会话beanmultithreading访问
EJB 3.2规范说明如下:
默认情况下,允许客户端对有状态会话对象进行并发调用,并且需要容器序列化此类并发请求。 请注意,容器永远不允许multithreading访问实际的有状态会话Bean实例。
对我来说,并发访问和multithreading访问似乎是等效的。 那么如何在禁止多个线程的情况下对有状态EJB进行并发调用呢?
你是对的:并发调用只能用多个线程进行。 因此,在谈及并发时,涉及多个线程。
规范明确指出不允许容器同时访问一个有状态会话bean实例。 如果存在并发调用(来自多个线程),则容器必须序列化它们。
注意,当然可以有几个有状态会话bean的实例,当然可以由多个客户端访问。
另外 – 这似乎让你感到困惑 – 规范说允许客户端 (不是容器)进行并发调用,但容器必须序列化它们。
有状态会话bean可以处理并发请求。 但是,这些调用实际上并不访问您同时编码的bean类。 应用程序服务器序列化这些请求 因此,在给定时间,只有一个线程执行bean类方法。
所以问题是, 并发调用不等于有状态会话bean的并发访问 。
此并发级别仅处理同一会话的请求。 来自不同会话的请求由不同的对象处理。
- 无状态会话bean中的multithreading?
- EntityManager的find()方法是否创建了JPA类的新实例?
- 如何使用Pooled Spring bean而不是Singleton?
- 如何在Spring / EJB / Mockito …代理上处理内部调用?
- 在Java类中注入EJB时出现NullPointerException
- Jboss Java EE容器和ExecutorService
- 差异:@SessionScoped vs @Stateful和@ApplicationScoped vs @Singleton
- 从JSF中的Datatable获取选定的行数据
- hibernate多个模式映射