应用程序缓存
任何具有ADF业务组件基础知识的ADF开发人员都应该熟悉下图:
它代表运行时ADF业务组件的核心构建块。 有一个包含视图对象实例的根应用程序模块实例。 视图对象实例可能由存储在实体集合或换句话说就是实体缓存中的实体对象备份。 根应用程序模块可能还包含嵌套的应用程序模块,而这些模块又包含它们自己的视图对象实例。 单个根AM中的所有视图对象实例和嵌套应用程序模块共享同一实体缓存,这一点非常重要。 问题是如何?
上图代表一个非常简单的情况。 只有一个用户会话,并且假定该应用程序中只有一个根应用程序模块。 但是,ADF BC假定每个用户会话都有其自己的实体缓存。 那么,是什么将我的应用程序模块链接到我的并且只有我的实体缓存?
这是DB Transaction对象出现的地方:
它是一个内部框架对象,实际上包含实体缓存,并将其提供给在此DB Transaction对象中注册的所有应用程序模块。 此外 数据库事务对象包含一个数据库连接 ,它提供所有与jdbc相关的服务,例如创建和执行可调用语句。 许多开发人员认为实际的应用程序模块负责包含实体缓存,保持数据库连接以及与数据库进行交互。 这不是真的。 一个应用程序模块只是附加到使用实体高速缓存的DB事务对象上,并从中获取数据库连接。 “附加”一词意味着可能有许多根应用程序模块引用同一数据库事务对象。
在那种情况下,交易称为“共享” 。 附加到它的每个应用程序模块都使用相同的数据库连接和相同的实体缓存。 有一个普遍的神话,一个根应用程序模块的任何实例总是需要一个专用的数据库连接。 显然,并非总是如此。
此功能基于jbo.shared.txn AM属性。 这意味着具有该属性值的所有根应用程序模块将共享相同的数据库事务对象,因此也将共享相同的数据库连接和实体缓存。 共享应用程序模块通常使用“共享事务”功能,因此,通过为其jbo.shared.txn属性设置相同的字符串值,我们可以强制它们共享相同的数据库连接。
而已!
翻译自: https://www.javacodegeeks.com/2016/05/application-modules-entity-cache.html
应用程序缓存