当有一些更新时,单身人士模式会产生一些问题

时间:2017-01-26 15:19:43

标签: java oracle database-design oracle11g ejb-3.1

  

我们有一个Oracle数据库,可以保存一些城市的数据   地方等。

     

我们有一个可以操纵这些数据的网络系统。

     

我们还有一个桌面客户端应用程序正在使用它们   数据

为了增加我们的桌面应用程序 性能 并减少对DAO图层的无用请求,我们在桌面应用程序中实现了一些Singleton类来获取提到的城市,地点等用户打开他/她的桌面应用程序后,数据仅一次

最近,当客户端桌面应用程序处于活动状态并启动并运行时,我们收到客户的请求,说明为什么我们看不到使用Web应用程序所做的更改。他们抱怨为什么他们必须关闭桌面应用并再次打开才能看到更改。

我们知道问题是那些 Singleton类 但我们不想更改它们,因为当它们不存在时,它们将成为我们系统中的巨大开销。为了解决这个问题,我们考虑了多种解决方案:

  1. 在数据库中创建一个表,其中整数列名与我们的数据列(城市,地点等)类似,并且当有更新用于使用它跟踪更改时自动增加值(轻量级解决方案)
  2. 使用数据库功能
  3. 一个通知系统,它会在发生更新时通知客户端应用程序。
  4. 数据库内部的缓存机制,用于缓存那些最近更改的表,并在用户遇到类似请求时为其提供服务
  5. 以下是我们的筹码:

    • 我们的桌面应用程序 swing 应用程序
    • 我们的Web应用程序是JSF
    • 我们JSF和swing的业务层是EJB
    • 我们用于JSF和swing的Dao层是Eclipse-Link

    您认为解决此问题的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

Oracle有一个名为"数据库更改通知"可以用来在读取大多数表时进行通知。看起来这个功能非常适合满足您的要求。该文档的链接是here

简而言之,它的工作方式是桌面应用程序中的JDBC瘦驱动程序将打开一个端口,Oracle数据库将连接到该端口,并使用此连接在数据更改时推送通知。然后,您可以通过事件/侦听器API获取回调,并可以刷新缓存。

此通知机制专为主要读取的数据而设计,换句话说,数据不会经常更改,否则无论如何都不值得缓存数据。