首页 文章

更新Apache Ignite WebSession属性

提问于
浏览
0

我们目前正在将Apache Ignite集成到我们的应用程序中,以在群集中共享会话 . 见Ignite docs . 此时,我们可以成功共享两个本地tomcat实例之间的会话,但是有一个用例,Ignite不支持(似乎) .

在我们的应用程序中,我们有一个名为“Profile”的会话对象 . 此配置文件是特定于用户的,并且当用户浏览应用程序时,会将各种属性添加到此对象 .

我们按以下方式更新'Profile'对象(伪代码):

profile = request.getSession().getProfile(); //Get Profile object from session
profile.setLastVisitedPage("test");

如果没有Apache Ignite,我们的会话将包含'setLastVisitedPage'('test')的正确值 . 但是当使用Ignite时,Ignite'WebSession'对象似乎有点不同:当在会话对象中设置'setLastVisitedPage'值时,WebSession将首先正确包含正确的值('test'),但是当浏览到在下一页中,从Ignite缓存解析的WebSession对象不包含已更改的“setLastVisitedPage”属性 .

我已经看了一下Ignite代码,我想,我知道为什么这不能按预期工作 . 查看Ignite'WebSession'类,我看到以下方法:

public void setAttribute(String name, Object val) {
    attrs.put(name, val);

    if (updates != null)
        updates.add(new T2<>(name, val));
}

简而言之:Ignite希望在每次更新会话对象后,都会调用session.setAttribute方法,因此Ignite会将更改添加到其内部的“updates”集合中,该集合用于更新Ignite网格中的对象 . 我们的应用程序的解决方案是更改我们的应用程序代码,在每次更新后调用setAttribute,但我们也使用代码依赖项,我们无法更改,并且在会话对象更改后可能不会调用setAttribute .

Ignite是否需要在会话对象更改后调用setAttribute,或者这是Ignite中的一个缺陷?

1 回答

  • 0

    您're right, that'现在如何实现它,唯一的解决方法是在每次更新时显式调用 setAttribute() . 我认为这可以改进并创建Apache Ignite票证:https://issues.apache.org/jira/browse/IGNITE-2594

相关问题