aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language-web/src/main/java
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-04-15 19:30:22 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-04-15 19:30:22 +0200
commit7c06c952c366deae06c7b138df26debea8a4ebc2 (patch)
treec1055f06a170cc8a6a194eb1acdc93887b0787cb /subprojects/language-web/src/main/java
parentchore(deps): bump dependencies (diff)
downloadrefinery-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/java')
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/ProblemWebModule.java6
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/ServerLauncher.java4
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/VirtualThreadUtils.java57
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/xtext/VirtualThreadExecutorServiceProvider.java21
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 */
10package tools.refinery.language.web; 10package tools.refinery.language.web;
11 11
12import org.eclipse.xtext.ide.ExecutorServiceProvider;
13import org.eclipse.xtext.web.server.XtextServiceDispatcher; 12import org.eclipse.xtext.web.server.XtextServiceDispatcher;
14import org.eclipse.xtext.web.server.model.IWebDocumentProvider; 13import org.eclipse.xtext.web.server.model.IWebDocumentProvider;
15import org.eclipse.xtext.web.server.model.XtextWebDocumentAccess; 14import org.eclipse.xtext.web.server.model.XtextWebDocumentAccess;
16import org.eclipse.xtext.web.server.occurrences.OccurrencesService; 15import org.eclipse.xtext.web.server.occurrences.OccurrencesService;
17import tools.refinery.language.web.occurrences.ProblemOccurrencesService; 16import tools.refinery.language.web.occurrences.ProblemOccurrencesService;
18import tools.refinery.language.web.xtext.VirtualThreadExecutorServiceProvider;
19import tools.refinery.language.web.xtext.server.push.PushServiceDispatcher; 17import tools.refinery.language.web.xtext.server.push.PushServiceDispatcher;
20import tools.refinery.language.web.xtext.server.push.PushWebDocumentAccess; 18import tools.refinery.language.web.xtext.server.push.PushWebDocumentAccess;
21import tools.refinery.language.web.xtext.server.push.PushWebDocumentProvider; 19import 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
19import org.eclipse.jetty.server.Server; 19import org.eclipse.jetty.server.Server;
20import org.eclipse.jetty.util.resource.Resource; 20import org.eclipse.jetty.util.resource.Resource;
21import org.eclipse.jetty.util.resource.ResourceFactory; 21import org.eclipse.jetty.util.resource.ResourceFactory;
22import org.eclipse.jetty.util.thread.QueuedThreadPool;
22import org.slf4j.Logger; 23import org.slf4j.Logger;
23import org.slf4j.LoggerFactory; 24import org.slf4j.LoggerFactory;
24import tools.refinery.language.web.config.BackendConfigServlet; 25import 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 */
6package tools.refinery.language.web;
7
8import org.eclipse.jetty.server.Server;
9import org.eclipse.jetty.server.ServerConnector;
10import org.eclipse.jetty.util.thread.QueuedThreadPool;
11import org.eclipse.jetty.util.thread.ThreadPool;
12
13import java.net.InetSocketAddress;
14import java.time.Duration;
15import java.util.concurrent.ExecutorService;
16import java.util.concurrent.Executors;
17
18public 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 */
6package tools.refinery.language.web.xtext;
7
8import org.eclipse.xtext.ide.ExecutorServiceProvider;
9import tools.refinery.language.web.VirtualThreadUtils;
10
11import java.util.concurrent.ExecutorService;
12
13public 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}