最近,有人问我有关应用程序模块池的有趣问题。 众所周知,AM池包含用户会话引用的应用程序模块实例,这允许会话在后续请求时从池中获取完全相同的AM实例。
如果应用程序中有多个根应用程序模块,那么每个模块都将拥有自己的AM池:
以及当应用程序处理同一根应用程序模块的多个实例时的情况。 例如,任何类型的UI Shell应用程序,其中每个选项卡运行具有隔离的数据控制范围的任务流。
在这种情况下,用户会话引用池中的多个AM实例。 对于此特定示例,一个会话引用的池中将有四个AM。 一个用于菜单,三个用于选项卡。
因此, 问题在于框架如何将所有内容弄乱,并确切知道每个选项卡应使用池中的哪个AM实例。 答案是用户会话未直接引用池中的应用程序模块实例。 而是由每个DataControl实例唯一的SessionCookie对象引用它。 由于应用程序中的任务流已经在隔离的数据控制范围内运行,因此每个任务流都有一个单独的DataControl实例。
而已!
翻译自: https://www.javacodegeeks.com/2014/10/user-sessions-data-controls-and-am-pooling.html