在Web应用程序中使用全局服务和* PortType类?

时间:2013-02-19 09:44:26

标签: java web-services java-ee jax-ws

我使用JAXWS生成了一个Web服务客户端。我注意到在使用JAXWS客户端时,实例化Service*PortType类需要一段时间。因此,每次需要请求时实例化Service*PortType类都不是一个好主意。

  • Service*PortType类设为全局Web应用程序是否安全?它的优点和缺点是什么?
  • 请求/响应是否有可能切换到不同的请求/响应?
  • 在服务中调用方法时,是否会创建新连接?或者只是重复使用旧连接?
  • 如果它只是重​​用旧连接,那么可能会出现一些线程问题吗?

还给出了代码port.calculate(requestParam),其中port是一个全局变量,如果许多线程同时调用calculate()方法会发生什么?每个线程是否会为每个计算调用创建一个新线程?或者它会等待每个电话完成后再继续拨打下一个电话?如何处理呼叫?我只是担心我可能会混合一些请求和响应。

先谢谢!

1 个答案:

答案 0 :(得分:1)

你是对的担心。端口不是线程安全的,但是创建时间最长的服务是线程安全的。没有关于此的官方文档,但已声明here并且在此forum post中完成了一项实验,显示同一端口上的多个请求会导致请求出现乱码。建议的方法是创建单个服务和一个端口对象池,您可以从中检出这些端口对象以发出请求。另一种方法是使用CXF,它确实使客户端对象的线程安全,并且更明确地说明如何在文档中的线程之间共享。