我们有一个Oracle数据库,可以保存一些城市的数据 地方等。
我们有一个可以操纵这些数据的网络系统。
我们还有一个桌面客户端应用程序正在使用它们 数据
为了增加我们的桌面应用程序 性能 并减少对DAO图层的无用请求,我们在桌面应用程序中实现了一些Singleton类来获取提到的城市,地点等用户打开他/她的桌面应用程序后,数据仅一次。
最近,当客户端桌面应用程序处于活动状态并启动并运行时,我们收到客户的请求,说明为什么我们看不到使用Web应用程序所做的更改。他们抱怨为什么他们必须关闭桌面应用并再次打开才能看到更改。
我们知道问题是那些 Singleton类 但我们不想更改它们,因为当它们不存在时,它们将成为我们系统中的巨大开销。为了解决这个问题,我们考虑了多种解决方案:
以下是我们的筹码:
您认为解决此问题的最佳做法是什么?
答案 0 :(得分:1)
Oracle有一个名为"数据库更改通知"可以用来在读取大多数表时进行通知。看起来这个功能非常适合满足您的要求。该文档的链接是here。
简而言之,它的工作方式是桌面应用程序中的JDBC瘦驱动程序将打开一个端口,Oracle数据库将连接到该端口,并使用此连接在数据更改时推送通知。然后,您可以通过事件/侦听器API获取回调,并可以刷新缓存。
此通知机制专为主要读取的数据而设计,换句话说,数据不会经常更改,否则无论如何都不值得缓存数据。