无状态 ejb 中的客户端特定状态

Client specific state in a stateless ejb

我不了解 stateless session beans。文档说实例变量可能包含客户端特定状态,然后说当方法完成时不应保留状态。

假设有一个方法 X 和两个客户端同时调用。方法 X 将客户端名称保存在一个实例变量中。我看到当多个线程同时调用同一个方法时会出现问题。

T1 访问 X,X 在实例变量中设置客户端名称并休眠。 T2 访问 X 并且 X 在实例变量中设置客户端名称并休眠。 T1 恢复并且 X 现在可以看到 T2 的数据。

这不是问题吗?或者,容器是否为每个客户端创建一个新实例并在调用返回后销毁 ejb?

Secondly-- Clients may, however, change the state of instance variables in pooled stateless beans, and this state is held over to the next invocation of the pooled stateless bean.

这是否意味着同一个客户端可以跨不同的方法调用查看其数据?或者这是否意味着不同的客户端跨方法调用看到彼此的数据?

这不是问题吗? 不,不是,第二个客户端在第一个客户端完成其请求之前不会获得对同一个 bean 实例的引用(它有与线程调度机制无关,它在每个请求的基础上工作。

这是否意味着同一个客户端可以跨不同的方法调用查看其数据?或者这是否意味着不同的客户端通过方法调用看到彼此的数据? 是的,对于这两个问题,如果为两个不同的请求从池中获取相同的 bean 实例。