对我来说保留这种昂贵的数据结构有什么好的低影响方式?

时间:2013-05-02 14:58:22

标签: java-ee

我正在使用使用Java EE编写的成熟生产代码。为了处理一个不寻常的数据条件,我已经插入了一个有效的健全性检查,但是增加了一些不必要的成本。架构的工作原理如下:

  1. 在第1页上,用户从列表中选择一个项目,然后单击“执行”按钮。
  2. 对Page 1的视图范围控制器bean的Ajax调用会创建一个昂贵的数据对象(BEDO),然后进行完整性检查以确保它有效。
  3. 如果BEDO有效,第1页将通过Javascript转发给第2页。
  4. 第2页的视图范围支持bean创建了一个BEDO的新副本,与用于完整性检查的副本相同。
  5. 我创造了两次相同的BEDO,只是扔掉了第一个。我想找出一个可以减少处理周期的解决方案。

    所以我的问题是,将BEDO从控制器bean转移到支持bean的最佳低影响方式是什么?让Page 1的控制器访问辅助bean是行不通的;因为Page 2的支持bean是视图范围的,所以当用户实际被发送到第2页时,它会重新创建。

    我可以改变支持bean的范围,但我不愿意。因为这是成熟的生产代码,所以我非常谨慎地引入回归错误。这就是我的意思"低影响&#34 ;;我不想贪图现有的架构,而不是我不得不这样做。

1 个答案:

答案 0 :(得分:1)

获胜者是...... Flash范围。

一方面就是这样:

FacesContext.getCurrentInstance().getExternalContext().getFlash().put("bedo", bedo);

另一方面:

Object bedoObj = FacesContext.getCurrentInstance().getExternalContext().getFlash().get("bedo");
if (bedoObj != null && bedoObj instanceof BigExpensiveDataObject) {
   ...

......我完全得到了我正在寻找的行为。