在Java中从WebService调用并行进程

时间:2012-06-20 17:26:05

标签: java web-services tomcat servlets parallel-processing

我已经在Java中开发了一个部署在Tomcat服务器中的WebService(WS1)。 如果满足某些条件,WS1需要调用另一个WebService(WS2)并行运行。这可能吗?或者WS1是否必须等待WS2的响应才能继续运行。这一点不是延迟WS1的响应,因为它不依赖于WS2。但是,WS2触发IS依赖于WS1,这就是我的问题的开始。

我对此问题的解决方案是创建一个单独的servlet,它可以在不延迟WS1的情况下调用WS2。我该如何实施它,或者任何人都可以想到更好的解决方案?

3 个答案:

答案 0 :(得分:3)

这取决于你想要达到的目标。如果您只想启动第二个WS,则可以创建一个新的本地线程并进行调用。第二个WS甚至可能支持异步调用,因此在调用它之后不会被阻塞。创建一个新线程的工作原理如下。

首先,你需要一个这个线程的类。这个类将负责与WS2进行通信:

class ThreadForWS2 extends Thread {
  public void run() {
    // invoke WS2 here
  }
}

在WS1请求处理程序中,您只需启动此线程,例如:

Thread threadForWS2 = new ThreadForWS2();
threadForWS2.start();

就是这样,但当然Java中有很多方法可以创建另一个线程。这取决于您调查最佳解决方案。

答案 1 :(得分:0)

当然可以做到。
我想知道你是否正在谈论SOAP或RESTFul Web服务 通常在这两种技术中,您可以在WS1中调用一个方法,从而与WS2进行通信(即,将带有REST数据的HTTP请求发送到资源URL或发送SOAP信封)
如果你的意思是通过并行运行来打开一个线程,那么在WS2中执行该方法的调用代码 - 这也是可能的 另外,从我看到的servlet API 3.0支持异步调用,也许这可以帮助你

答案 2 :(得分:0)

您必须在异步庄园中调用WS2。这意味着Web服务调用在单独的线程中处理,不会影响父线程(WS1)的执行。

与异步调用相反的是同步调用,它会阻止当前线程直到收到响应。