static <T> PVDirector<T> prepareDirector(PVReaderConfiguration<T> readConfiguration) { PVDirector<T> director = new PVDirector<>(readConfiguration.pv, readConfiguration.aggregatedFunction, PVManager.getReadScannerExecutorService(), readConfiguration.notificationExecutor, readConfiguration.dataSource, readConfiguration.exceptionHandler); if (readConfiguration.timeout != null) { if (readConfiguration.timeoutMessage == null) readConfiguration.timeoutMessage = "Read timeout"; director.readTimeout(readConfiguration.timeout, readConfiguration.timeoutMessage); } return director; }
static <T> PVWriterDirector<T> prepareDirector(PVWriterConfiguration<T> writerConfiguration) { PVWriterDirector<T> writerDirector = new PVWriterDirector<T>(writerConfiguration.pvWriter, writerConfiguration.writeFunction, writerConfiguration.dataSource, PVManager.getAsyncWriteExecutor(), writerConfiguration.notificationExecutor, PVManager.getReadScannerExecutorService(), writerConfiguration.timeout, writerConfiguration.timeoutMessage, writerConfiguration.exceptionHandler); writerDirector.connectExpression(writerConfiguration.writeExpression); writerConfiguration.pvWriter.setWriteDirector(writerDirector); return writerDirector; }
static <T> void prepareDecoupler(PVWriterDirector<T> director, PVWriterConfiguration<T> writerConfiguration) { ScannerParameters scannerParameters = new ScannerParameters() .writerDirector(director) .scannerExecutor(PVManager.getReadScannerExecutorService()) .maxDuration(Duration.ofMillis(100)); scannerParameters.type(ScannerParameters.Type.PASSIVE); SourceDesiredRateDecoupler rateDecoupler = scannerParameters.build(); director.setScanner(rateDecoupler); rateDecoupler.start(); }
static <T> void prepareDecoupler(PVDirector<T> director, PVReaderConfiguration<T> readConfiguration) { ScannerParameters scannerParameters = new ScannerParameters() .readerDirector(director) .scannerExecutor(PVManager.getReadScannerExecutorService()) .maxDuration(readConfiguration.maxRate); if (readConfiguration.aggregatedFunction instanceof Collector || readConfiguration.aggregatedFunction instanceof ValueCache) { scannerParameters.type(ScannerParameters.Type.PASSIVE); } else { scannerParameters.type(ScannerParameters.Type.ACTIVE); } SourceDesiredRateDecoupler rateDecoupler = scannerParameters.build(); readConfiguration.pv.setDirector(director); director.setScanner(rateDecoupler); director.connectReadExpression(readConfiguration.aggregatedPVExpression); rateDecoupler.start(); }