java - Grails: comunicación asíncrona con API de terceros
frameworks concurrency (2)
En términos de UI web Grails es definitivamente una buena opción. Entonces, las operaciones asincrónicas podrían ser manejadas por llamadas Ajax ya que no debería bloquear el controlador esperando resultados. La siguiente [presentación] [1] tiene algunos buenos ejemplos
1: http://skillsmatter.com/podcast/java-jee/high-volume-scalable-ajax-with-grails
Estoy experimentando con Grails para poder interactuar con una plataforma de comercio en línea.
específicamente Interactive Brokers (IB) http://interactivebrokers.com/en/p.php?f=programInterface&ib_entity=llc
La forma en que funciona la API es que necesita ejecutar su programa cliente, Trader Workstation (TWS http://interactivebrokers.com/en/p.php?f=tws&ib_entity=llc ) y luego consumimos la API para hacer cosas. Consumir la API básicamente implica crear un objeto "intermediario", llamar a una función miembro de connect () (esto hace una conexión de puerto local al software TWS) y llamar a algo como getData ()
El valor de los griales en este escenario son las características GORM y el marco web proporcionado. Quiero ser capaz de definir objetos extraídos de la implementación de db, realizar fácilmente operaciones de persistencia y facilitar a los usuarios una interfaz de usuario para realizar acciones personalizadas y CRUD.
Mi desafío es que la API de IB utiliza comunicación asincrónica para solicitudes y respuestas. es decir, cuando invoco getData (), la API sabe usar la función de devolución de datos dataResults () cuando está lista para enviarlos. Para que dataResults () sea invocable, el objeto de intermediario que creé debe estar presente para recibir la respuesta.
Dentro de una función de controlador, si creo un objeto de intermediario y llamo getData (), cuando la solicitud finaliza, el objeto de intermediario también desaparece. Por lo tanto, nunca podré recibir la respuesta.
Creo que puede haber alguna manera de hacer esto lanzando hilos de fondo, pero no estoy seguro de que este sea el camino que quiero seguir.
¿Alguien tiene alguna recomendación sobre cuál es el mejor enfoque?
No estoy casado con Grails, las razones por las que lo uso están arriba. Si hay un marco de aplicación de escritorio que también puedo hacer fácilmente una interfaz web más adelante, definitivamente estoy abierto a eso.
gracias por adelantado.
Crea tu objeto en Servicio y crea el servicio singleton (que es por defecto):
static scope = "singleton"