2017-02-27 67 views
0

我正在尝试改进现有应用程序的启动性能。 此应用程序目前正在对另外8个应用程序进行服务调用,因此有8个服务bean可以扩展WebServiceGatewaySupport。这些服务bean中的每一个都有自己的SaajSoapMessageFactory实例。多个WebServiceTemplate和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> 

我想知道这是否是必要的,或者如果我只能使用messageFactory的一个实例为我所有的服务bean。我不确定是否需要担心消息处理阻塞。 我正在考虑这个问题的原因,因为每次启动SaajMessageFactory“创建SAAJ 1.3 MessageFactory ..”需要几秒钟的时间。

在类似的说明中,每个服务bean还有一个Jaxb2Marshaller实例。我可以只为所有人使用Jaxb2Marshaller的实例,并合并上下文路径。

回答

0

SAAJ消息工厂和JAXB上下文是不可变的,也是线程安全的,所以没有理由不能为所有服务bean使用相同的实例。请注意,我不相信创建SAAJ消息工厂需要大量时间。另一方面,根据类的数量,创建JAXB上下文可能是重量级的。

+0

谢谢安德烈亚斯。我是否需要通过切换到编组器和SAAJ消息工厂的一个实例来担心运行时性能? – Oboluse

+0

我没有看到任何原因会对运行时性能产生影响。 –