Skip to content

Commit e6bd9cf

Browse files
authored
Merge pull request #32701 from njr-11/32700-illegal-arg-exception-in-test-for-virtual-true-on-java-17
virtual=true is not allowed in server.xml for Java SE 17
2 parents ffb2bed + 824f8ab commit e6bd9cf

File tree

2 files changed

+81
-49
lines changed

2 files changed

+81
-49
lines changed

dev/com.ibm.ws.concurrent_fat_no_vt/fat/src/test/concurrent/no/vt/ConcurrentVirtualThreadsDisabledTest.java

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -74,33 +74,35 @@ public static void setUp() throws Exception {
7474
@AfterClass
7575
public static void tearDown() throws Exception {
7676
try {
77-
List<String> mtfMessages = server.findStringsInLogs("CWWKC1108I");
78-
79-
assertContains("concurrent/ServerXMLThreadFactoryToOverride",
80-
mtfMessages);
81-
assertContains("java:comp/concurrent/WebXMLThreadFactoryToOverride",
82-
mtfMessages);
83-
assertContains("java:module/concurrent/AnnoThreadFactoryToOverride",
84-
mtfMessages);
85-
86-
assertEquals(mtfMessages.toString(), 3, mtfMessages.size());
87-
88-
List<String> policyMessages = server.findStringsInLogs("CWWKE1208I");
89-
90-
assertContains("application[ConcurrentNoVTWeb]/managedScheduledExecutorService[java:app/concurrent/AnnoScheduledExecutorToOverride]/concurrencyPolicy",
91-
policyMessages);
92-
assertContains("application[ConcurrentNoVTWeb]/module[ConcurrentNoVTWeb.war]/managedExecutorService[java:comp/concurrent/AnnoExecutorToOverride]/concurrencyPolicy",
93-
policyMessages);
94-
assertContains("application[ConcurrentNoVTWeb]/module[ConcurrentNoVTWeb.war]/managedScheduledExecutorService[java:module/concurrent/WebXMLScheduledExecutorToOverride]/concurrencyPolicy",
95-
policyMessages);
96-
assertContains("managedExecutorService[executorToOverride]/concurrencyPolicy[default-0]",
97-
policyMessages);
98-
assertContains("managedExecutorService[java:global/concurrent/WebXMLExecutorToOverride]/concurrencyPolicy",
99-
policyMessages);
100-
assertContains("virtualThreadPolicyToOverride",
101-
policyMessages);
102-
103-
assertEquals(policyMessages.toString(), 6, policyMessages.size());
77+
if (Runtime.version().feature() >= 21) {
78+
List<String> mtfMessages = server.findStringsInLogs("CWWKC1108I");
79+
80+
assertContains("concurrent/ServerXMLThreadFactoryToOverride",
81+
mtfMessages);
82+
assertContains("java:comp/concurrent/WebXMLThreadFactoryToOverride",
83+
mtfMessages);
84+
assertContains("java:module/concurrent/AnnoThreadFactoryToOverride",
85+
mtfMessages);
86+
87+
assertEquals(mtfMessages.toString(), 3, mtfMessages.size());
88+
89+
List<String> policyMessages = server.findStringsInLogs("CWWKE1208I");
90+
91+
assertContains("application[ConcurrentNoVTWeb]/managedScheduledExecutorService[java:app/concurrent/AnnoScheduledExecutorToOverride]/concurrencyPolicy",
92+
policyMessages);
93+
assertContains("application[ConcurrentNoVTWeb]/module[ConcurrentNoVTWeb.war]/managedExecutorService[java:comp/concurrent/AnnoExecutorToOverride]/concurrencyPolicy",
94+
policyMessages);
95+
assertContains("application[ConcurrentNoVTWeb]/module[ConcurrentNoVTWeb.war]/managedScheduledExecutorService[java:module/concurrent/WebXMLScheduledExecutorToOverride]/concurrencyPolicy",
96+
policyMessages);
97+
assertContains("managedExecutorService[executorToOverride]/concurrencyPolicy[default-0]",
98+
policyMessages);
99+
assertContains("managedExecutorService[java:global/concurrent/WebXMLExecutorToOverride]/concurrencyPolicy",
100+
policyMessages);
101+
assertContains("virtualThreadPolicyToOverride",
102+
policyMessages);
103+
104+
assertEquals(policyMessages.toString(), 6, policyMessages.size());
105+
}
104106
} finally {
105107
server.stopServer();
106108
}

dev/com.ibm.ws.concurrent_fat_no_vt/test-applications/ConcurrentNoVTWeb/src/test/concurrent/no/vt/web/ConcurrentVTDisabledServlet.java

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,10 @@ public void testOverrideVirtualManagedExecutorFromAnno() throws Exception {
132132
}
133133

134134
/**
135-
* A managedExecutor defined in server.xml with virtual=true runs async tasks on
136-
* platform threads instead of virtual threads when the ThreadTypeOverride SPI
137-
* instructs Liberty to avoid creating virtual threads. The task runs
138-
* successfully.
135+
* A managedExecutorService defined in server.xml with virtual=true runs async
136+
* tasks on platform threads instead of virtual threads when the
137+
* ThreadTypeOverride SPI instructs Liberty to avoid creating virtual threads.
138+
* The task runs successfully on Java SE 21+, but is rejected on Java SE 17.
139139
*/
140140
@Test
141141
public void testOverrideVirtualManagedExecutorFromServerXML() throws Exception {
@@ -147,17 +147,32 @@ public void testOverrideVirtualManagedExecutorFromServerXML() throws Exception {
147147
return Thread.currentThread();
148148
};
149149

150-
Future<Thread> future = overriddenManagedExecutorFromServerXML
151-
.invokeAll(List.of(task),
152-
TIMEOUT_NS,
153-
TimeUnit.NANOSECONDS)
154-
.get(0);
150+
if (Runtime.version().feature() == 17)
151+
try {
152+
overriddenManagedExecutorFromServerXML
153+
.invokeAll(List.of(task),
154+
TIMEOUT_NS,
155+
TimeUnit.NANOSECONDS);
156+
fail("Virtual=true should not be allowed on Java SE 17.");
157+
} catch (IllegalArgumentException x) {
158+
if (Runtime.version().feature() == 17)
159+
return; // expected
160+
else
161+
throw x;
162+
}
163+
else {
164+
Future<Thread> future = overriddenManagedExecutorFromServerXML
165+
.invokeAll(List.of(task),
166+
TIMEOUT_NS,
167+
TimeUnit.NANOSECONDS)
168+
.get(0);
155169

156-
assertEquals(true, future.isDone());
170+
assertEquals(true, future.isDone());
157171

158-
Thread thread = future.get();
172+
Thread thread = future.get();
159173

160-
assertEquals(false, isVirtual(thread));
174+
assertEquals(false, isVirtual(thread));
175+
}
161176
}
162177

163178
/**
@@ -206,26 +221,41 @@ public void testOverrideVirtualManagedScheduledExecutorFromAnno() //
206221
}
207222

208223
/**
209-
* A managedScheduledExecutor defined in server.xml with virtual=true runs
224+
* A managedScheduledExecutorService defined in server.xml with virtual=true runs
210225
* async tasks on platform threads instead of virtual threads when the
211226
* ThreadTypeOverride SPI instructs Liberty to avoid creating virtual threads.
212-
* The task runs successfully.
227+
* The task runs successfully on Java SE 21+, but is rejected on Java SE 17.
213228
*/
214229
@Test
215230
public void testOverrideVirtualManagedScheduledExecutorFromServerXML() //
216231
throws Exception {
217232

218233
String testName = "testOverrideVirtualManagedScheduledExecutorFromServerXML";
219-
Future<Thread> future = //
220-
overriddenManagedScheduledExecutorFromServerXML
221-
.submit(() -> {
222-
System.out.println("Task from " + testName);
223-
return Thread.currentThread();
224-
});
234+
Callable<Thread> task = () -> {
235+
System.out.println("Task from " + testName);
236+
return Thread.currentThread();
237+
};
225238

226-
Thread thread = future.get(TIMEOUT_NS, TimeUnit.NANOSECONDS);
239+
if (Runtime.version().feature() == 17)
240+
try {
241+
overriddenManagedScheduledExecutorFromServerXML
242+
.submit(task);
243+
fail("Virtual=true should not be allowed on Java SE 17.");
244+
} catch (IllegalArgumentException x) {
245+
if (Runtime.version().feature() == 17)
246+
return; // expected
247+
else
248+
throw x;
249+
}
250+
else {
251+
Future<Thread> future = //
252+
overriddenManagedScheduledExecutorFromServerXML
253+
.submit(task);
227254

228-
assertEquals(false, isVirtual(thread));
255+
Thread thread = future.get(TIMEOUT_NS, TimeUnit.NANOSECONDS);
256+
257+
assertEquals(false, isVirtual(thread));
258+
}
229259
}
230260

231261
/**

0 commit comments

Comments
 (0)