应用程序模块和实体缓存

任何具有ADF业务组件基础知识的ADF开发人员都应该熟悉下图:

屏幕截图2016年4月30日下午4.15.20

它代表运行时ADF业务组件的核心构建块。 有一个包含视图对象实例的根应用程序模块实例。 视图对象实例可能由存储在实体集合或换句话说就是实体缓存中实体对象备份 根应用程序模块可能还包含嵌套的应用程序模块,而嵌套的应用程序模块又包含它们自己的视图对象实例。 单个根AM中的所有视图对象实例和嵌套应用程序模块共享同一实体缓存,这一点非常重要。 问题是如何?

上图代表一个非常简单的情况。 只有一个用户会话,并且假定应用程序中只有一个根应用程序模块。 但是,ADF BC假定每个用户会话都有其自己的实体缓存。 那么,是什么将我的应用程序模块链接到我的并且只有我的实体缓存?

这是DB Transaction对象出现的地方:

它是一个内部框架对象,实际上包含实体缓存,并将其提供给在此DB Transaction对象中注册的所有应用程序模块。 此外 屏幕截图2016年4月30日下午4.18.12 数据库事务对象包含一个数据库连接 ,它提供所有与jdbc相关的服务,例如创建和执行可调用语句。 许多开发人员认为,实际的应用程序模块负责包含实体缓存,保持数据库连接以及与数据库进行交互。 这不是真的。 一个应用程序模块只是附加到使用实体缓存的DB事务对象上,并从中获取数据库连接。 “附加”一词意味着可能有许多根应用程序模块引用同一数据库事务对象。

屏幕截图2016-04-30 at 4.21.32 PM

在那种情况下,该交易称为“共享” 。 连接到它的每个应用程序模块都使用相同的数据库连接和相同的实体缓存。 有一个普遍的神话,一个根应用程序模块的任何实例总是需要一个专用的数据库连接。 显然,并非总是如此。

此功能基于jbo.shared.txn AM属性。 这意味着具有此属性的相同值的所有根应用程序模块将共享相同的数据库事务对象,并因此共享相同的数据库连接和实体缓存。 共享应用程序模块通常使用“共享事务”功能,因此,通过为其jbo.shared.txn属性设置相同的字符串值,我们可以强制它们共享相同的数据库连接。

而已!

翻译自: https://www.javacodegeeks.com/2016/05/application-modules-entity-cache.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值