Чтобы реализовать клиентские уведомления в приложении на основе AJAX, которое я разрабатываю с Grails (и GWT), я реализовал сервисный метод, который будет блокировать до тех пор, пока он не будет сигнализирован.Я использую объект монитора для ожидания сигнала.Получив сигнал, поток будет запрашивать базу данных о новых объектах и затем возвращать эти объекты в браузер.
Он отлично работает с базой данных памяти, но не так, как я ожидаю, когда использую коннектор базы данных MySQL.Что происходит: всякий раз, когда я выполняю вызов findAllBy ..., он находит только объекты, созданные до начала запроса.
Жизненный цикл моего метода обслуживания
- запрос от клиента
- Hibernate-сеанс создается Grails
- сервисом, запрашивающим базу данных для новых объектов
- , если их нет: wait
- входящий сигнал: запрашивать базу данных для новых объектов( НЕ ПОЛУЧАЕТ НОВЫХ ОБЪЕКТОВ при использовании MySQL, отлично работает с памятью db)
Журнал запросов mysql показывает все запросы, как и ожидалось, но результат findAllBy ... isпросто пустой массив.
Я отключил запрос и кэш второго уровня.Поведение одинаково, независимо от того, подключено ли соединение для передачи данных или нет.
Что я делаю не так?Должен ли я закрыть сеанс Hibernate?Промойте это?Использовать транзакцию для моих запросов?Или как-то применить метод findAllBy ... для запроса базы данных?