From 300e8510a9491b6ecb52f178ca5bf890ec2f3776 Mon Sep 17 00:00:00 2001 From: uhensler <urs.hensler@frentix.com> Date: Tue, 17 Dec 2019 07:27:28 +0100 Subject: [PATCH] OO-4357: Use only one thread pool to watch live stream events --- .../nodes/livestream/LiveStreamService.java | 3 +++ ...iceImpl.java => LiveStreamServiceImpl.java} | 18 ++++++++++++++++-- .../livestream/ui/LiveStreamsController.java | 17 +++++++++++------ 3 files changed, 30 insertions(+), 8 deletions(-) rename src/main/java/org/olat/course/nodes/livestream/manager/{LIveStreamServiceImpl.java => LiveStreamServiceImpl.java} (88%) diff --git a/src/main/java/org/olat/course/nodes/livestream/LiveStreamService.java b/src/main/java/org/olat/course/nodes/livestream/LiveStreamService.java index 5ffc1a1f51d..e642a0eb71f 100644 --- a/src/main/java/org/olat/course/nodes/livestream/LiveStreamService.java +++ b/src/main/java/org/olat/course/nodes/livestream/LiveStreamService.java @@ -20,6 +20,7 @@ package org.olat.course.nodes.livestream; import java.util.List; +import java.util.concurrent.ScheduledExecutorService; import org.olat.course.nodes.cal.CourseCalendars; @@ -31,6 +32,8 @@ import org.olat.course.nodes.cal.CourseCalendars; */ public interface LiveStreamService { + ScheduledExecutorService getScheduler(); + List<? extends LiveStreamEvent> getRunningEvents(CourseCalendars calendars, int bufferBeforeMin, int bufferAfterMin); diff --git a/src/main/java/org/olat/course/nodes/livestream/manager/LIveStreamServiceImpl.java b/src/main/java/org/olat/course/nodes/livestream/manager/LiveStreamServiceImpl.java similarity index 88% rename from src/main/java/org/olat/course/nodes/livestream/manager/LIveStreamServiceImpl.java rename to src/main/java/org/olat/course/nodes/livestream/manager/LiveStreamServiceImpl.java index db1bc78323f..5b7a52b92f5 100644 --- a/src/main/java/org/olat/course/nodes/livestream/manager/LIveStreamServiceImpl.java +++ b/src/main/java/org/olat/course/nodes/livestream/manager/LiveStreamServiceImpl.java @@ -23,6 +23,9 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -35,6 +38,7 @@ import org.olat.course.nodes.livestream.LiveStreamEvent; import org.olat.course.nodes.livestream.LiveStreamService; import org.olat.course.nodes.livestream.model.LiveStreamEventImpl; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.concurrent.CustomizableThreadFactory; import org.springframework.stereotype.Service; /** @@ -44,11 +48,22 @@ import org.springframework.stereotype.Service; * */ @Service -public class LIveStreamServiceImpl implements LiveStreamService { +public class LiveStreamServiceImpl implements LiveStreamService { + + private ScheduledExecutorService scheduler; @Autowired private CalendarManager calendarManager; + @Override + public ScheduledExecutorService getScheduler() { + if (scheduler == null) { + ThreadFactory threadFactory = new CustomizableThreadFactory("oo-livestream-"); + scheduler = Executors.newScheduledThreadPool(1, threadFactory); + } + return scheduler; + } + @Override public List<? extends LiveStreamEvent> getRunningEvents(CourseCalendars calendars, int bufferBeforeMin, int bufferAfterMin) { @@ -132,5 +147,4 @@ public class LIveStreamServiceImpl implements LiveStreamService { } return liveStreamEvent; } - } diff --git a/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamsController.java b/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamsController.java index 58ea48fa253..8cf2a144172 100644 --- a/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamsController.java +++ b/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamsController.java @@ -19,8 +19,8 @@ */ package org.olat.course.nodes.livestream.ui; -import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import org.apache.logging.log4j.Logger; @@ -33,7 +33,9 @@ import org.olat.core.gui.control.controller.BasicController; import org.olat.core.logging.Tracing; import org.olat.core.util.UserSession; import org.olat.course.nodes.cal.CourseCalendars; +import org.olat.course.nodes.livestream.LiveStreamService; import org.olat.modules.ModuleConfiguration; +import org.springframework.beans.factory.annotation.Autowired; /** * @@ -49,8 +51,11 @@ public class LiveStreamsController extends BasicController { private LiveStreamViewersController viewersCtrl; private LiveStreamListController listCtrl; + + private final ScheduledFuture<?> refreshFuture; - private ScheduledExecutorService scheduler; + @Autowired + private LiveStreamService liveStreamService; public LiveStreamsController(UserRequest ureq, WindowControl wControl, ModuleConfiguration moduleConfiguration, CourseCalendars calendars) { @@ -65,9 +70,9 @@ public class LiveStreamsController extends BasicController { listenTo(listCtrl); mainVC.put("list", listCtrl.getInitialComponent()); - scheduler = Executors.newScheduledThreadPool(1); - scheduler.scheduleAtFixedRate(new RefreshTask(ureq.getUserSession()), 10, 10, TimeUnit.SECONDS); - + ScheduledExecutorService scheduler = liveStreamService.getScheduler(); + refreshFuture = scheduler.scheduleAtFixedRate(new RefreshTask(ureq.getUserSession()), 10, 10, TimeUnit.SECONDS); + putInitialPanel(mainVC); } @@ -84,7 +89,7 @@ public class LiveStreamsController extends BasicController { @Override protected void doDispose() { - scheduler.shutdown(); + refreshFuture.cancel(true); } private final class RefreshTask implements Runnable { -- GitLab