加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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){
??System.out.println(“我的名字是”s.getEffectiveUserName());
}

哪个工作正常.但是为什么bean对象会记住所有其他对象和变量而忘记全局会话?

BTW:我试图将我的managedBean绑定到会话范围,但这根本没有帮助.是的,我甚至在做出改变之后重新启动了整个服务器……

解决方法

来自运行时的所有Domino对象都在每个请求结束时被回收.如果你想访问其中的任何一个,你应该在需要时从环境中重新获取它们,而不是在你的意思中存储引用(你可以使用瞬态引用,但你不会获得太多).因此,快速解决方法是使用DominoUtils.getCurrentSession()调用替换类中会话的每个用法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读