0

我正在尝试提高现有应用程序的启动性能。此应用程序当前正在对另外 8 个应用程序进行服务调用,因此有 8 个服务 bean 扩展了 WebServiceGatewaySupport。这些服务 bean 中的每一个都有自己的 SaajSoapMessageFactory 实例。

<bean id="serviceBean" class="com.test.ServiceBeanA" scope="prototype"
      p:marshaller-ref="marshaller"
      p:unmarshaller-ref="marshaller"
      p:defaultUri="${service.endpoint}"
      p:messageSender-ref="messageSender">
    <constructor-arg ref="**messageFactoryD**"/>

</bean>

我想知道这是否有必要,或者我是否只能对所有服务 bean 使用 messageFactory 的一个实例。我不确定是否需要担心阻塞消息处理。我之所以考虑这样做是因为每次启动 SaajMessageFactory “Creating SAAJ 1.3 MessageFactory ..”都会花费几秒钟。

同样,每个服务 bean 也有一个 Jaxb2Marshaller 实例。我可以只使用 Jaxb2Marshaller 的所有实例,并结合上下文路径。

4

1 回答 1

0

SAAJ 消息工厂和 JAXB 上下文是不可变的和线程安全的,因此没有理由不能对所有服务 bean 使用相同的实例。请注意,我认为创建 SAAJ 消息工厂不会花费大量时间。另一方面,创建 JAXB 上下文可能是重量级的,具体取决于类的数量。

于 2017-02-28T21:42:07.170 回答