close
J2EE server: Weblogic
發生時機:Web project 呼叫 EJB 取回 訂單資訊物件OrderStatusVO時


EJB 去 DB查詢出資料,直接將entity裡的日期變數set給vo
但是web project 取到OrderStatusVO時
日期欄位卻是null


如果web project lib 用的是
Server_weblogic\modules\org.apache.openjpa_0.9.7.jar
則不會有exception




如果用的是openjpa-1.0.1.jar
則會出現


<2008/1/15 下午02時20分06秒 CST> java.io.InvalidClassException: org.apache.openjpa.util.java$util$Date$proxy; local class incompatible: stream classdesc serialVersionUID = -2376150941703416254, local class serialVersionUID = -4069550581237679268
java.io.InvalidClassException: org.apache.openjpa.util.java$util$Date$proxy; local class incompatible: stream classdesc serialVersionUID = -2376150941703416254, local class serialVersionUID = -4069550581237679268
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:519)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1546)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1460)

javax.ejb.EJBException: nested exception is: java.rmi.UnmarshalException: Incoming message header or abbreviation processing failed ; nested exception is:
java.io.InvalidClassException: org.apache.openjpa.util.java$util$Date$proxy; local class incompatible: stream classdesc serialVersionUID = -2376150941703416254, local class serialVersionUID = -4069550581237679268



所以
要將entity 裡 date型態的變數set 進 拿來傳遞的vo裡
以下作法會有問題
NasSkypeOrder so = soDAO.getSkypeOrder(no.getOrderId());
...
OrderStatusVO os = new OrderStatusVO();
os.setUsingDate(so.getSorderConfirmedDate());


以下作法就Ok,要再轉一次


NotifyVO nvo = new NotifyVO();
nvo.setStatusDate(new Date(vds.getVdataStatusDate().getTime()));
//vds is an entity


arrow
arrow
    全站熱搜

    babyincar 發表在 痞客邦 留言(0) 人氣()