我被困在了需要在Java代码中获得数据库更改的某个时刻。请求是使任何数据库表中的任何记录更新、添加、删除;应该被Java程序识别。如何实现JMS?还是Java线程?
更新:感谢各位的支持,我实际上正在使用Oracle作为DB和WebLogic10.3研讨会。实际上,我想从一个只有阅读权限的表中获得更新,所以伙计们,你们都有什么建议?我不能更新数据库。我唯一能做的就是读取DB,如果表中有任何更改,我必须获得某些数据行已经添加/删除或更新的信息/通知。
发布于 2010-02-27 18:16:10
除非数据库可以向Java发送消息,否则必须有一个线程轮询。
一个更好、更有效的模型是在变化中触发事件。在内部运行Java的数据库(例如,Oracle)可以做到这一点。
发布于 2010-02-27 18:25:51
我们通过使用EJB计时器任务轮询DB来完成这项工作。本质上,我们有一个状态字段,我们在处理该行时更新该状态。
因此,EJB计时器线程调用一个过程,该过程捕获标记为“未处理”的行。
肮脏,但也很简单和健壮。特别是在崩溃或其他什么之后,它仍然可以从崩溃的地方恢复,而不需要太多的复杂性。
缺点是DB上的负载浪费,而且响应时间也是有限的(可能需要秒)。
发布于 2010-02-27 18:20:33
我们通过在数据库表中添加触发器来实现这一点,数据库表调用可执行文件来发出Tib Rendezvous消息,所有感兴趣的Java应用程序都会接收该消息。
然而,实现此IMHO的理想方法是完全控制应用程序级别上的所有数据库写入,并在此时通知任何感兴趣方(通过多播、Tib等)。实际上,在有许多不同系统的情况下,这并不总是可能的。
https://stackoverflow.com/questions/2348416
复制相似问题