From: <sc...@hy...> - 2010-02-17 00:56:03
|
Author: scottmf Date: 2010-02-16 16:55:38 -0800 (Tue, 16 Feb 2010) New Revision: 14301 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=14301 Modified: trunk/src/org/hyperic/hq/measurement/server/session/AvailabilityDataDAO.java trunk/src/org/hyperic/hq/measurement/server/session/AvailabilityManagerEJBImpl.java Log: [HHQ-3505] fix intermittent error by explicitly checking the db to see if the object exists and if so delete it Modified: trunk/src/org/hyperic/hq/measurement/server/session/AvailabilityDataDAO.java =================================================================== --- trunk/src/org/hyperic/hq/measurement/server/session/AvailabilityDataDAO.java 2010-02-17 00:34:08 UTC (rev 14300) +++ trunk/src/org/hyperic/hq/measurement/server/session/AvailabilityDataDAO.java 2010-02-17 00:55:38 UTC (rev 14301) @@ -459,4 +459,8 @@ save(availObj); return availObj; } + + public AvailabilityDataRLE getById(AvailabilityDataId id) { + return (AvailabilityDataRLE) get(id); + } } Modified: trunk/src/org/hyperic/hq/measurement/server/session/AvailabilityManagerEJBImpl.java =================================================================== --- trunk/src/org/hyperic/hq/measurement/server/session/AvailabilityManagerEJBImpl.java 2010-02-17 00:34:08 UTC (rev 14300) +++ trunk/src/org/hyperic/hq/measurement/server/session/AvailabilityManagerEJBImpl.java 2010-02-17 00:55:38 UTC (rev 14301) @@ -793,10 +793,12 @@ AvailabilityDataRLE rle = (AvailabilityDataRLE)entry.getValue(); // if we call remove() on an object which is already in the session // hibernate will throw NonUniqueObjectExceptions - if (_dao.getSession().contains(rle)) { - _dao.getSession().evict(rle); + AvailabilityDataRLE tmp = _dao.getById(rle.getAvailabilityDataId()); + if (tmp != null) { + _dao.remove(tmp); + } else { + _dao.remove(rle); } - _dao.remove(rle); } // addData() could be overwriting RLE data points (i.e. from 0.0 to 1.0) // with the same ID. If this is the scenario, then we must run |