3

(1) 好吧,我对 JAX-WS Java Web 服务的线程模型感到很困惑。我读到它们不是线程安全的。那么他们应该如何服务多个并行请求呢?鉴于它总是已知的(大多数情况下),它们将同时被多个客户端调用。

(2) 应用服务器是否为每个请求创建一个新的 Web 服务实例(就像它维护一个无状态会话 bean 池,为请求分配一个,一旦请求完成,它就会返回到池中)。您能否在应用服务器控制台(GlassFish 或 JBoss 或 WebSphere)中配置该池大小。

(3)而且我还发现了@Threadsope 注释here,它为每个请求创建新线程。
http://jax-ws-commons.java.net/thread-scope/
这是一个不错的选择吗?我确信人们正在以其他标准方式解决线程安全和并行请求问题 - 请告知。

4

1 回答 1

1

应用程序服务器包含一个 bean 池。
使用无状态会话 bean 时,不能保证您在使用会话时会获得相同的实例。
然而,正如我所提到的,bean 是由一个池管理的,在其中持有一个状态,这是一个坏主意。
不过,我认为 EJB bean 与您的需求没有任何关系。
请注意,在您提供的示例中,DataService 和连接都是根据请求创建的。这有点贵。
我会考虑仅将 ThreadLocal API 用于连接,并从连接池中获取它。
您可以通过阅读ThreadLocalDB 连接池来自行实现这些。


总而言之——我认为 EJB 在这里并不重要。
不要同时保留您的服务类和线程本地的字段,而只保留您将为每个请求分配的必要字段。(在您展示的示例中 - 这是连接)

于 2012-07-13T19:40:49.520 回答