Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 Spring@Async是否与客户机-服务器通信一起工作?_Java_Spring_Asynchronous - Fatal编程技术网

Java Spring@Async是否与客户机-服务器通信一起工作?

Java Spring@Async是否与客户机-服务器通信一起工作?,java,spring,asynchronous,Java,Spring,Asynchronous,我已经阅读了Spring关于@Async的文档,不清楚这是否应该只在调用方和被调用服务位于同一JVM中时才起作用 我在Tomcat上部署了一个SpringWeb应用程序,还有一个Swing应用程序,使用SpringHttpInvoker在两者之间进行通信。我想从客户端调用服务器服务并异步返回结果。我必须构建其他东西吗,或者我可以使用@Async吗 在同一个JVM中测试时,它起了作用。当用2个JVM测试它时,我得到了 java.io.NotSerializableException:java.ut

我已经阅读了Spring关于@Async的文档,不清楚这是否应该只在调用方和被调用服务位于同一JVM中时才起作用

我在Tomcat上部署了一个SpringWeb应用程序,还有一个Swing应用程序,使用SpringHttpInvoker在两者之间进行通信。我想从客户端调用服务器服务并异步返回结果。我必须构建其他东西吗,或者我可以使用@Async吗

在同一个JVM中测试时,它起了作用。当用2个JVM测试它时,我得到了

java.io.NotSerializableException:java.util.concurrent.FutureTask

在服务器上,这意味着我不能对两个JVM使用这种机制

有什么想法吗


在我找到的许多关于@Async的教程中,似乎没有一个涉及到远程调用和返回值的情况。

两个JVM之间绝对没有关系

您使用的客户机将HTTP请求发送到HTTP服务器,然后HTTP服务器以HTTP响应进行响应。就这些

Spring的
@Async
注释旨在指示方法应在异步上下文中运行。这与HTTP客户端完全没有关系。这是在web应用程序中调用的方法


您遇到的错误与如何调用该方法以及如何尝试向客户端发送HTTP响应有关。当你说它使用一个JVM而不是两个JVM时,你简直是在拿苹果和桔子做比较。JVM并不重要。重要的是,在一种情况下,您正在调用该方法。在另一种情况下,您有一个客户机/服务器设置,其中服务器无法将某些实体序列化到HTTP响应。

我不明白
@Async
是可以在方法上使用的注释。当由Spring处理时,任何方法调用(从代理)都将被异步调用。您只能在JVM中调用该方法,因此我不知道第二个方法在哪里发挥作用,也不知道您的困惑在哪里。客户机将得到一个未来结果,并且必须询问未来对象服务是否已经完成,以便将服务结果从服务器传递到客户机。服务器+客户端=2个JVM。我不知道这里有什么大的误解。您可以在一个应用程序中注释一个方法,该方法将在一个新线程中异步执行。调用者获得一个未来对象等待并接收最终结果。如果我注释了一个远程服务并通过HTTP请求调用该远程服务,那么该请求将发送到服务器,在服务器上立即返回该调用,并且该服务在一个新线程中运行。但我在客户端上接收的未来对象不可序列化。我试图在客户机-服务器通信中使用异步方法调用机制。我的问题是:它能起作用吗?@Lessing对此没有误解。您将获得一个
NotSerializableException
。您似乎正在尝试序列化
FutureTask
。这是一个与客户机/服务器体系结构无关的问题。@Lessing它取决于您试图序列化它的方式。但是你需要提供更多关于你想做什么的细节。你所描述的没有多大意义。似乎您需要一个异步客户端。EJB的@asynchronous可以做到这一点:Spring的asynchronous也可以做到吗?@Lessing我很确定,在该文档中,客户端引用了在同一应用程序中运行的其他java代码。您似乎指的是一个HTTP客户机与您的HTTP服务器(tomcat webapp)通信。