static和瞬态_具有瞬态属性的视图对象的钝化和激活

static和瞬态

在应用程序模块的钝化/激活周期内,框架也将钝化并激活视图对象。 通常,框架保存有关VO状态,当前行,绑定变量值等的信息。 但是没有数据。 激活视图对象后,将重新执行VO的查询,并重新获取数据。 在大多数情况下,查询执行不是在激活阶段期间或之后执行的,而是推迟到真正使用视图对象之前执行。 这种行为是很合逻辑的。 假设我们的应用程序由几个页面组成,这些页面代表不同视图对象的数据。 如果我们从同一页面向服务器发送请求,则将执行仅在该页面上使用的VO。 其他页面上使用的所有其他视图对象也将被钝化和激活。 但是除非我们要求框架通过导航到特定页面来执行此操作,否则它们将不会重新执行。 那太酷了! 这意味着我们不会执行不必​​要的查询,也不会浪费我们的内存。 但是在某些情况下,框架在激活阶段执行VO的查询执行却不会打扰我们是否真正使用VO。

其中一种情况是有关使用瞬态VO的属性。 常见的建议是不要钝化此类属性。 但是,有时会使用瞬时属性来存储一些自定义数据,并使用钝化/激活机制作为保存此数据并使之保持活动状态的便捷方法。 请谨慎使用此方法。 如果瞬态属性的任何值被钝化,则框架将在视图对象激活期间执行查询。

让我们考虑一个包含两页的示例应用程序-员工和部门。

屏幕截图2013年7月19日下午2.31.00

我们使用基于SQL的只读视图对象浏览两个页面上的数据:

屏幕截图2013年7月19日下午2.35.18

屏幕截图2013年7月19日下午2.36.18

因此,所有VO的属性都是瞬态的,我们不会对其进行钝化。 应用程序模块池已禁用:

屏幕截图2013年7月19日下午2.43.59

利用ODLA探索从“员工”页面发送的请求,我们可以看到以下内容:

屏幕截图2013年7月18日下午6.55.10

在应用程序模块激活阶段没有任何查询执行。 VEmployees查询已按预期在准备模型阶段执行。

现在让我们更改VDepartments属性之一的钝化参数:

屏幕截图2013年7月19日下午2.55.14

我将使用“部门”页面启动该应用程序,以便执行VDepartments VO,然后导航到“员工”页面。 从雇员页面发送下一个请求(例如对表进行排序),我们将获得以下图片:

屏幕截图2013年7月18日下午6.32.44

显然,除了执行VEmployees查询外,框架还执行VDepartments。 VDepartments在激活应用程序模块期间执行。 我们真的需要吗? 我们在浪费CPU资源来执行不必要的查询,并在浪费内存来存储未使用的视图对象的查询集合。 该框架针对具有任何动态属性的视图对象和设置了保留视图链接访问器的主视图对象,演示了相同的行为。 因此,请注意这些功能。

而已!

参考: ADF实践博客上的JCG合作伙伴 Eugene Fedorenko提供的具有瞬态属性的视图对象的钝化和激活

翻译自: https://www.javacodegeeks.com/2013/07/passivation-and-activation-of-view-objects-with-transient-attributes.html

static和瞬态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值