java.io.NotSerializableException错误解决方法(com.landray.sso.client.EKPSSOUserData)

         【问题】

          在维护以前的老项目的时候,发现关闭-重启tomcat,一个单点登录jar中的类的会报错:

          java.io.NotSerializableException:com.landray.sso.client.EKPSSOUserData

        【调侃】

          可是自己一直很纳闷儿的事,同样的代码,同样的操作方式,为什么我老是报这个错?而讲课老师同样的操作就没事了?我也是醉醉的啦~\(≧▽≦)/~(纯属闲扯)

          言归正传啊,先解释一下为什么会出现这个问题?

         【原因】

         在说原因之前,先解释两个词:正常关闭,非正常关闭

         正常关闭:就是指在停止tomcat服务时,点击该按钮,myeclipse tomcat——Stop server,等同于点击servers窗口的红色停止按钮,这两种都是属于正常关闭。(如下图:)


          非正常关闭:指停止tomcat服务时,点击console窗口的红色按钮:如下图:


        当重启服务时,我们需要停止原来的服务,而停止服务有两种方式:1·正常关闭,2·非正常关闭。非正常关闭就会导致session对象销毁,而正常关闭则不会销毁session对象。也就是说,如果我们使用第一种方式关闭,tomcat停止时,还保存着session资源,(目标文件com.landray.sso.client.EKPSSOUserData类,原来保存于session中,而现在存于硬盘的文件夹里)并完成在session中存着的类的序列化,而由于该目标类没有实现序列化的接口,所以在重启服务时,它会尝试自动恢复session,从而导致序列化和反序列化的异常。

       【解决方案】

         1·存在session中的类实现序列化接口:如下代码:

[java]  view plain  copy
 print ?
  1. package cn.itcast.shop.category.vo;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.HashSet;  
  5. import java.util.Set;  
  6.   
  7. import cn.itcast.shop.categorysecond.vo.CategorySecond;  
  8.   
  9. @SuppressWarnings("serial")  
  10. public class Category implements  Serializable   {  
  11. package com.landray.sso.client;


    import com.landray.sso.client.util.StringUtil;


    public class EKPSSOUserData implements Serializable   
    {
      private String currentUsername;
      private String originUsername;

        2·选择关闭方式为非正常关闭方式:即点击console窗口的红色按钮。

        3·(前提:自己按照tomcat插件)

           在apache-tomcat-7.0.63\conf\context.xml中添加如下内容,或者在apache-tomcat-7.0.63\conf\server.xml下添加context节点,在context节点下添加:如果在server.xml中添加则content,则contentx.xml中的会被覆盖,两者皆可。    

<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false"/>

        再进行启动停止等操作,报如下的类似错误:

 org.apache.catalina.session.PersistentManagerBase start

严重: No Store configured, persistence disabled

        原因是添加的东东少添加了一点点儿。

    解决办法:

       修改刚才添加的 <Context>中<Manager> 元素:

    <Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false"/>

改为:

    <Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false">

        <Store className="org.apache.catalina.session.FileStore"/>

    </Manager>

        差不多就是这些,我选择的是第一种方案,第一种和第二种都可方便的解决该问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值