From 0e6c4f2fad665c41e82923bd68b67ec385ca5f4f Mon Sep 17 00:00:00 2001 From: Fredrik Teschke Date: Sun, 16 Feb 2014 16:35:55 +0100 Subject: [PATCH] test case that creates race with RaceLogTrackingAdapter --- .../tracking/impl/MongoGPSFixStoreImpl.java | 23 ++- .../impl/CreateAndTrackWithRaceLogTest.java | 177 ++++++++++++++++++ .../tracking/RaceLogTrackingAdapter.java | 5 +- .../impl/RaceLogConnectivityParams.java | 8 +- .../tracking/impl/RaceLogRaceTracker.java | 34 ++-- .../impl/RaceLogTrackingAdapterImpl.java | 4 +- .../server/impl/RacingEventServiceImpl.java | 1 + 7 files changed, 222 insertions(+), 30 deletions(-) create mode 100644 java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/impl/CreateAndTrackWithRaceLogTest.java diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoGPSFixStoreImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoGPSFixStoreImpl.java index f12b318d8bc..711c6b72abd 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoGPSFixStoreImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoGPSFixStoreImpl.java @@ -45,8 +45,13 @@ public class MongoGPSFixStoreImpl implements MongoGPSFixStore { public MongoGPSFixStoreImpl(MongoObjectFactory mongoObjectFactory, DomainObjectFactory domainObjectFactory, TypeBasedServiceFinderFactory serviceFinderFactory) { mongoOF = (MongoObjectFactoryImpl) mongoObjectFactory; - fixServiceFinder = serviceFinderFactory.createServiceFinder(GPSFixMongoHandler.class); - deviceServiceFinder = serviceFinderFactory.createServiceFinder(DeviceIdentifierMongoHandler.class); + if (serviceFinderFactory != null) { + fixServiceFinder = serviceFinderFactory.createServiceFinder(GPSFixMongoHandler.class); + deviceServiceFinder = serviceFinderFactory.createServiceFinder(DeviceIdentifierMongoHandler.class); + } else { + fixServiceFinder = null; + deviceServiceFinder = null; + } collection = mongoOF.getGPSFixCollection(); } @@ -91,9 +96,11 @@ public class MongoGPSFixStoreImpl implements MongoGPSFixStore { @Override public void loadCompetitorTrack(DynamicGPSFixTrack track, RaceLog raceLog, Competitor competitor) { List> mappings = new DeviceCompetitorMappingFinder(raceLog).analyze().get(competitor); - - for (DeviceMapping mapping : mappings) { - loadTrack(track, mapping.getDevice(), mapping.getTimeRange().from(), mapping.getTimeRange().to(), true /*inclusive*/); + + if (mappings != null) { + for (DeviceMapping mapping : mappings) { + loadTrack(track, mapping.getDevice(), mapping.getTimeRange().from(), mapping.getTimeRange().to(), true /*inclusive*/); + } } } @@ -101,8 +108,10 @@ public class MongoGPSFixStoreImpl implements MongoGPSFixStore { public void loadMarkTrack(DynamicGPSFixTrack track, RaceLog raceLog, Mark mark) { List> mappings = new DeviceMarkMappingFinder(raceLog).analyze().get(mark); - for (DeviceMapping mapping : mappings) { - loadTrack(track, mapping.getDevice(), mapping.getTimeRange().from(), mapping.getTimeRange().to(), true /*inclusive*/); + if (mappings != null) { + for (DeviceMapping mapping : mappings) { + loadTrack(track, mapping.getDevice(), mapping.getTimeRange().from(), mapping.getTimeRange().to(), true /*inclusive*/); + } } } diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/impl/CreateAndTrackWithRaceLogTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/impl/CreateAndTrackWithRaceLogTest.java new file mode 100644 index 00000000000..7cc45297f8e --- /dev/null +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/impl/CreateAndTrackWithRaceLogTest.java @@ -0,0 +1,177 @@ +package com.sap.sailing.domain.racelog.tracking.test.impl; + +import static com.sap.sailing.domain.common.impl.Util.size; +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertNull; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.FileNotFoundException; +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.base.CourseBase; +import com.sap.sailing.domain.base.DomainFactory; +import com.sap.sailing.domain.base.Fleet; +import com.sap.sailing.domain.base.RaceColumn; +import com.sap.sailing.domain.base.Regatta; +import com.sap.sailing.domain.base.Series; +import com.sap.sailing.domain.base.impl.CourseDataImpl; +import com.sap.sailing.domain.base.impl.FleetImpl; +import com.sap.sailing.domain.base.impl.MarkImpl; +import com.sap.sailing.domain.base.impl.SeriesImpl; +import com.sap.sailing.domain.base.impl.WaypointImpl; +import com.sap.sailing.domain.common.TimePoint; +import com.sap.sailing.domain.common.impl.DegreeBearingImpl; +import com.sap.sailing.domain.common.impl.DegreePosition; +import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; +import com.sap.sailing.domain.common.impl.MillisecondsTimePoint; +import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; +import com.sap.sailing.domain.leaderboard.impl.HighPoint; +import com.sap.sailing.domain.racelog.RaceLog; +import com.sap.sailing.domain.racelog.RaceLogEventAuthor; +import com.sap.sailing.domain.racelog.RaceLogEventFactory; +import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier; +import com.sap.sailing.domain.racelog.tracking.GPSFixStore; +import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingAdapter; +import com.sap.sailing.domain.racelog.tracking.RaceNotCreatedException; +import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier; +import com.sap.sailing.domain.racelog.tracking.impl.RaceLogTrackingAdapterFactoryImpl; +import com.sap.sailing.domain.racelog.tracking.test.mock.MockServiceFinderFactory; +import com.sap.sailing.domain.tracking.RacesHandle; +import com.sap.sailing.domain.tracking.Track; +import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl; +import com.sap.sailing.server.RacingEventService; +import com.sap.sailing.server.impl.RacingEventServiceImpl; + +public class CreateAndTrackWithRaceLogTest { + private RacingEventService service; + + private final Fleet fleet = new FleetImpl("fleet"); + private final String columnName = "column"; + private RegattaLeaderboard leaderboard; + private RaceLogTrackingAdapter adapter; + private Regatta regatta; + private RaceLogEventAuthor author; + private GPSFixStore gpsFixStore; + + private long time = 0; + + private static final RaceLogEventFactory factory = RaceLogEventFactory.INSTANCE; + + @Before + public void setup() { + service = new RacingEventServiceImpl(true, new MockServiceFinderFactory()); + gpsFixStore = service.getGPSFixStore(); + service.getMongoObjectFactory().getDatabase().dropDatabase(); + author = service.getServerAuthor(); + Series series = new SeriesImpl("series", false, Collections.singletonList(fleet), + Collections.singletonList(columnName), service); + regatta = service.createRegatta("regatta", "Laser", UUID.randomUUID(), Collections.singletonList(series), + false, new HighPoint(), UUID.randomUUID()); + leaderboard = service.addRegattaLeaderboard(regatta.getRegattaIdentifier(), "RegattaLeaderboard", new int[] {}); + adapter = RaceLogTrackingAdapterFactoryImpl.INSTANCE.getAdapter(DomainFactory.INSTANCE); + } + + @Test + public void hasRaceLog() { + assertNotNull(leaderboard.getRaceColumnByName(columnName).getRaceLog(fleet)); + } + + private TimePoint t() { + return new MillisecondsTimePoint(time++); + } + + @Rule + public ExpectedException exception = ExpectedException.none(); + @Test + public void cantAddBeforeDenoting() throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception { + RaceColumn column = leaderboard.getRaceColumnByName(columnName); + exception.expect(RaceNotCreatedException.class); + adapter.addRace(service, regatta.getRegattaIdentifier(), leaderboard, column, fleet, -1); + } + + private void testSize(Track track, int expected) { + track.lockForRead(); + assertEquals(expected, size(track.getRawFixes())); + track.unlockAfterRead(); + } + + @Test + public void canDenote_Add_Track() throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception { + + RaceColumn column = leaderboard.getRaceColumnByName(columnName); + RaceLog raceLog = column.getRaceLog(fleet); + + //before denoting, it is not listed as loadable + Map> loadable = adapter.listLoadableStoredRaceLogTrackedRaces(service, leaderboard); + assertEquals(0, loadable.size()); + + //can denote racelog for tracking + assertTrue(raceLog.isEmpty()); + adapter.denoteForRaceLogTracking(service, leaderboard, column, fleet, "race"); + assertFalse(raceLog.isEmpty()); + + //add a mapping and one fix in, one out of mapping + Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null); + DeviceIdentifier dev1 = new SmartphoneImeiIdentifier("dev1"); + raceLog.add(factory.createDeviceCompetitorMappingEvent(t(), author, dev1, comp1, 0, new MillisecondsTimePoint(0), new MillisecondsTimePoint(10))); + gpsFixStore.storeFix(dev1, new GPSFixMovingImpl(new DegreePosition(0, 0), new MillisecondsTimePoint(5), new KnotSpeedWithBearingImpl(10, new DegreeBearingImpl(5)))); + gpsFixStore.storeFix(dev1, new GPSFixMovingImpl(new DegreePosition(0, 0), new MillisecondsTimePoint(15), new KnotSpeedWithBearingImpl(10, new DegreeBearingImpl(5)))); + + //then listed as loadable + loadable = adapter.listLoadableStoredRaceLogTrackedRaces(service, leaderboard); + assertEquals(1, loadable.size()); + assertEquals(1, loadable.get(column).size()); + + //now can add + RacesHandle handle = adapter.addRace(service, regatta.getRegattaIdentifier(), leaderboard, column, fleet, -1); + + //no trackedrace yet + assertNull(column.getTrackedRace(fleet)); + + CourseBase course = new CourseDataImpl("test"); + course.addWaypoint(0, new WaypointImpl(new MarkImpl("mark"))); + raceLog.add(factory.createCourseDesignChangedEvent(t(), author, 0, course)); + + //start tracking + raceLog.add(factory.createStartTrackingEvent(t(), author, 0)); + + //now there is a trackedrace + TrackedRace race = column.getTrackedRace(fleet); + assertNotNull(race); + + //one fix should have been loaded from store + testSize(race.getTrack(comp1), 1); + + //further fix arrives in race + gpsFixStore.storeFix(dev1, new GPSFixMovingImpl(new DegreePosition(0, 0), new MillisecondsTimePoint(7), new KnotSpeedWithBearingImpl(10, new DegreeBearingImpl(5)))); + gpsFixStore.storeFix(dev1, new GPSFixMovingImpl(new DegreePosition(0, 0), new MillisecondsTimePoint(14), new KnotSpeedWithBearingImpl(10, new DegreeBearingImpl(5)))); //outside mapping range + testSize(race.getTrack(comp1), 2); + + //add another mapping on the fly, other old fixes should be loaded + raceLog.add(factory.createDeviceCompetitorMappingEvent(t(), author, dev1, comp1, 0, new MillisecondsTimePoint(11), new MillisecondsTimePoint(20))); + testSize(race.getTrack(comp1), 4); + + //add another fix in new mapping range + gpsFixStore.storeFix(dev1, new GPSFixMovingImpl(new DegreePosition(0, 0), new MillisecondsTimePoint(18), new KnotSpeedWithBearingImpl(10, new DegreeBearingImpl(5)))); + testSize(race.getTrack(comp1), 5); + + //stop tracking, then no more fixes arrive at race + handle.getRaceTracker().stop(); + gpsFixStore.storeFix(dev1, new GPSFixMovingImpl(new DegreePosition(0, 0), new MillisecondsTimePoint(8), new KnotSpeedWithBearingImpl(10, new DegreeBearingImpl(5)))); + testSize(race.getTrack(comp1), 5); + } +} diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/RaceLogTrackingAdapter.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/RaceLogTrackingAdapter.java index 8604974f221..3f97a75283b 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/RaceLogTrackingAdapter.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/RaceLogTrackingAdapter.java @@ -11,11 +11,9 @@ import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.common.RegattaIdentifier; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.racelog.RaceLog; -import com.sap.sailing.domain.racelog.RaceLogStore; import com.sap.sailing.domain.racelog.tracking.impl.RaceLogRaceTracker; import com.sap.sailing.domain.tracking.RacesHandle; import com.sap.sailing.domain.tracking.TrackedRace; -import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.server.RacingEventService; public interface RaceLogTrackingAdapter { @@ -26,8 +24,7 @@ public interface RaceLogTrackingAdapter { */ RacesHandle addRace(RacingEventService service, RegattaIdentifier regattaToAddTo, Leaderboard leaderboard, - RaceColumn raceColumn, Fleet fleet, RaceLogStore raceLogStore, - WindStore windStore, long timeoutInMilliseconds) + RaceColumn raceColumn, Fleet fleet, long timeoutInMilliseconds) throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogConnectivityParams.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogConnectivityParams.java index 92204f82f24..dfd491bf9c6 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogConnectivityParams.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogConnectivityParams.java @@ -12,6 +12,7 @@ import com.sap.sailing.domain.racelog.tracking.GPSFixStore; import com.sap.sailing.domain.racelog.tracking.RaceNotCreatedException; import com.sap.sailing.domain.racelog.tracking.analyzing.impl.RaceInformationFinder; import com.sap.sailing.domain.racelog.tracking.analyzing.impl.RaceLogTrackingStateAnalyzer; +import com.sap.sailing.domain.tracking.DynamicTrackedRegatta; import com.sap.sailing.domain.tracking.RaceTracker; import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters; import com.sap.sailing.domain.tracking.TrackedRegattaRegistry; @@ -45,13 +46,13 @@ public class RaceLogConnectivityParams implements RaceTrackingConnectivityParame @Override public RaceTracker createRaceTracker( - TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore, GPSFixStore gpsFixStore) throws Exception { + TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore, GPSFixStore gpsFixStore) { return createRaceTracker(regatta, trackedRegattaRegistry, windStore, gpsFixStore); } @Override public RaceTracker createRaceTracker(Regatta regatta, - TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore, GPSFixStore gpsFixStore) throws Exception { + TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore, GPSFixStore gpsFixStore) { if (regatta == null) { BoatClass boatClass = new RaceInformationFinder(raceLog).analyze().getB(); regatta = service.getOrCreateDefaultRegatta("RaceLog-tracking default Regatta", boatClass.getName(), UUID.randomUUID()); @@ -59,7 +60,8 @@ public class RaceLogConnectivityParams implements RaceTrackingConnectivityParame if (regatta == null) { throw new RaceNotCreatedException("No regatta for race-log tracked race"); } - return new RaceLogRaceTracker(trackedRegattaRegistry.getOrCreateTrackedRegatta(regatta), this, windStore, gpsFixStore); + DynamicTrackedRegatta trackedRegatta = trackedRegattaRegistry.getOrCreateTrackedRegatta(regatta); + return new RaceLogRaceTracker(trackedRegatta, this, windStore, gpsFixStore); } @Override diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogRaceTracker.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogRaceTracker.java index 775fc50c64a..423ad596fbd 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogRaceTracker.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogRaceTracker.java @@ -318,6 +318,10 @@ public class RaceLogRaceTracker extends BaseRaceLogEventVisitor implements RaceT Iterable sidelines = Collections.emptyList(); + //set race definition, so race is linked to leaderboard automatically + regatta.getRegatta().addRace(raceDef); + raceColumn.setRaceIdentifier(fleet, regatta.getRegatta().getRaceIdentifier(raceDef)); + trackedRace = regatta.createTrackedRace(raceDef, sidelines, windStore, gpsFixStore, params.getDelayToLiveInMillis(), WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND, boatClass.getApproximateManeuverDurationInMilliseconds(), null); @@ -346,22 +350,26 @@ public class RaceLogRaceTracker extends BaseRaceLogEventVisitor implements RaceT @Override public void fixReceived(DeviceIdentifier device, GPSFix fix) { TimePoint timePoint = fix.getTimePoint(); - for (DeviceMapping mapping : markMappingsByDevices.get(device)) { - Mark mark = mapping.getMappedTo(); - if (mapping.getTimeRange().includes(timePoint)) { - trackedRace.recordFix(mark, fix); + if (markMappingsByDevices.get(device) != null) { + for (DeviceMapping mapping : markMappingsByDevices.get(device)) { + Mark mark = mapping.getMappedTo(); + if (mapping.getTimeRange().includes(timePoint)) { + trackedRace.recordFix(mark, fix); + } } } - for (DeviceMapping mapping : competitorMappingsByDevices.get(device)) { - Competitor comp = mapping.getMappedTo(); - if (mapping.getTimeRange().includes(timePoint)) { - if (fix instanceof GPSFixMoving) { - trackedRace.recordFix(comp, (GPSFixMoving) fix); - } else { - logger.log(Level.WARNING, - String.format("Could not add fix for competitor (%s) in race (%s), as it is no GPSFixMoving", - comp, params.getRaceLog())); + if (competitorMappingsByDevices.get(device) != null) { + for (DeviceMapping mapping : competitorMappingsByDevices.get(device)) { + Competitor comp = mapping.getMappedTo(); + if (mapping.getTimeRange().includes(timePoint)) { + if (fix instanceof GPSFixMoving) { + trackedRace.recordFix(comp, (GPSFixMoving) fix); + } else { + logger.log(Level.WARNING, + String.format("Could not add fix for competitor (%s) in race (%s), as it is no GPSFixMoving", + comp, params.getRaceLog())); + } } } } diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogTrackingAdapterImpl.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogTrackingAdapterImpl.java index 408b681ab2c..24d25ef46af 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogTrackingAdapterImpl.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogTrackingAdapterImpl.java @@ -26,7 +26,6 @@ import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; import com.sap.sailing.domain.racelog.RaceLog; import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.domain.racelog.RaceLogEventFactory; -import com.sap.sailing.domain.racelog.RaceLogStore; import com.sap.sailing.domain.racelog.tracking.NotDenotableForTrackingException; import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingAdapter; import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingState; @@ -34,7 +33,6 @@ import com.sap.sailing.domain.racelog.tracking.RaceNotCreatedException; import com.sap.sailing.domain.racelog.tracking.analyzing.impl.RaceLogTrackingStateAnalyzer; import com.sap.sailing.domain.tracking.RacesHandle; import com.sap.sailing.domain.tracking.TrackedRace; -import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.server.RacingEventService; public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter { @@ -50,7 +48,7 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter { @Override public RacesHandle addRace(RacingEventService service, RegattaIdentifier regattaToAddTo, Leaderboard leaderboard, - RaceColumn raceColumn, Fleet fleet, RaceLogStore raceLogStore, WindStore windStore, long timeoutInMilliseconds) + RaceColumn raceColumn, Fleet fleet, long timeoutInMilliseconds) throws MalformedURLException, FileNotFoundException, URISyntaxException, RaceNotCreatedException, Exception { RaceLog raceLog = raceColumn.getRaceLog(fleet); Regatta regatta = service.getRegatta(regattaToAddTo); diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index 4b2c8e748f4..0b1b8c85352 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -384,6 +384,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen try { gpsFixStore = MongoGPSFixStoreFactory.INSTANCE.getMongoGPSFixStore(mongoObjectFactory, domainObjectFactory, serviceFinderFactory); } catch (Exception e) { + e.printStackTrace(); throw new RuntimeException(e); } }