有状态会话bean多线程访问

时间:2014-04-25 07:42:57

标签: java multithreading concurrency ejb stateful-session-bean

EJB 3.2规范说明如下:

  

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

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

事实上,并发调用不等于有状态会话bean的并发访问

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