据我所知,Java中LISTEN/NOTIFY的JDBC驱动程序不支持真正的事件驱动通知.您必须经常轮询数据库以查看是否有新通知.
我有什么选择在Java中(可能是除了JDBC以外的东西?),如果有的话,在没有轮询的情况下以真正的事件驱动方式异步获取通知?
问候我想做的事情就像触发器或监听器(我不知道是什么)将在特定的数据库表上监听,并且每个新记录都插在这个表上,做一些java代码,我的意思是它检测到如果有可能我需要一些关于如何完成这个过程的指南,那么插入了一条新记录并获取了它的数据?
我正在使用Spring-Hibernate-PostgreSQL
我有一个jsf视图,它显示了一个远程检索的表中的托管bean(viewscope)的一些数据.
目前,使用primefaces poll组件通过客户端视图轮询更新数据.
这还不够,因为要向客户端发送大量流量,现在Primefaces支持服务器推送我只想重新加载数据并在数据发生变化时将其推送到客户端视图.
这应该通过从Web层到应用层的轮询来实现,调用类似的方法hasChanged(...).如果数据已更改,则Web层会将通知推送到客户端以重新加载数据.
当前的客户投票
客户端>> web-tier >> app-tier
客户端通过ajax向web层询问数据,该数据再次向app-tier请求数据和更新视图
希望网络层轮询和推送
客户端<< web-tier >> app-tier
如果数据已更改并代表重新加载并通知(推送)客户端更新视图,则web-tier轮询应用层
处理办法:
在Web层中实现托管bean轮询的最佳方法是什么?
编辑:
架构:(3层)

很快,我有一个实体映射到 DB (Oracle) 中的视图,并启用了第二级缓存(只读策略)——ehcache。
如果我手动更新数据库中的某些列 - 缓存将不会更新。
我没有找到任何方法来做到这一点。仅当更新将通过 Hibernate 实体完成时。
我可以以某种方式实现这个功能吗?
也许工作来监视表(或视图)?或者也许有一些方法可以通知 Hibernate 关于具体表中 DB 的变化。
感谢未来的答案!
我正在为几十万个产品构建一个postgres 数据库。我将设置一个索引(Solr 或 ElasticSearch)来改进复杂搜索查询的查询时间。
现在的重点是如何让索引与数据库同步?
在过去,我有一种应用程序会定期轮询数据库以检查应该完成的更新,但我会有一个过时的索引状态时间(从数据库更新到索引更新拉取)。
我更喜欢一种解决方案,其中数据库会通知我的应用程序(java 应用程序)数据库中的某些内容已更改,然后应用程序将决定是否需要更新索引。更准确地说,我将构建一种生产者和消费者结构,希望副本能够从 postgres 接收到某些更改的通知,如果这与索引的数据有关,则它会存储在一堆待办事项中。消费者将使用这个堆栈并构建要存储到索引中的文档。
一种解决方案是编写一种副本端点,在该端点中,应用程序将充当用于从原始数据库复制数据的 postgres 实例。有人对这种方法有经验吗?
对于这个问题,我还有哪些其他解决方案?