loosing nanoseconds in timestamp after ejbStore
microbiotic Jul 18, 2004 3:56 PMHi all,
I have a problem with storing sql.Timestamp fields. Every time after an ejbStore() the nanoseconds are thrown away for ever. Im using jboss 3.2.3 and a mysql 4 db. There are no additional mappings made - only using jboss default mappings.
Can someone explain me this behavior ?
Thanks in advance.
Greets,
Marcel
/** * @see javax.ejb.EntityBean#ejbLoad() */ public void ejbLoad() throws EJBException, RemoteException { log.debug("ejbLoad(): converting values."); Timestamp adate = getSQLActivationDate(); Timestamp edate = getSQLExpirationDate(); if (adate != null && edate != null) { log.debug("adate = " + adate.getTime() + "nanos: " + adate.getNanos()); log.debug("edate = " + edate.getTime() + "nanos: " + adate.getNanos()); } activationDate = convertSQLTimeStampToCalendar(adate); expirationDate = convertSQLTimeStampToCalendar(edate); if (activationDate != null && expirationDate != null) { log.debug("activationDate = " + activationDate.getTimeInMillis()); log.debug("expirationDate = " + expirationDate.getTimeInMillis()); } } /** * @see javax.ejb.EntityBean#ejbStore() */ public void ejbStore() throws EJBException, RemoteException { log.debug("ejbStore(): converting values."); if (activationDate != null && expirationDate != null) { log.debug("activationDate = " + activationDate.getTimeInMillis()); log.debug("expirationDate = " + expirationDate.getTimeInMillis()); } Timestamp adate = convertCalendarToSQLTimeStamp(activationDate); Timestamp edate = convertCalendarToSQLTimeStamp(expirationDate); setSQLActivationDate(adate); setSQLExpirationDate(edate); if (adate != null && edate != null) { log.debug("adate = " + adate.getTime()); log.debug("edate = " + edate.getTime()); } } ... private Calendar convertSQLTimeStampToCalendar(Timestamp t) { Calendar date = null; if (t != null) { date = Calendar.getInstance(); date.setTimeInMillis(t.getTime() + t.getNanos() / 1000000); } return date; } private Timestamp convertCalendarToSQLTimeStamp(Calendar c) { Timestamp t = null; if (c != null) { t = new Timestamp(c.getTimeInMillis()); } return t; }
output:
21:48:59,396 DEBUG [PollingCycleBean:534] ejbStore(): converting values. 21:48:59,406 DEBUG [PollingCycleBean:536] activationDate = 1086295664847 21:48:59,406 DEBUG [PollingCycleBean:537] expirationDate = 1117831664847 21:48:59,626 DEBUG [PollingCycleBean:544] adate = 1086295664847 21:48:59,626 DEBUG [PollingCycleBean:545] edate = 1117831664847 21:49:04,453 DEBUG [PollingCycleBean:514] ejbLoad(): converting values. 21:49:04,453 DEBUG [PollingCycleBean:518] adate = 1086295664000nanos: 0 21:49:04,453 DEBUG [PollingCycleBean:519] edate = 1117831664000nanos: 0 21:49:04,453 DEBUG [PollingCycleBean:525] activationDate = 1086295664000 21:49:04,453 DEBUG [PollingCycleBean:526] expirationDate = 1117831664000