[英]Generate Dynamic Namespace Prefix Using Spring Jaxb2Marshaller
[英]thread safety when using spring WebServiceTemplate and Jaxb2Marshaller
我以编程方式将spring WebServiceTemplate用作Web服务客户端,即未实例化spring容器。 我正在使用Jaxb2Marshaller进行封送/拆组。 在我的应用程序中,我创建了一个SaajSoapMessageFactory实例和一个Jaxb2Marshaller实例。 我还创建了WebServiceTemplate的单个实例,并分配了先前创建的SaajSoapMessageFactory和Jaxb2Marshaller实例。
我创建的WebServiceTemplate以多线程方式使用,即多个线程可以同时调用marshalSendAndReceive。 我的问题是-我的配置线程安全吗? 我担心Jaxb2Marshaller。 Javadoc说Jaxb2Marshallers不一定是线程安全的。 如何在不重新初始化Jaxb上下文的情况下以线程安全的方式使用Jaxb2Marshaller?
顺便说一句:查看spring参考中的示例spring-ws配置使我相信Jaxb2Marshaller是线程安全的,但Javadoc似乎与此矛盾。
Jaxb2Marshaller
的Javadoc没有以一种或另一种方式提及线程安全性,因此我不确定为什么您认为并非如此。 如果不是线程安全的,那么javadoc会非常清楚地说明这一点。
您对WebServiceTemplate
, SaajSoapMessageFactory
和Jaxb2Marshaller
单例的配置非常好,并且完全是线程安全的。
创建几个Jaxb2Marshaller
(比如说五个),并将它们放入池中(使用LinkedBlockingQueue
)。 创建线程时,将其传递给队列。
当一个线程需要一个, take()
从队列/池之一。 当池为空时,线程将在此调用上阻塞。
使用Jaxb2Marshaller
完成线程后, put()
其放回队列中,以便其他线程可以使用它。
如果发现线程在等待编组程序时阻塞过多,请向队列中添加更多线程(请参阅第一步)。 这样,您可以轻松地调整池的大小(甚至使其可配置)。 然后,队列将自动分发它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.