Правильный способ ожидания завершения ввода / вывода sql - PullRequest
0 голосов
/ 06 января 2012

У кого-нибудь есть простой пример кода, показывающий, как работает netty 3.2.7? должен правильно обрабатывать SQL-запрос в следующем сценарии:

Метод вызова передает сообщение на сервер messageReceived метод. Метод messageRectained выполняет SQL-запрос и получает результат. Вызывающий метод не должен продолжать обработку до получает результат запроса sql.

В частности, пример того, как netty ожидает ввод / вывод (SQL-запрос) для завершения был бы очень полезен.

Ответы [ 2 ]

0 голосов
/ 07 января 2012

Норман, спасибо за дополнительную информацию.Я думаю, что это может решить проблему, но это включает в себя добавление дополнительного обработчика, который на самом деле не требуется и будет добавлен исключительно для гарантии того, что SQL-запрос завершен (без функциональности).

Я искал«более стандартным» способом и найдена ссылка «http://docs.jboss.org/netty/3.2/api/org/jboss/netty/channel/ChannelFuture.html"», в которой говорится: «Предоставляются различные методы, позволяющие вам проверить, была ли завершена операция ввода-вывода, дождаться завершения и получить результат операции ввода-вывода.Это также позволяет вам добавлять ChannelFutureListeners, чтобы вы могли получать уведомления о завершении операции ввода / вывода..... "

В нем также говорится, что предпочтение addListener (ChannelFutureListener) нужно ожидать (), но я не знаю, как это реализовать. Если кто-нибудь знает, как это реализовать, чтобы дождаться результата ввода-выводаo SQL-запрос для его завершения был бы очень полезен.

Для решения проблемы в методе sendMessage я использовал

lastWriteFuture = connector.write(message);
if (lastWriteFuture != null) {
      lastWriteFuture.awaitUninterruptibly();
}

Это работает - он ожидает завершения SQL-запроса и затем повторяетзвонящему.

0 голосов
/ 06 января 2012

Вам необходимо добавить ExecutionHandler перед вашим обработчиком, который выполняет SQL-запрос. Вот и все ...

В противном случае вы заблокируете ваш рабочий поток

...