2011-05-10 36 views
1

即時通訊做與primefaces和Web 2.0 J2EE,目前與此錯誤java.io.NotSerializableException

java.io.NotSerializableException: org.apache.derby.client.am.PreparedStatement40 
java.io.ObjectOutputStream.writeObject0(Unknown Source) 
java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) 
java.io.ObjectOutputStream.writeSerialData(Unknown Source) 
java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 
java.io.ObjectOutputStream.writeObject0(Unknown Source) 
java.io.ObjectOutputStream.writeObject(Unknown Source) 
java.util.HashMap.writeObject(Unknown Source) 
sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
java.io.ObjectStreamClass.invokeWriteObject(Unknown Source) 
java.io.ObjectOutputStream.writeSerialData(Unknown Source) 
java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 
java.io.ObjectOutputStream.writeObject0(Unknown Source) 
java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) 
java.io.ObjectOutputStream.writeSerialData(Unknown Source) 
java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 
java.io.ObjectOutputStream.writeObject0(Unknown Source) 
java.io.ObjectOutputStream.writeArray(Unknown Source) 
java.io.ObjectOutputStream.writeObject0(Unknown Source) 
java.io.ObjectOutputStream.writeObject(Unknown Source) 
java.util.HashMap.writeObject(Unknown Source) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
java.io.ObjectStreamClass.invokeWriteObject(Unknown Source) 
java.io.ObjectOutputStream.writeSerialData(Unknown Source) 
java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 
java.io.ObjectOutputStream.writeObject0(Unknown Source) 
java.io.ObjectOutputStream.writeObject(Unknown Source) 
com.sun.faces.renderkit.ClientSideStateHelper.doWriteState(ClientSideStateHelper.java:293) 
com.sun.faces.renderkit.ClientSideStateHelper.writeState(ClientSideStateHelper.java:167) 
com.sun.faces.renderkit.ResponseStateManagerImpl.writeState(ResponseStateManagerImpl.java:123) 
com.sun.faces.application.StateManagerImpl.writeState(StateManagerImpl.java:155) 
com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:221) 
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:397) 
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126) 
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127) 
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 

一些谷歌上搜索困在這裏說,我需要實現Serializable所有類,我在此function.but使用我已經做了that.and這個錯誤似乎相當普遍的,我不能很明白這out.and真的不明白下面

org.apache.derby.client.am.PreparedStatement40 
+0

您嘗試序列化的類是否有非瞬態PreparedStatement成員變量? – DaveH 2011-05-10 08:29:10

+1

yup.i應該聲明PrepareStatement是短暫的權利? 似乎現在一切正常 問題已解決。謝謝 – Azuan 2011-05-10 09:53:41

+2

將PreparedStatement(或Connection或ResultSet作爲實例變量保存是一個非常糟糕的主意,你的問題比單獨的這個異常要大一些。 idiom要求像'Connection','Statement'和'ResultSet'這樣的數據庫資源應該在最短的可能範圍**中打開和關閉,即在與你使用它們的地方相同的方法塊中。 – BalusC 2011-05-10 10:57:04

回答

1

看起來您正在將一個(JDBC)PreparedStatement存儲在一個正在進行序列化(可能是會話的一部分)的對象中。你應該把它移動到其他地方或者將它標記爲瞬態(不要忘記當它恢復時它會丟失)。

+0

我應該把暫時準備作爲暫時的。之前不知道瞬態。 並且我確實將它移動到了別的地方。 這兩個解決方案工作得很好。 非常感謝 – Azuan 2011-05-10 09:54:58

1

問題的錯誤是,你正試圖序列化對象必須組織一個參考.apache.derby.client.am.PreparedS tatement40,或者最有可能的,到java.sql.Statement,這是類實現的接口。 您必須刪除該引用才能使其工作

0

的線索是在這裏:

StateManagerImpl.writeState 

很可能你已經在你的組件之一設置不適當的值。您可能需要在後臺bean中顯式調用setValue的地方使用EL綁定(我根據所發佈的信息進行了最佳猜測)。

JSF使用在請求之間持久化的狀態化UI組件樹。樹結構和樹上的任何值都保存在渲染響應階段的末尾。通常,數據保存在會話中或隱藏的表單字段中。因此,組件上設置的任何值都必須是可序列化的。

相關問題