在ATG中$ scope = global是什么意思?

Janaka priyadarshana

根据文档,

全局:组件在所有用户之间共享。会话:向每个用户提供了该组件的单独实例

这是否意味着对于全局组件而言,整个原子核系统只有一个实例。如果这是真的,那么它对于诸如'/ atg / dynamo / transaction / TransactionManager'之类的组件以及大多数液滴来说如何有效?因为这些组件一次被多个用户使用

编辑:

我了解“ TransactionManager”的行为。根据定义,应该有一个事务管理器,并且他应该为每个事务保留事务对象。但是我的问题对于诸如foreach,switch之类的液滴仍然有效(大多数液滴在全局范围内)如果整个核系统只有一个对应类的实例,这是否会对性能产生不良影响?

radimpe

从历史上看,ATG提供三种不同类型的示波器。现在增加到了5个,增加了Window(通常仅在CSC应用程序中使用,因此请尽量不要使用它)和Prototype(增加以支持Endeca Cartridge Handlers的添加)。

正如您从文档中突出显示的那样,全局组件一次实例化并由所有用户共享,而会话组件为给定会话创建一次,并由该会话的所有请求共享。类似地,为使用它的每个请求重新实例化一个请求范围的组件。

从性能的角度来看,解析到现有组件(例如,全局范围内的组件,例如ForEach)的路径需要花费一些时间,但是实例化一个新对象(换句话说,是请求范围内的组件)则相对昂贵。

因此,对于一个ForEachdroplet,它被实例化一次,但是在service方法中,它实际上是从请求中提取参数:

String elementName = pRequest.getParameter(ELEMENT_NAME);

这意味着您的全局范围内的组件是线程安全的,因为它仅从当前请求中获取参数。因此,通常,如果一个组件可以由多个用户共享,而不必担心同步,则应在全局范围内与会话或请求范围内进行同步。(经验法则应该是,如果您的液滴要求范围很广,则您可能做错了)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章