diff options
6 files changed, 30 insertions, 18 deletions
diff --git a/buildSrc/src/main/groovy/refinery-java-application.gradle b/buildSrc/src/main/groovy/refinery-java-application.gradle index 9abfc2b3..c38ccdb3 100644 --- a/buildSrc/src/main/groovy/refinery-java-application.gradle +++ b/buildSrc/src/main/groovy/refinery-java-application.gradle | |||
@@ -4,10 +4,6 @@ plugins { | |||
4 | id 'refinery-java-conventions' | 4 | id 'refinery-java-conventions' |
5 | } | 5 | } |
6 | 6 | ||
7 | application { | ||
8 | applicationDefaultJvmArgs += '--enable-preview' | ||
9 | } | ||
10 | |||
11 | for (taskName in ['distTar', 'distZip', 'shadowDistTar', 'shadowDistZip']) { | 7 | for (taskName in ['distTar', 'distZip', 'shadowDistTar', 'shadowDistZip']) { |
12 | tasks.named(taskName) { | 8 | tasks.named(taskName) { |
13 | enabled = false | 9 | enabled = false |
diff --git a/buildSrc/src/main/groovy/refinery-java-conventions.gradle b/buildSrc/src/main/groovy/refinery-java-conventions.gradle index 3e59353e..f25be620 100644 --- a/buildSrc/src/main/groovy/refinery-java-conventions.gradle +++ b/buildSrc/src/main/groovy/refinery-java-conventions.gradle | |||
@@ -26,6 +26,10 @@ java.toolchain { | |||
26 | languageVersion = JavaLanguageVersion.of(19) | 26 | languageVersion = JavaLanguageVersion.of(19) |
27 | } | 27 | } |
28 | 28 | ||
29 | tasks.withType(JavaCompile) { | ||
30 | options.release = 17 | ||
31 | } | ||
32 | |||
29 | def jacocoTestReport = tasks.named('jacocoTestReport') | 33 | def jacocoTestReport = tasks.named('jacocoTestReport') |
30 | jacocoTestReport.configure { | 34 | jacocoTestReport.configure { |
31 | dependsOn test | 35 | dependsOn test |
@@ -55,18 +59,6 @@ tasks.named('jar') { | |||
55 | } | 59 | } |
56 | } | 60 | } |
57 | 61 | ||
58 | tasks.withType(JavaCompile) { | ||
59 | options.compilerArgs += '--enable-preview' | ||
60 | } | ||
61 | |||
62 | tasks.withType(Test) { | ||
63 | jvmArgs += '--enable-preview' | ||
64 | } | ||
65 | |||
66 | tasks.withType(JavaExec) { | ||
67 | jvmArgs += '--enable-preview' | ||
68 | } | ||
69 | |||
70 | def generateEclipseSourceFolders = tasks.register('generateEclipseSourceFolders') | 62 | def generateEclipseSourceFolders = tasks.register('generateEclipseSourceFolders') |
71 | 63 | ||
72 | tasks.register('prepareEclipse') { | 64 | tasks.register('prepareEclipse') { |
diff --git a/subprojects/language-web/build.gradle b/subprojects/language-web/build.gradle index 9c1d93f3..8d277a5b 100644 --- a/subprojects/language-web/build.gradle +++ b/subprojects/language-web/build.gradle | |||
@@ -40,6 +40,18 @@ for (taskName in ['compileJava', 'processResources']) { | |||
40 | 40 | ||
41 | mainClassName = 'tools.refinery.language.web.ServerLauncher' | 41 | mainClassName = 'tools.refinery.language.web.ServerLauncher' |
42 | 42 | ||
43 | // Enable JDK 19 preview features for virtual thread support. | ||
44 | application { | ||
45 | applicationDefaultJvmArgs += '--enable-preview' | ||
46 | } | ||
47 | tasks.withType(JavaCompile) { | ||
48 | options.release = 19 | ||
49 | options.compilerArgs += '--enable-preview' | ||
50 | } | ||
51 | tasks.withType(Test) { | ||
52 | jvmArgs += '--enable-preview' | ||
53 | } | ||
54 | |||
43 | tasks.named('jar') { | 55 | tasks.named('jar') { |
44 | dependsOn project.configurations.webapp | 56 | dependsOn project.configurations.webapp |
45 | from(project.configurations.webapp) { | 57 | from(project.configurations.webapp) { |
@@ -65,6 +77,8 @@ tasks.register('serveBackend', JavaExec) { | |||
65 | dependsOn sourceSets.main.runtimeClasspath | 77 | dependsOn sourceSets.main.runtimeClasspath |
66 | classpath = sourceSets.main.runtimeClasspath | 78 | classpath = sourceSets.main.runtimeClasspath |
67 | mainClass = mainClassName | 79 | mainClass = mainClassName |
80 | // Enable JDK 19 preview features for virtual thread support. | ||
81 | jvmArgs += '--enable-preview' | ||
68 | standardInput = System.in | 82 | standardInput = System.in |
69 | def baseResource = project.configurations.webapp.incoming.artifacts.artifactFiles.first() | 83 | def baseResource = project.configurations.webapp.incoming.artifacts.artifactFiles.first() |
70 | environment BASE_RESOURCE: baseResource | 84 | environment BASE_RESOURCE: baseResource |
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 5da16850..960eef71 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 | |||
@@ -45,6 +45,7 @@ public class ServerLauncher { | |||
45 | 45 | ||
46 | public ServerLauncher(InetSocketAddress bindAddress, String[] allowedOrigins, String webSocketUrl) { | 46 | public ServerLauncher(InetSocketAddress bindAddress, String[] allowedOrigins, String webSocketUrl) { |
47 | server = new Server(bindAddress); | 47 | server = new Server(bindAddress); |
48 | enableVirtualThreads(server); | ||
48 | if (server.getThreadPool() instanceof VirtualThreads.Configurable virtualThreadsConfigurable) { | 49 | if (server.getThreadPool() instanceof VirtualThreads.Configurable virtualThreadsConfigurable) { |
49 | // Change this to setVirtualThreadsExecutor once | 50 | // Change this to setVirtualThreadsExecutor once |
50 | // https://github.com/eclipse/jetty.project/commit/83154b4ffe4767ef44981598d6c26e6a5d32e57c gets released. | 51 | // https://github.com/eclipse/jetty.project/commit/83154b4ffe4767ef44981598d6c26e6a5d32e57c gets released. |
@@ -149,6 +150,14 @@ public class ServerLauncher { | |||
149 | } | 150 | } |
150 | } | 151 | } |
151 | 152 | ||
153 | public static void enableVirtualThreads(Server server) { | ||
154 | if (server.getThreadPool() instanceof VirtualThreads.Configurable virtualThreadsConfigurable) { | ||
155 | // Change this to setVirtualThreadsExecutor once | ||
156 | // https://github.com/eclipse/jetty.project/commit/83154b4ffe4767ef44981598d6c26e6a5d32e57c gets released. | ||
157 | virtualThreadsConfigurable.setUseVirtualThreads(VirtualThreads.areSupported()); | ||
158 | } | ||
159 | } | ||
160 | |||
152 | private static String getListenAddress() { | 161 | private static String getListenAddress() { |
153 | var listenAddress = System.getenv("LISTEN_ADDRESS"); | 162 | var listenAddress = System.getenv("LISTEN_ADDRESS"); |
154 | if (listenAddress == null) { | 163 | if (listenAddress == null) { |
diff --git a/subprojects/language-web/src/test/java/tools/refinery/language/web/ProblemWebSocketServletIntegrationTest.java b/subprojects/language-web/src/test/java/tools/refinery/language/web/ProblemWebSocketServletIntegrationTest.java index 6dfce780..24fab4e3 100644 --- a/subprojects/language-web/src/test/java/tools/refinery/language/web/ProblemWebSocketServletIntegrationTest.java +++ b/subprojects/language-web/src/test/java/tools/refinery/language/web/ProblemWebSocketServletIntegrationTest.java | |||
@@ -177,6 +177,7 @@ class ProblemWebSocketServletIntegrationTest { | |||
177 | 177 | ||
178 | private void startServer(String allowedOrigins) { | 178 | private void startServer(String allowedOrigins) { |
179 | server = new Server(new InetSocketAddress(SERVER_PORT)); | 179 | server = new Server(new InetSocketAddress(SERVER_PORT)); |
180 | ServerLauncher.enableVirtualThreads(server); | ||
180 | var handler = new ServletContextHandler(); | 181 | var handler = new ServletContextHandler(); |
181 | var holder = new ServletHolder(ProblemWebSocketServlet.class); | 182 | var holder = new ServletHolder(ProblemWebSocketServlet.class); |
182 | if (allowedOrigins != null) { | 183 | if (allowedOrigins != null) { |
diff --git a/subprojects/language-web/src/test/java/tools/refinery/language/web/tests/AwaitTerminationExecutorServiceProvider.java b/subprojects/language-web/src/test/java/tools/refinery/language/web/tests/AwaitTerminationExecutorServiceProvider.java index ebf36f13..25343109 100644 --- a/subprojects/language-web/src/test/java/tools/refinery/language/web/tests/AwaitTerminationExecutorServiceProvider.java +++ b/subprojects/language-web/src/test/java/tools/refinery/language/web/tests/AwaitTerminationExecutorServiceProvider.java | |||
@@ -1,14 +1,14 @@ | |||
1 | package tools.refinery.language.web.tests; | 1 | package tools.refinery.language.web.tests; |
2 | 2 | ||
3 | import com.google.inject.Singleton; | 3 | import com.google.inject.Singleton; |
4 | import org.eclipse.xtext.ide.ExecutorServiceProvider; | 4 | import tools.refinery.language.web.xtext.VirtualThreadExecutorServiceProvider; |
5 | 5 | ||
6 | import java.util.ArrayList; | 6 | import java.util.ArrayList; |
7 | import java.util.List; | 7 | import java.util.List; |
8 | import java.util.concurrent.ExecutorService; | 8 | import java.util.concurrent.ExecutorService; |
9 | 9 | ||
10 | @Singleton | 10 | @Singleton |
11 | public class AwaitTerminationExecutorServiceProvider extends ExecutorServiceProvider { | 11 | public class AwaitTerminationExecutorServiceProvider extends VirtualThreadExecutorServiceProvider { |
12 | private final List<RestartableCachedThreadPool> servicesToShutDown = new ArrayList<>(); | 12 | private final List<RestartableCachedThreadPool> servicesToShutDown = new ArrayList<>(); |
13 | 13 | ||
14 | @Override | 14 | @Override |