session - Grails session 作用域服务抛出NotSerializable异常

标签 session grails serialization

我有一个实现了Breadcrumb系统的Grails 3应用程序(3.1.1)。我基于this plugin构建了Grails的早期版本。

它在本地运行良好(使用Grails命令行命令run-app),但是,当我在Tomcat 7上构建并运行时,出现以下异常:

Jul 08, 2016 5:10:34 PM org.apache.catalina.ha.session.DeltaManager requestCompleted
SEVERE: Unable to serialize delta request for sessionid [6605EAC9C04DF7E2512493CABDFB1AD2]
java.io.NotSerializableException: au.packagename.BreadCrumbService

上面命名的服务的范围设置为session,并被指定为代理。我什至添加了Serializable实现,但这似乎无济于事。
class BreadCrumbService implements Serializable {

    static transactional = false
    static scope = 'session'
    static proxy = true

}

我有一个Interceptor,它使用服务将当前 Controller 和操作作为Crumb对象写入 session 。我已经将Serializable实现添加到了写入 session 的CrumbBreadCrumbType Enum(在Controllers批注中使用)。

有谁能向我指出为什么会发生这种情况(我理解Serializable的概念)以及如何解决它?

最佳答案

@HoàngLong的评论使我走了正确的路。

当将Crumb对象(所有这些对象都设置为可序列化)写入 session 时,我在BreadCrumbService中使用静态变量作为 session 映射的键。

session[BreadCrumbService.NAMESPACE].crumb = new Crumb()

当我将此变量移至Crumb对象时,此问题已解决。

即使服务本身尚未写入 session 。在编写 session 时仅引用Service内部的变量,就要求该服务和每个成员都是可序列化的。

关于session - Grails session 作用域服务抛出NotSerializable异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38261173/

相关文章:

php - Symfony 3 SessionHandler 警告

javascript - 使用 JS 调用编辑 $_SESSION

html - GSP 克 :select option default selection

grails - 简单的 Grails 应用程序超出了 Heroku 内存配额

c# - 使用 documentStore.Conventions.CustomizeJsonSerializer 事件自定义 RavenDB 中的序列化过程

javascript - Express JS 的 session.generate() 函数的源代码在哪里?

node.js - 没有 express.js 的 Socket.io session ?

grails - 如何创建显示JSON View 的grails 3插件?

mysql - 需要知道MySQL数据库中保存的字节数组的类

algorithm - 如何在 double-double 和 decimal 字符串之间进行转换?