使用 spring-sessions 的序列化异常
Serialization exception using spring-sessions
Primefaces/Joinfaces Spring-Boot.jsf 应用程序。
应用程序运行良好 运行 独立,但我最近开始通过 Spring-Session 实现会话复制。当会话持久保存到会话存储时,我得到一个不可序列化的异常。
Caused by: java.io.NotSerializableException:
com.company.application.service.dao.security.RoleBasedSecurityDao$$EnhancerBySpringCGLIB$de506c
查看该错误消息,看起来序列化异常不是针对 class 本身,而是针对 class 拥有的东西。它唯一的东西就是 JDBCTemplate。
@Repository
public class RoleBasedSecurityDao {
private final static Logger log = LoggerFactory.getLogger(RoleBasedSecurityDao.class);
private NamedParameterJdbcTemplate jdbcTemplate;
@Autowired
@Qualifier("dataSource")
public void setDataSource(DataSource dataSource) {
jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
[...]
}
如果我将 "implements Serializable" 添加到 class 定义中,错误会更改:
Caused by: java.io.NotSerializableException:
org.springframework.dao.support.PersistenceExceptionTranslationInterceptor
我不熟悉 JSF,但根据我的阅读,我希望所有的 JSF classes 都是可序列化的。当我的 DAO 需要一个 JdbcTemplate 实例时,我该如何使它可序列化?
正如@Selaron 指出的那样,问题是 JSF 控制器上的非瞬态 spring bean。不要那样做。
Primefaces/Joinfaces Spring-Boot.jsf 应用程序。
应用程序运行良好 运行 独立,但我最近开始通过 Spring-Session 实现会话复制。当会话持久保存到会话存储时,我得到一个不可序列化的异常。
Caused by: java.io.NotSerializableException: com.company.application.service.dao.security.RoleBasedSecurityDao$$EnhancerBySpringCGLIB$de506c
查看该错误消息,看起来序列化异常不是针对 class 本身,而是针对 class 拥有的东西。它唯一的东西就是 JDBCTemplate。
@Repository
public class RoleBasedSecurityDao {
private final static Logger log = LoggerFactory.getLogger(RoleBasedSecurityDao.class);
private NamedParameterJdbcTemplate jdbcTemplate;
@Autowired
@Qualifier("dataSource")
public void setDataSource(DataSource dataSource) {
jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
[...]
}
如果我将 "implements Serializable" 添加到 class 定义中,错误会更改:
Caused by: java.io.NotSerializableException: org.springframework.dao.support.PersistenceExceptionTranslationInterceptor
我不熟悉 JSF,但根据我的阅读,我希望所有的 JSF classes 都是可序列化的。当我的 DAO 需要一个 JdbcTemplate 实例时,我该如何使它可序列化?
正如@Selaron 指出的那样,问题是 JSF 控制器上的非瞬态 spring bean。不要那样做。