XPages:应用程序范围变量的生命周期是多少?

mik*_*_x_ 2 scope lotus-notes lotus-domino xpages

A. xpages中应用程序范围变量的实际生命周期是多少?

B.如有必要,我该如何删除/重置?(我找不到像"重新部署"或"启动停止应用程序"这样的东西,所以我必须重新启动网络服务器,用代码完成,只需从设计师或其他任何东西重新保存我的应用程序......? )

Tim*_*ony 9

答:各不相同.您可以在XSP属性中设置显式超时(在Designer 9中显示为Application Configuration类别下的设计元素;在8.5.x中,您需要通过Package Explorer导航到WebContent/WEB-INF/xsp.properties).否则,当Domino认为"应该"时,它会超时.这是基于应用程序的使用,因此应用程序的使用越多,除非重新启动HTTP任务(或Domino本身),否则范围将越不可能过期.

B.要销毁整个范围,请重新启动HTTP(或完全重启Domino).注意:不是

Tell HTTP Restart

...仅重新加载任务的某些部分,并且不重新加载JVM.您需要实际重启任务:

Tell HTTP Quit
Load HTTP
Run Code Online (Sandbox Code Playgroud)

要么

Restart Task HTTP

任务重新启动后,下次访问应用程序时将实例化一个全新的应用程序范围.

您还可以有选择地清理范围.XPage中的每个范围(请求/视图/会话/应用程序)都是Java Map的实例,因此每个范围都支持该接口中定义的所有方法.

我建议只删除特定项目,例如:

applicationScope.remove("myBean");

如果清除整个范围而不实际破坏范围本身(见上文),则可能导致不可预测的行为,因为平台还将自己的信息存储在应用程序范围内(这也适用于其他范围).您应该只删除添加的范围条目.


Mic*_*aiz 5

由于名称应用程序作用域变量已经告诉您,如果在 xsp.properties 中进行了定义,则其生命周期与应用程序运行时一样长,如果您未定义任何内容,则标准持续时间为 30 分钟。或来自IBM

applicationScope 持续时间是 WebModule 持续时间。Web 模块在第一个请求到来时启动,并最终在一段不活动时间(默认为 30 分钟)后被丢弃。应用程序的每个用户在创建这些变量后都可以访问这些变量,因此这些变量没有隐私。applicationScope 只应用于必须在许多 XPage 之间共享的数据。

如果您使用应用程序范围变量进行开发,您可以通过在设计器中清除应用程序来重置它们,转到:Projekt => 清除...

或者如果这没有帮助,请尝试以下Tommy Valand的代码:

function clearMap( map:Map ){
 // Get iterator for the keys
 var iterator = map.keySet().iterator();

 // Remove all items
 while( iterator.hasNext() ){
  map.remove( iterator.next() );
 }
}
Run Code Online (Sandbox Code Playgroud)

这将允许您在运行时重置应用程序范围,这对于调试和测试非常有用。

  • 在您的应用程序中安装 [XPage 调试工具栏](https://demo.linqed.eu/debugToolbar/debugToolbar.nsf/demoPage.xsp),以便在开发时轻松清除作用域变量。它使用与此类似的代码。 (3认同)