J2EE 应用程序服务器如何服务单个 WebService 调用

问题描述 投票:0回答:1

在一个项目的编码过程中,我遇到了一个疑问。

我的疑问是,如标题所示,J2EE 应用程序服务器如何为单个 WebService 调用提供服务。

当客户端调用WS时,J2EE AS会创建一个新线程来服务它吗?我不需要担心对 WS 实现的多个同时调用,对吧? (这是Java中的操作和方法)

另一个疑问是关于Spring中的@Autowired(默认是单例实例化)。

在此 Web 应用程序中,我以通常的方式创建 Spring 上下文,在 web.xml 中,我使用 ContextLoaderListener Spring 类放置了引用 context-spring-xml 配置文件的常用标签。

例如:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:spring-conf/spring-context.xml
    </param-value>
</context-param>

在这种情况下,对于每个@Autowired(带有单例)的bean,我有整个应用程序服务器的单个实例?或者每次进行 WS 调用时都会创建一个线程,并且单个线程在 spring xml 配置文件中拥有每个定义的 bean 的单个实例?

让我们考虑 ServiceImplementation 类本身就是一个 spring bean,作为单例进行管理。

我们使用 Apache Camel 作为 ESB,将服务 Consumer 公开为 SpringRouteBuilder 类。

spring web-services apache-camel autowired application-server
1个回答
0
投票

当客户端调用WS时,J2EE AS会创建一个新线程来服务它吗?我不需要担心对 WS 实现的多个同时调用,对吗?

对。但你必须担心你的 @Autowired 单例线程安全。 在请求/响应过程中不得使用任何实例变量。它可能只有配置/设置属性。

在这种情况下,对于每个@Autowired(带有单例)的bean,我都有一个用于整个应用程序服务器的实例?

不对。 它不会适用于整个 AS。它在您的网络应用程序的范围内。这就是应用程序之间的隔离。 这意味着当在两个不同的 Web 应用程序的 Spring 上下文中定义相同的 @Autowired 类时(例如两个 WAR 内的 web.xml 中的 spring-context.xml) - 每个应用程序 Spring 上下文将有自己的单例。

© www.soinside.com 2019 - 2024. All rights reserved.