【发布时间】:2017-06-12 02:53:06
【问题描述】:
我们有一个 Oracle 数据库,其中包含一些城市和 地点等。
我们有一个可以操作这些数据的网络系统。
我们还有一个桌面客户端应用程序正在使用这些 数据。
为了提高我们的桌面应用程序性能并减少对 DAO 层的无用请求,我们在桌面应用程序中实现了一些 Singleton 类来获取提到的城市、地点等在用户打开他/她的桌面应用程序之后,只有一次数据。
最近我们收到了客户的请求,为什么当客户端桌面应用程序上线并启动并运行时,我们看不到我们使用 Web 应用程序所做的更改。他们抱怨为什么必须关闭桌面应用并再次打开才能看到更改。
我们知道问题出在那些 Singleton 类,但我们不想更改它们,因为当它们不存在时,我们的系统会产生巨大的开销.为了解决这个问题,我们考虑了多种解决方案:
- 在数据库中创建一个表,其整数列名称类似于我们的数据列(城市、地点等),并在有更新时自动递增值以使用它跟踪更改(轻量级解决方案)
- 使用数据库功能
- 一个通知系统,在发生更新时通知客户端应用程序。
- 数据库内部的一种缓存机制,用于缓存那些最近更改的表并在我们的用户有类似请求时为他们提供服务
这是我们的堆栈:
- 我们的桌面应用是swing应用
- 我们的 Web 应用程序是 JSF
- 我们的 JSF 和 swing 业务层都是 EJB
- 我们的 JSF 和 swing 的 Dao 层是 Eclipse-Link
您认为解决此问题的最佳做法是什么?
【问题讨论】:
-
您的解决方案 #3 对我来说似乎是最佳选择,前提是数据不会经常更改。
-
@Michael 问题是我们有单独的系统,我们不知道如何实现它。我们也不想放计时器
-
“我们不知道如何实现这个”对于 StackOverflow 来说是题外话
-
一个简单的解决方案怎么样5。添加一个
REFRESH按钮,类似于将重新加载数据的最后状态的浏览器。这将解决抱怨为什么他们必须关闭桌面应用程序并再次打开它,并且不需要更改数据捕获、通知等。 -
扩展@MarmiteBomber:如果您使用的是单例,您可以在刷新时轻松“重新初始化”单例(即运行相同的“启动时”代码)。这样,您可以模拟程序重启,但用户永远不会注意到它。
标签: java oracle database-design oracle11g ejb-3.1