Session Grails会话作用域服务引发NotSerializable异常

Session Grails会话作用域服务引发NotSerializable异常,session,grails,serialization,Session,Grails,Serialization,我有一个实现面包屑系统的Grails3应用程序(3.1.1)。我将它作为Grails早期版本的基础 它在本地运行良好(使用Grails命令行命令runapp),但是,当我在tomcat7上构建和运行时,我得到以下异常: Jul 08, 2016 5:10:34 PM org.apache.catalina.ha.session.DeltaManager requestCompleted SEVERE: Unable to serialize delta request for sessionid

我有一个实现面包屑系统的Grails3应用程序(3.1.1)。我将它作为Grails早期版本的基础

它在本地运行良好(使用Grails命令行命令
runapp
),但是,当我在tomcat7上构建和运行时,我得到以下异常:

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
上述服务的作用域设置为
会话
,并指定为代理。我甚至添加了
Serializable
实现,但是这似乎没有什么帮助

class BreadCrumbService implements Serializable {

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

}
我有一个
拦截器
,它使用服务将当前控制器和操作作为
Crumb
对象写入会话。我已经将
Serializable
实现添加到写入会话的
Crumb
BreadCrumbType
枚举(在控制器注释中使用)中


有人能告诉我为什么会发生这种情况(我理解可序列化的概念)以及我如何解决它吗?

@Hoáng Long的评论让我找到了正确的方向

在将Crumb对象(所有对象都可序列化)写入会话时,我在BreadCrumbService中使用了一个静态变量作为会话映射的键

session[BreadCrumbService.NAMESPACE].crumb = new Crumb()
当我把这个变量移到crump对象时,问题就解决了


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

@Hoáng Long的评论让我找到了正确的方向

在将Crumb对象(所有对象都可序列化)写入会话时,我在BreadCrumbService中使用了一个静态变量作为会话映射的键

session[BreadCrumbService.NAMESPACE].crumb = new Crumb()
当我把这个变量移到crump对象时,问题就解决了


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

您确定BreadCrumbService的所有成员都是临时的或可序列化的吗?您确定BreadCrumbService的所有成员都是临时的或可序列化的吗?