3

EJB 3.2 规范说明如下:

默认情况下,允许客户端对有状态会话对象进行并发调用,并且容器需要序列化此类并发请求。请注意,容器从不允许多线程访问实际的有状态会话 bean 实例。

对我来说,并发访问和多线程访问似乎是等价的。那么如何在禁止多线程的情况下对有状态 EJB 进行并发调用呢?

4

2 回答 2

4

你是对的:只能使用多个线程进行并发调用。因此,在谈到并发时,涉及到多个线程。

规范明确规定不允许容器同时访问一个有状态会话 bean 实例。如果有并发调用(来自多个线程),容器必须将它们序列化。

请注意,该有状态会话 bean 当然可以有多个实例,当然可以由多个客户端访问。

此外 - 这似乎让你感到困惑 - 规范说允许客户端(而不是容器)进行并发调用,但容器必须序列化它们。

于 2014-04-25T07:56:05.337 回答
1

有状态会话 bean 可以处理并发请求。然而,这些调用实际上并不访问您同时编码的 bean 类。应用服务器序列化这些请求。所以在给定的时间只有一个线程执行 bean 类的方法。

所以问题是,并发调用不等于有状态会话 bean 的并发访问

此级别的并发仅处理同一会话的请求。来自不同会话的请求由不同的对象处理。

于 2014-04-25T07:57:21.853 回答