java – Xpages:managedBean经常“丢失”全局Domino Session对
发布时间:2020-12-15 04:29:30 所属栏目:Java 来源:网络整理
导读:我正在为Xpages应用程序构建managedBean.目前,bean在视图范围的faces-config中注册,因为我需要它在每个页面加载时重新初始化(见下文). bean的构造函数初始化了几个类变量,这些变量的值在整个类的代码中被引用.其中一个变量是Domino会话对象,另一个例子是当前
我正在为Xpages应用程序构建managedBean.目前,bean在视图范围的faces-config中注册,因为我需要它在每个页面加载时重新初始化(见下文). bean的构造函数初始化了几个类变量,这些变量的值在整个类的代码中被引用.其中一个变量是Domino会话对象,另一个例子是当前文档数据源:
private Session session; private DominoDocument ds; 两者都在构造函数中初始化为 session=DominoUtils.getCurrentSession(); ds=(DominoDocument) resolveVariable(dsName); (resolveVariable是一个内部帮助器方法;不要认为我需要在这里解释一下) 除了构造函数和各种帮助器方法之外,在同一个类中还有一些其他公共方法在按钮单击时调用.大多数这些附加方法都使用相同的文档数据源以及当前的会话对象. 发生的事情是我的其他方法可以访问和使用全局数据源对象(ds)但是如果它们尝试访问全局会话对象则会引发错误;进一步向下堆栈跟踪我发现似乎导致错误: NotesException: Object has been removed or recycled 我的代码现在根本没有回收,会话对象必须在途中丢失. 作为一种解决方法,我开始将会话对象从SSJS传递到每个方法中 public void testMethod(Session s){ 哪个工作正常.但是为什么bean对象会记住所有其他对象和变量而忘记全局会话? BTW:我试图将我的managedBean绑定到会话范围,但这根本没有帮助.是的,我甚至在做出改变之后重新启动了整个服务器…… 解决方法
来自运行时的所有Domino对象都在每个请求结束时被回收.如果你想访问其中的任何一个,你应该在需要时从环境中重新获取它们,而不是在你的意思中存储引用(你可以使用瞬态引用,但你不会获得太多).因此,快速解决方法是使用DominoUtils.getCurrentSession()调用替换类中会话的每个用法.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |