diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java index 3fdb46a2dc3..a781e048797 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java @@ -27,6 +27,9 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers private static final Logger logger = Logger.getLogger(SwissTimingAdapterPersistenceImpl.class.getName()); + /** this race cache should only be used for checks in the storeSailMasterMessage method to ensure + * that we have always a valid race for a message (also in case we missed a RAC message) + */ private HashMap cachedRaces = new HashMap(); public SwissTimingAdapterPersistenceImpl(DB db, SwissTimingFactory swissTimingFactory) { @@ -210,9 +213,15 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers // in order to have a more intelligent conflict resolver mechanism we will forward the resolution to a special thread later on boolean simpleResolution = true; if(simpleResolution) { - Race newRace = SwissTimingFactory.INSTANCE.createRace(message.getRaceID(), null, null); - storeRace(newRace); - cachedRaces.put(newRace.getRaceID(), newRace); + // first check if the missing race has been created in the mean time + Race checkRace = getRace(message.getRaceID()); + if(checkRace != null) { + cachedRaces.put(checkRace.getRaceID(), checkRace); + } else { + Race newRace = SwissTimingFactory.INSTANCE.createRace(message.getRaceID(), null, null); + storeRace(newRace); + cachedRaces.put(newRace.getRaceID(), newRace); + } } } }