2013-01-22 52 views
4

我們在flex中部署了一個應用程序,該應用程序部署在負載平衡的Tomcat 6.0(有一個負載平衡器將請求傳遞給2個tomcat服務器)上。在Tomcat 6.0上加載持久會話時發生IOException

我們在訪問應用程序時遇到了404錯誤。通過將toMat日誌挖掘,我們發現以下錯誤

日誌跟蹤

2013-01-17 10:42:54,148 org.apache.catalina.session.ManagerBase - IOException while loading persisted sessions: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: bean.Login 
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: bean.Login 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1332) 
     at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946) 
.. 
2013-01-17 10:43:04,135 org.apache.catalina.session.ManagerBase - Exception loading sessions from persistent storage 
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: bean.Login 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1332) 
     at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946) 
… 
Caused by: java.io.NotSerializableException: bean.Login 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164) 

原因

此錯誤的可能原因是Tomcat的嘗試序列化所有活動的全部對象圖會話關閉時,然後嘗試恢復它們,當你開始備份。關鍵是Tomcat使用「正常」的java對象序列化,它要求所有對象都是可序列化的。

,我們制訂了登錄豆春季如下

<bean id="currLogin" class="bean.Login" scope="session"> 
     <aop:scoped-proxy /> 
</bean> 

補救

短期

  • 刪除在CATALINA_HOME /工作目錄中的文件session.ser
  • 重新啓動tomca t服務器

在彈回服務器之後,我們能夠在沒有錯誤的情況下登錄到應用程序。

長期

  • 讓bean.Login序列化的實現Serializable接口 。
  • 不要有Tomcat的序列化會話(添加 到context.xml中,無論是在應用程序或在conf /目錄下的全球tomcat的 context.xml的,裏面的元素。

請讓我們知道的方法來解決這個問題?

回答

5

我相信,如果你想讓Tomcat堅持重啓之間的Session對象,你將需要實現Serializable接口。差不多你已經回答了你自己的問題。

這是由你決定呃你希望它們在重新啓動之前保持不變。