![](/img/trans.png)
[英]ClassCastException: org.postgresql.jdbc4.Jdbc4Connection cannot be cast to org.postgresql.jdbc4.Jdbc4Connection
[英]java.io.NotSerializableException: org.postgresql.jdbc4.Jdbc4Connection
我有一個具有視圖范圍的托管bean。 問題是,當我運行Web應用程序時,出現以下錯誤:
GRAVE: Error Rendering View[/login.xhtml]
java.io.NotSerializableException: org.postgresql.jdbc4.Jdbc4Connection
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source).........
但是,當我將范圍更改為會話或請求時,一切正常。 誰能告訴我我做錯了什么嗎? 也許我忘記了配置或其他內容?
您已將JDBC Connection
分配為視圖范圍的受管bean的屬性。 View作用域管理的Bean及其所有屬性都需要可序列化,因為它們將存儲在會話中。 但是, Connection
接口不會擴展Serializable
,因此不會擴展此異常。 您需要使其transient
。
但是真正的問題實際上更大。 將外部資源作為課程的一個領域是一個絕妙的主意。 永遠不要將數據庫資源作為類的字段保存,該類的生存期比需要保持打開狀態的資源長。 否則,它們將泄漏出去和/或將引起線程安全和事務問題(死鎖等),並且/或者將被DB收回,從而將停止工作。
您應該始終在盡可能短的范圍內打開和關閉連接(以及語句和結果集),最好在完全相同的方法塊的try-finally
塊內。 如果要提高連接性能,則應使用連接池。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.