我使用JAXWS生成了一个Web服务客户端。我注意到在使用JAXWS客户端时,实例化Service
和*PortType
类需要一段时间。因此,每次需要请求时实例化Service
和*PortType
类都不是一个好主意。
Service
和*PortType
类设为全局Web应用程序是否安全?它的优点和缺点是什么?还给出了代码port.calculate(requestParam)
,其中port是一个全局变量,如果许多线程同时调用calculate()
方法会发生什么?每个线程是否会为每个计算调用创建一个新线程?或者它会等待每个电话完成后再继续拨打下一个电话?如何处理呼叫?我只是担心我可能会混合一些请求和响应。
先谢谢!
答案 0 :(得分:1)
你是对的担心。端口不是线程安全的,但是创建时间最长的服务是线程安全的。没有关于此的官方文档,但已声明here并且在此forum post中完成了一项实验,显示同一端口上的多个请求会导致请求出现乱码。建议的方法是创建单个服务和一个端口对象池,您可以从中检出这些端口对象以发出请求。另一种方法是使用CXF,它确实使客户端对象的线程安全,并且更明确地说明如何在文档中的线程之间共享。