Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何在开始长时间执行之前向调用方返回确认_Java_Web Services - Fatal编程技术网

在Java中,如何在开始长时间执行之前向调用方返回确认

在Java中,如何在开始长时间执行之前向调用方返回确认,java,web-services,Java,Web Services,我有一个向外部客户端公开的服务方法,如下所示: public String service() { String track_id; // Generate new track id for each call somehow // let us put as 123 for simplicity track_id = "123"; // Execution that may take 1 minute goes here .... ret

我有一个向外部客户端公开的服务方法,如下所示:

public String service()
 {
    String track_id;

    // Generate new track id for each call somehow
    // let us put as 123 for simplicity
    track_id = "123";

    // Execution that may take 1 minute goes here ....

    return track_id;
  }
然后,我有一个使用该服务的客户端,如:

public void client()
 {
    // Method Call
    String track_id = service();

    // Other statements
    //statement 1;
    //statement 2;
    //statement 3;
  }
client()
唯一关心的是
service()
返回的曲目id
client()
不关心
service()
中发生的长时间执行过程,该过程会延迟
client()
中的语句1到3

现在有没有办法让
service()
首先返回曲目id,然后运行其余的执行过程。听起来很疯狂,但是有没有办法改变
service()
方法以实现以下行为:

public String service()
 {
    String track_id;

    // Generate new track id for each call somehow
    // let us put as 123 for simplicity
    track_id = "123";

    return track_id;

    // Execution that may take 1 minute goes here ....
  }

注意:我不想在数据库中存储任何内容,然后再以任何方式获取它,以便在
service()
中运行长时间执行。长执行应该在接收来自
客户端()的调用时运行

如何使用两种方法

public String fastService() {
    String track_id;
    track_id = "123";
    return track_id;
}
您可能希望使用生成的id

public String slowService(String id) {
    // zzZzZZzZZ     
}
在客户端调用中,按您需要的顺序:

public void client() {
    String track_id = fastService();
    // Other statements
    slowService(track_id);
}


但是,要小心如果按此顺序调用方法,会影响行为吗?如果慢速服务不成功,您会再次生成id吗?

使用两种方法如何

public String fastService() {
    String track_id;
    track_id = "123";
    return track_id;
}
您可能希望使用生成的id

public String slowService(String id) {
    // zzZzZZzZZ     
}
在客户端调用中,按您需要的顺序:

public void client() {
    String track_id = fastService();
    // Other statements
    slowService(track_id);
}


但是,要小心如果按此顺序调用方法,会影响行为吗?如果慢速服务没有成功,您会再次生成id吗?

您的代码将在容器管理的池的线程中执行。在方法完成之前,不会将响应发送到客户端

您可以从一个单独的线程开始运行长任务,并让主线程返回轨迹id

public String service() {
    String track_id;

    // Generate new track id for each call somehow
    // let us put as 123 for simplicity
    track_id = "123";

    //Asynchronous thread
    (new Thread() {
        public void run() {
          // Execution that may take 1 minute goes here ....
       }
    }).start();

   return track_id;
 }

您的代码将在容器管理的池的线程中执行。在方法完成之前,不会将响应发送到客户端

您可以从一个单独的线程开始运行长任务,并让主线程返回轨迹id

public String service() {
    String track_id;

    // Generate new track id for each call somehow
    // let us put as 123 for simplicity
    track_id = "123";

    //Asynchronous thread
    (new Thread() {
        public void run() {
          // Execution that may take 1 minute goes here ....
       }
    }).start();

   return track_id;
 }