大家好,我使用两台服务器(A,B)做jboss集群.其中服务器A中放有apache_2.2.8和jbossA;服务器B中放有jbossB;
我用一个简单的test实例进行了集群测试,并没有问题.但是系统上线的时候,在用户登录的时候jsp报错:\
java.lang.IllegalArgumentException: setAttribute: Non-serializable attribute
org.jboss.web.tomcat.service.session.ClusteredSession.setAttribute(ClusteredSession.java:555)
org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:130)
com.futuresoft.monitor.servlets.LogonServlet.perform(LogonServlet.java:73)
com.futuresoft.monitor.platform.MyBaseServlet.doPost(MyBaseServlet.java:80)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.futuresoft.monitor.platform.dbutil.CharsetFilter.doFilter(CharsetFilter.java:37)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
其中jboss日志为:java.lang.IllegalArgumentException: setAttribute: Non-serializable attribute
at org.jboss.web.tomcat.service.session.ClusteredSession.setAttribute(ClusteredSession.java:555)
at org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:130)
at com.futuresoft.monitor.servlets.LogonServlet.perform(LogonServlet.java:73)
at com.futuresoft.monitor.platform.MyBaseServlet.doPost(MyBaseServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.futuresoft.monitor.platform.dbutil.CharsetFilter.doFilter(CharsetFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at org.jboss.web.tomcat.service.session.ClusteredSessionValve.invoke(ClusteredSessionValve.java:97)
at org.jboss.web.tomcat.service.session.JvmRouteValve.invoke(JvmRouteValve.java:84)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:437)
at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:366)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:595)那位打个知道什么原因吗?在线等. 非常感谢!

解决方案 »

  1.   

    检查一下你的类文件,
     at com.futuresoft.monitor.servlets.LogonServlet.perform(LogonServlet.java:73)
        at com.futuresoft.monitor.platform.MyBaseServlet.doPost(MyBaseServlet.java:80)
    看你把什么对象放在了session中,这些对象必须implements Serializable接口。这个对象包含的所有对象也必须是Serializable的(一般的String,基本数据类型已经是)。如果确实有不能Seriablizable的对象,用transient关键字申明。
      

  2.   

    您是说我在session中放的是一个javaBean用来存储一个用户的登录信息,这个javaBean叫userBean,是不是userBean必须implements Serializable?
      

  3.   

    是的,你必须implements Serializable