diff options
author | Kristóf Marussy <kristof@marussy.com> | 2023-04-15 19:30:22 +0200 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2023-04-15 19:30:22 +0200 |
commit | 7c06c952c366deae06c7b138df26debea8a4ebc2 (patch) | |
tree | c1055f06a170cc8a6a194eb1acdc93887b0787cb /subprojects/language-web/src/main | |
parent | chore(deps): bump dependencies (diff) | |
download | refinery-7c06c952c366deae06c7b138df26debea8a4ebc2.tar.gz refinery-7c06c952c366deae06c7b138df26debea8a4ebc2.tar.zst refinery-7c06c952c366deae06c7b138df26debea8a4ebc2.zip |
refactor: remove virtual thread support
Java 19 is out of support, but Gradle current does not run on Java 20:
https://github.com/gradle/gradle/issues/23488
To avoid the complexity of running the build tool on a different JDK than the
application, we temporarily remove code that depends on experimental Java 19 or
Java 20 features.
Revert once the build can run on Java 20.
Diffstat (limited to 'subprojects/language-web/src/main')
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 | } | ||