diff options
Diffstat (limited to 'subprojects/language-web/src/main/java')
4 files changed, 3 insertions, 85 deletions
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/ProblemWebModule.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/ProblemWebModule.java index 12e39e55..b0197c01 100644 --- a/subprojects/language-web/src/main/java/tools/refinery/language/web/ProblemWebModule.java +++ b/subprojects/language-web/src/main/java/tools/refinery/language/web/ProblemWebModule.java | |||
@@ -9,13 +9,11 @@ | |||
9 | */ | 9 | */ |
10 | package tools.refinery.language.web; | 10 | package tools.refinery.language.web; |
11 | 11 | ||
12 | import org.eclipse.xtext.ide.ExecutorServiceProvider; | ||
13 | import org.eclipse.xtext.web.server.XtextServiceDispatcher; | 12 | import org.eclipse.xtext.web.server.XtextServiceDispatcher; |
14 | import org.eclipse.xtext.web.server.model.IWebDocumentProvider; | 13 | import org.eclipse.xtext.web.server.model.IWebDocumentProvider; |
15 | import org.eclipse.xtext.web.server.model.XtextWebDocumentAccess; | 14 | import org.eclipse.xtext.web.server.model.XtextWebDocumentAccess; |
16 | import org.eclipse.xtext.web.server.occurrences.OccurrencesService; | 15 | import org.eclipse.xtext.web.server.occurrences.OccurrencesService; |
17 | import tools.refinery.language.web.occurrences.ProblemOccurrencesService; | 16 | import tools.refinery.language.web.occurrences.ProblemOccurrencesService; |
18 | import tools.refinery.language.web.xtext.VirtualThreadExecutorServiceProvider; | ||
19 | import tools.refinery.language.web.xtext.server.push.PushServiceDispatcher; | 17 | import tools.refinery.language.web.xtext.server.push.PushServiceDispatcher; |
20 | import tools.refinery.language.web.xtext.server.push.PushWebDocumentAccess; | 18 | import tools.refinery.language.web.xtext.server.push.PushWebDocumentAccess; |
21 | import tools.refinery.language.web.xtext.server.push.PushWebDocumentProvider; | 19 | import tools.refinery.language.web.xtext.server.push.PushWebDocumentProvider; |
@@ -39,8 +37,4 @@ public class ProblemWebModule extends AbstractProblemWebModule { | |||
39 | public Class<? extends OccurrencesService> bindOccurrencesService() { | 37 | public Class<? extends OccurrencesService> bindOccurrencesService() { |
40 | return ProblemOccurrencesService.class; | 38 | return ProblemOccurrencesService.class; |
41 | } | 39 | } |
42 | |||
43 | public Class<? extends ExecutorServiceProvider> bindExecutorServiceProvider() { | ||
44 | return VirtualThreadExecutorServiceProvider.class; | ||
45 | } | ||
46 | } | 40 | } |
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/ServerLauncher.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/ServerLauncher.java index 1924f661..ad19e77d 100644 --- a/subprojects/language-web/src/main/java/tools/refinery/language/web/ServerLauncher.java +++ b/subprojects/language-web/src/main/java/tools/refinery/language/web/ServerLauncher.java | |||
@@ -19,6 +19,7 @@ import org.eclipse.jetty.ee10.websocket.server.config.JettyWebSocketServletConta | |||
19 | import org.eclipse.jetty.server.Server; | 19 | import org.eclipse.jetty.server.Server; |
20 | import org.eclipse.jetty.util.resource.Resource; | 20 | import org.eclipse.jetty.util.resource.Resource; |
21 | import org.eclipse.jetty.util.resource.ResourceFactory; | 21 | import org.eclipse.jetty.util.resource.ResourceFactory; |
22 | import org.eclipse.jetty.util.thread.QueuedThreadPool; | ||
22 | import org.slf4j.Logger; | 23 | import org.slf4j.Logger; |
23 | import org.slf4j.LoggerFactory; | 24 | import org.slf4j.LoggerFactory; |
24 | import tools.refinery.language.web.config.BackendConfigServlet; | 25 | import tools.refinery.language.web.config.BackendConfigServlet; |
@@ -49,7 +50,8 @@ public class ServerLauncher { | |||
49 | private final Server server; | 50 | private final Server server; |
50 | 51 | ||
51 | public ServerLauncher(InetSocketAddress bindAddress, String[] allowedOrigins, String webSocketUrl) { | 52 | public ServerLauncher(InetSocketAddress bindAddress, String[] allowedOrigins, String webSocketUrl) { |
52 | server = VirtualThreadUtils.newServerWithVirtualThreadsThreadPool("jetty", bindAddress); | 53 | server = new Server(bindAddress); |
54 | ((QueuedThreadPool) server.getThreadPool()).setName("jetty"); | ||
53 | var handler = new ServletContextHandler(); | 55 | var handler = new ServletContextHandler(); |
54 | addSessionHandler(handler); | 56 | addSessionHandler(handler); |
55 | addProblemServlet(handler, allowedOrigins); | 57 | addProblemServlet(handler, allowedOrigins); |
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/VirtualThreadUtils.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/VirtualThreadUtils.java deleted file mode 100644 index 27802e0c..00000000 --- a/subprojects/language-web/src/main/java/tools/refinery/language/web/VirtualThreadUtils.java +++ /dev/null | |||
@@ -1,57 +0,0 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.web; | ||
7 | |||
8 | import org.eclipse.jetty.server.Server; | ||
9 | import org.eclipse.jetty.server.ServerConnector; | ||
10 | import org.eclipse.jetty.util.thread.QueuedThreadPool; | ||
11 | import org.eclipse.jetty.util.thread.ThreadPool; | ||
12 | |||
13 | import java.net.InetSocketAddress; | ||
14 | import java.time.Duration; | ||
15 | import java.util.concurrent.ExecutorService; | ||
16 | import java.util.concurrent.Executors; | ||
17 | |||
18 | public final class VirtualThreadUtils { | ||
19 | private VirtualThreadUtils() { | ||
20 | throw new IllegalStateException("This is a static utility class and should not be instantiated directly"); | ||
21 | } | ||
22 | |||
23 | public static ExecutorService newNamedVirtualThreadsExecutor(String name) { | ||
24 | // Based on | ||
25 | // https://github.com/eclipse/jetty.project/blob/83154b4ffe4767ef44981598d6c26e6a5d32e57c/jetty-server/src/main/config/etc/jetty-threadpool-virtual-preview.xml | ||
26 | return Executors.newThreadPerTaskExecutor(Thread.ofVirtual() | ||
27 | .allowSetThreadLocals(true) | ||
28 | .inheritInheritableThreadLocals(false) | ||
29 | .name(name + "-virtual-", 0) | ||
30 | .factory()); | ||
31 | } | ||
32 | |||
33 | public static ThreadPool newThreadPoolWithVirtualThreadsExecutor(String name) { | ||
34 | // Based on | ||
35 | // https://github.com/eclipse/jetty.project/blob/83154b4ffe4767ef44981598d6c26e6a5d32e57c/jetty-server/src/main/config/etc/jetty-threadpool-virtual-preview.xml | ||
36 | int timeout = (int) Duration.ofMinutes(1).toMillis(); | ||
37 | var threadPool = new QueuedThreadPool(200, 10, timeout, -1, null, null); | ||
38 | threadPool.setName(name); | ||
39 | threadPool.setDetailedDump(false); | ||
40 | threadPool.setVirtualThreadsExecutor(newNamedVirtualThreadsExecutor(name)); | ||
41 | return threadPool; | ||
42 | } | ||
43 | |||
44 | public static Server newServerWithVirtualThreadsThreadPool(String name, InetSocketAddress listenAddress) { | ||
45 | var server = new Server(newThreadPoolWithVirtualThreadsExecutor(name)); | ||
46 | var connector = new ServerConnector(server); | ||
47 | try { | ||
48 | connector.setHost(listenAddress.getHostName()); | ||
49 | connector.setPort(listenAddress.getPort()); | ||
50 | server.addConnector(connector); | ||
51 | } catch (Exception e) { | ||
52 | connector.close(); | ||
53 | throw e; | ||
54 | } | ||
55 | return server; | ||
56 | } | ||
57 | } | ||
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/xtext/VirtualThreadExecutorServiceProvider.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/xtext/VirtualThreadExecutorServiceProvider.java deleted file mode 100644 index 699a09ab..00000000 --- a/subprojects/language-web/src/main/java/tools/refinery/language/web/xtext/VirtualThreadExecutorServiceProvider.java +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.web.xtext; | ||
7 | |||
8 | import org.eclipse.xtext.ide.ExecutorServiceProvider; | ||
9 | import tools.refinery.language.web.VirtualThreadUtils; | ||
10 | |||
11 | import java.util.concurrent.ExecutorService; | ||
12 | |||
13 | public class VirtualThreadExecutorServiceProvider extends ExecutorServiceProvider { | ||
14 | private static final String THREAD_POOL_NAME = "xtextWeb"; | ||
15 | |||
16 | @Override | ||
17 | protected ExecutorService createInstance(String key) { | ||
18 | var name = key == null ? THREAD_POOL_NAME : THREAD_POOL_NAME + "-" + key; | ||
19 | return VirtualThreadUtils.newNamedVirtualThreadsExecutor(name); | ||
20 | } | ||
21 | } | ||