mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-11 06:40:53 +00:00
PolarDataService now uses OSGi service registry
preparation for being able to use polar data service in domain classes
This commit is contained in:
1 parent
53b016d648
commit
f8f2ada89c
43 files changed
+150
-106
No files matched your search
@@ -6,9 +6,7 @@ Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Activator: com.sap.sailing.server.impl.Activator
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Import-Package: com.sap.sailing.polars,
|
||||
com.sap.sailing.polars.factory,
|
||||
com.sap.sailing.server.gateway.deserialization,
|
||||
Import-Package: com.sap.sailing.server.gateway.deserialization,
|
||||
org.json.simple,
|
||||
org.json.simple.parser,
|
||||
org.osgi.framework;version="1.3.0",
|
||||
@@ -24,7 +22,6 @@ Require-Bundle: com.sap.sailing.domain,
|
||||
com.sap.sailing.udpconnector,
|
||||
com.sap.sailing.domain.shared.android,
|
||||
com.sap.sailing.server.gateway.serialization,
|
||||
com.sap.sailing.polars,
|
||||
com.sap.sse.common,
|
||||
com.sap.sse.operationaltransformation,
|
||||
com.sap.sse.replication,
|
||||
|
||||
@@ -55,6 +55,7 @@ import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.ScoringScheme;
|
||||
import com.sap.sailing.domain.persistence.DomainObjectFactory;
|
||||
import com.sap.sailing.domain.persistence.MongoObjectFactory;
|
||||
import com.sap.sailing.domain.polars.PolarDataService;
|
||||
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
|
||||
import com.sap.sailing.domain.regattalike.LeaderboardThatHasRegattaLike;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
@@ -65,7 +66,6 @@ import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||
import com.sap.sailing.domain.tracking.TrackerManager;
|
||||
import com.sap.sailing.domain.tracking.WindStore;
|
||||
import com.sap.sailing.polars.PolarDataService;
|
||||
import com.sap.sailing.server.masterdata.DataImportLockWithProgress;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.TypeBasedServiceFinderFactory;
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.GPSFixMongoHandler;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.impl.GPSFixMongoHandlerImpl;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.impl.GPSFixMovingMongoHandlerImpl;
|
||||
import com.sap.sailing.domain.polars.PolarDataService;
|
||||
import com.sap.sailing.domain.tracking.impl.GPSFixImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl;
|
||||
import com.sap.sailing.server.MasterDataImportClassLoaderService;
|
||||
@@ -55,6 +56,8 @@ public class Activator implements BundleActivator {
|
||||
|
||||
private ServiceTracker<MasterDataImportClassLoaderService, MasterDataImportClassLoaderService> masterDataImportClassLoaderServiceTracker;
|
||||
|
||||
private ServiceTracker<PolarDataService, PolarDataService> polarDataServiceTracker;
|
||||
|
||||
public Activator() {
|
||||
clearPersistentCompetitors = Boolean.valueOf(System.getProperty(CLEAR_PERSISTENT_COMPETITORS_PROPERTY_NAME, ""+false));
|
||||
logger.log(Level.INFO, "setting "+CLEAR_PERSISTENT_COMPETITORS_PROPERTY_NAME+" to "+clearPersistentCompetitors);
|
||||
@@ -77,6 +80,10 @@ public class Activator implements BundleActivator {
|
||||
context, MasterDataImportClassLoaderService.class,
|
||||
new MasterDataImportClassLoaderServiceTrackerCustomizer(context, racingEventService));
|
||||
masterDataImportClassLoaderServiceTracker.open();
|
||||
|
||||
polarDataServiceTracker = new ServiceTracker<PolarDataService, PolarDataService>(context,
|
||||
PolarDataService.class, new PolarDataServiceTrackerCustomizer(context, racingEventService));
|
||||
polarDataServiceTracker.open();
|
||||
|
||||
// register the racing service in the OSGi registry
|
||||
racingEventService.setBundleContext(context);
|
||||
@@ -156,5 +163,34 @@ public class Activator implements BundleActivator {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class PolarDataServiceTrackerCustomizer implements
|
||||
ServiceTrackerCustomizer<PolarDataService, PolarDataService> {
|
||||
|
||||
private final BundleContext context;
|
||||
private RacingEventServiceImpl racingEventService;
|
||||
|
||||
public PolarDataServiceTrackerCustomizer(BundleContext context, RacingEventServiceImpl racingEventService) {
|
||||
this.context = context;
|
||||
this.racingEventService = racingEventService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PolarDataService addingService(ServiceReference<PolarDataService> reference) {
|
||||
PolarDataService service = context.getService(reference);
|
||||
racingEventService.setPolarDataService(service);
|
||||
return service;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void modifiedService(ServiceReference<PolarDataService> reference, PolarDataService service) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removedService(ServiceReference<PolarDataService> reference, PolarDataService service) {
|
||||
racingEventService.unsetPolarDataService(service);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+18
-15
@@ -27,12 +27,9 @@ import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@@ -124,6 +121,7 @@ import com.sap.sailing.domain.persistence.PersistenceFactory;
|
||||
import com.sap.sailing.domain.persistence.media.MediaDB;
|
||||
import com.sap.sailing.domain.persistence.media.MediaDBFactory;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.MongoGPSFixStoreFactory;
|
||||
import com.sap.sailing.domain.polars.PolarDataService;
|
||||
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
|
||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
||||
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
|
||||
@@ -153,8 +151,6 @@ import com.sap.sailing.domain.tracking.impl.AbstractRaceChangeListener;
|
||||
import com.sap.sailing.domain.tracking.impl.DynamicGPSFixTrackImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl;
|
||||
import com.sap.sailing.expeditionconnector.ExpeditionWindTrackerFactory;
|
||||
import com.sap.sailing.polars.PolarDataService;
|
||||
import com.sap.sailing.polars.factory.PolarDataServiceFactory;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.Replicator;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeserializer;
|
||||
@@ -351,7 +347,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
private final AbstractLogEventAuthor raceLogEventAuthorForServer = new LogEventAuthorImpl(
|
||||
RacingEventService.class.getName(), 0);
|
||||
|
||||
private final PolarDataService polarDataService;
|
||||
private PolarDataService polarDataService;
|
||||
|
||||
/**
|
||||
* Allow only one master data import at a time to avoid situation where multiple Imports override each other in
|
||||
@@ -504,13 +500,6 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
operationExecutionListeners = new ConcurrentHashMap<>();
|
||||
courseListeners = new ConcurrentHashMap<>();
|
||||
persistentRegattasForRaceIDs = new ConcurrentHashMap<>();
|
||||
final int THREAD_POOL_SIZE = Math.max(Runtime.getRuntime().availableProcessors(), 3);
|
||||
// TODO find out how many executors we have on server side and how to manage them
|
||||
Executor polarExecutor = new ThreadPoolExecutor(/* corePoolSize */THREAD_POOL_SIZE,
|
||||
/* maximumPoolSize */THREAD_POOL_SIZE,
|
||||
/* keepAliveTime */60, TimeUnit.SECONDS,
|
||||
/* workQueue */new LinkedBlockingQueue<Runnable>());
|
||||
polarDataService = PolarDataServiceFactory.createStandardPolarDataService(polarExecutor);
|
||||
this.raceLogReplicator = new RaceLogReplicator(this);
|
||||
this.regattaLogReplicator = new RegattaLogReplicator(this);
|
||||
this.raceLogScoringReplicator = new RaceLogScoringReplicator(this);
|
||||
@@ -1539,14 +1528,18 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
|
||||
@Override
|
||||
public void competitorPositionChanged(GPSFixMoving fix, Competitor item) {
|
||||
polarDataService.competitorPositionChanged(fix, item, race);
|
||||
if (polarDataService != null) {
|
||||
polarDataService.competitorPositionChanged(fix, item, race);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void statusChanged(TrackedRaceStatus newStatus, TrackedRaceStatus oldStatus) {
|
||||
if (oldStatus.getStatus() == TrackedRaceStatusEnum.LOADING
|
||||
&& newStatus.getStatus() != TrackedRaceStatusEnum.LOADING) {
|
||||
polarDataService.raceFinishedLoading(race);
|
||||
if (polarDataService != null) {
|
||||
polarDataService.raceFinishedLoading(race);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3113,4 +3106,14 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
JoinedClassLoader joinedClassLoader = new JoinedClassLoader(masterDataClassLoaders);
|
||||
return joinedClassLoader;
|
||||
}
|
||||
|
||||
public void setPolarDataService(PolarDataService service) {
|
||||
polarDataService = service;
|
||||
}
|
||||
|
||||
public void unsetPolarDataService(PolarDataService service) {
|
||||
if (this.polarDataService.equals(service)) {
|
||||
polarDataService = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user