我有一個部署在兩個EAR中的java Web應用程序 - 一個用於UI層(包含WAR模塊),另一個用於業務層(包含一個EJB模塊)。這兩個層都部署到WebSphere Application Server 7.這些層通過EJB 3.0無狀態會話bean連接。 bean通過JNDI查找。EJB遠程方法中不匹配的序列化UID - java.util.date&DBTimestamp
我們使用Hibernate進行持久化,並使用DB2數據庫。
當返回遠程EJB呼叫,在客戶機側出現以下錯誤:
java.rmi.MarshalException: CORBA MARSHAL 0x4942f896 No; nested exception is:
org.omg.CORBA.MARSHAL: Unable to read value from underlying bridge : Mismatched serialization UIDs : Source (RepId RMI:java.util.Date:AC117E28FE36587A:686A81014B597419) = 686A81014B597419 whereas Target (RepId RMI:com.ibm.db2.jcc.DBTimestamp:AA774DBE96ECCE99:7AFCE1FB570D419C) = 7AFCE1FB570D419C vmcid: IBM minor code: 896 completed: No
被從休眠返回的對象上的java.util.Date
字段作爲com.ibm.db2.jcc.DBTimestamp
字段,其延伸java.sql.Timestamp
延伸java.util.Date
。因爲它是java.util.Date
的一個子類,並且是可序列化的,所以不應該這樣處理?
我已經和一位更有經驗的人談過,他說可能的原因是JVM版本或DBTimestamp
class版本在Web和業務層WAS服務器之間是不同的。兩臺服務器都具有相同的JVM,WAS和JAR版本。
我也有一個本地WAS 7服務器,其中兩個層都部署到同一臺服務器。 EJB仍然通過對本地主機的JNDI調用進行遠程解析。該應用程序在本地服務器上正常工作。我知道的唯一區別是WAS的不同微版本,以及將兩個層部署到同一臺服務器。
問題的原因是什麼?是不是在Web層上找不到DBTimestamp
類,或者該類的版本不同?或者它是多態的問題還是其他問題?
除了一個答案,我也很感激什麼樣的調試嘗試的建議 - 我沒有想法。