Grails - асинхронная связь со сторонним API - PullRequest
0 голосов
/ 22 декабря 2010


Я экспериментирую с Grails, чтобы взаимодействовать с платформой онлайн-торговли.
в частности, Interactive Brokers (IB) http://interactivebrokers.com/en/p.php?f=programInterface&ib_entity=llc

То, как работает API, заключается в том, что вам необходимо запустить их клиентскую программу Trader Workstation (TWS http://interactivebrokers.com/en/p.php?f=tws&ib_entity=llc)), а затем мы используем API для работы. Потребление API в основном включает создание объекта-посредника вызов функции-члена connect () (это устанавливает соединение через локальный порт с программным обеспечением TWS) и вызов чего-то вроде getData ()

Значением grails в этом сценарии являются функции GORM и предоставляемая веб-инфраструктура. Я хочу иметь возможность определять объекты, абстрагированные от реализации БД, легко выполнять операции персистентности и легко предоставлять пользователям интерфейс для выполнения CRUD и пользовательских действий.

Моя задача заключается в том, что IB API использует асинхронную связь для запросов и ответов. т.е. когда я вызываю getData (), API знает, как использовать функцию обратного вызова dataResults (), когда он готов их отправить. Для того чтобы dataResults () мог вызываться, созданный мною объект-посредник все еще должен присутствовать для получения ответа.
Внутри функции контроллера, если я создаю объект посредника и вызываю getData (), когда запрос завершается, объект посредника, очевидно, также исчезает. Поэтому я никогда не смогу получить ответ.

Я думаю, что мог бы быть какой-то способ сделать это, начав фоновые потоки, но я не уверен, что это путь, по которому я хочу идти.

У кого-нибудь есть какие-либо рекомендации относительно того, какой подход лучше?
Я не женат на Граале, причины, по которым я его использую, указаны выше. Если есть фреймворк для настольных приложений, который я также легко могу сделать веб-интерфейсом позже, я определенно открыт для этого.

спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 22 декабря 2010

Создайте свой объект в Service и сделайте Service singleton (что по умолчанию):

static scope = "singleton"
0 голосов
/ 22 декабря 2010

С точки зрения веб-интерфейса Grails, безусловно, является хорошим выбором.Затем асинхронные операции могут быть обработаны Ajax-вызовами, так как вам не следует блокировать контроллер, ожидающий результатов.Следующая [презентация] [1] имеет несколько хороших примеров

1: http://skillsmatter.com/podcast/java-jee/high-volume-scalable-ajax-with-grails

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...