Java Grails-与第三方API的异步通信

Java Grails-与第三方API的异步通信,java,grails,frameworks,concurrency,asynchronous,Java,Grails,Frameworks,Concurrency,Asynchronous,我正在试验grails,以便与在线交易平台对接。 特别是互动经纪人(IB) API的工作方式是,您需要让他们的客户机程序Trader Workstation(TWS)运行,然后我们使用API来做一些事情。使用API基本上包括创建一个“代理”对象、调用connect()成员函数(这将建立到TWS软件的本地端口连接)和调用类似getData()的东西 grails在这个场景中的价值在于GORM特性和提供的web框架。我希望能够定义从db实现中抽象出来的对象,轻松地执行持久性操作,并为用户提供一个UI


我正在试验grails,以便与在线交易平台对接。
特别是互动经纪人(IB)

API的工作方式是,您需要让他们的客户机程序Trader Workstation(TWS)运行,然后我们使用API来做一些事情。使用API基本上包括创建一个“代理”对象、调用connect()成员函数(这将建立到TWS软件的本地端口连接)和调用类似getData()的东西

grails在这个场景中的价值在于GORM特性和提供的web框架。我希望能够定义从db实现中抽象出来的对象,轻松地执行持久性操作,并为用户提供一个UI来执行CRUD和自定义操作

我的挑战是IB API使用异步通信进行请求和回复。i、 e.当我调用getData()时,API知道在准备发送它们时使用回调函数dataResults()。为了使dataResults()可以调用,我创建的代理对象仍然需要存在以接收回复。
在控制器函数中,如果我创建一个代理对象并调用getData(),当请求完成时,代理对象显然也会消失。所以我永远无法收到回复

我认为有一些方法可以通过启动后台线程来实现这一点,但我不确定这是我想要走的路

有人对什么是最佳方法有什么建议吗?
我没有嫁给grails,我使用它的原因如下。如果有一个桌面应用程序框架,我以后也可以很容易地在上面创建一个web界面,我肯定会接受的


提前感谢。

在服务中创建您的对象,并且(默认情况下):


就web UI而言,Grails绝对是一个不错的选择。 然后,异步操作可以通过Ajax调用来处理,因为您不应该阻止控制器等待结果。 以下[介绍][1]有一些很好的例子


1:

这不是关于从浏览器到grails服务器的异步通信,而是关于从服务器到第三方的异步通信。是的。我明白了,但这迫使异步模型一路走下去,因为阻塞控制器很少是个好主意。慢速异步第三方不一定使控制器同步。我认为,事实正好相反:异步API本身迫使UI设计考虑异步操作。
static scope = "singleton"