【发布时间】:2011-07-21 20:23:52
【问题描述】:
为了在我正在使用 Grails(和 GWT)开发的 AJAX 驱动的应用程序中实现客户端通知,我实现了一个服务方法,该方法将在收到信号之前一直阻塞。我正在使用监视器对象来等待信号。一旦发出信号,线程将在数据库中查询新对象,然后将实体返回给浏览器。
它在内存数据库上工作得非常好,但在我使用 MySQL 数据库连接器时却不像我预期的那样。会发生什么:每当我调用 findAllBy... 时,它只会找到在请求开始之前创建的对象。
我的服务方法的生命周期
- 来自客户的请求
- Grails 正在创建 Hibernate 会话
- 为新对象服务查询数据库
- 如果没有:等待
- 传入信号:查询数据库中的新对象(DOES NOT GET NEW OBJECTS 使用 MySQL 时,与 memory db 一起工作正常)
mysql 查询日志按预期显示所有查询,但 findAllBy... 的结果只是一个空数组。
我禁用了查询和二级缓存。无论数据连接是否池化,行为都是相同的。
我做错了什么?我应该关闭休眠会话吗?冲洗吗?为我的查询使用交易?或者以某种方式强制使用 findAllBy... 方法来查询数据库?
【问题讨论】:
标签: mysql hibernate session grails concurrency