Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -74,33 +74,35 @@ public static void setUp() throws Exception {
@AfterClass
public static void tearDown() throws Exception {
try {
List<String> mtfMessages = server.findStringsInLogs("CWWKC1108I");

assertContains("concurrent/ServerXMLThreadFactoryToOverride",
mtfMessages);
assertContains("java:comp/concurrent/WebXMLThreadFactoryToOverride",
mtfMessages);
assertContains("java:module/concurrent/AnnoThreadFactoryToOverride",
mtfMessages);

assertEquals(mtfMessages.toString(), 3, mtfMessages.size());

List<String> policyMessages = server.findStringsInLogs("CWWKE1208I");

assertContains("application[ConcurrentNoVTWeb]/managedScheduledExecutorService[java:app/concurrent/AnnoScheduledExecutorToOverride]/concurrencyPolicy",
policyMessages);
assertContains("application[ConcurrentNoVTWeb]/module[ConcurrentNoVTWeb.war]/managedExecutorService[java:comp/concurrent/AnnoExecutorToOverride]/concurrencyPolicy",
policyMessages);
assertContains("application[ConcurrentNoVTWeb]/module[ConcurrentNoVTWeb.war]/managedScheduledExecutorService[java:module/concurrent/WebXMLScheduledExecutorToOverride]/concurrencyPolicy",
policyMessages);
assertContains("managedExecutorService[executorToOverride]/concurrencyPolicy[default-0]",
policyMessages);
assertContains("managedExecutorService[java:global/concurrent/WebXMLExecutorToOverride]/concurrencyPolicy",
policyMessages);
assertContains("virtualThreadPolicyToOverride",
policyMessages);

assertEquals(policyMessages.toString(), 6, policyMessages.size());
if (Runtime.version().feature() >= 21) {
List<String> mtfMessages = server.findStringsInLogs("CWWKC1108I");

assertContains("concurrent/ServerXMLThreadFactoryToOverride",
mtfMessages);
assertContains("java:comp/concurrent/WebXMLThreadFactoryToOverride",
mtfMessages);
assertContains("java:module/concurrent/AnnoThreadFactoryToOverride",
mtfMessages);

assertEquals(mtfMessages.toString(), 3, mtfMessages.size());

List<String> policyMessages = server.findStringsInLogs("CWWKE1208I");

assertContains("application[ConcurrentNoVTWeb]/managedScheduledExecutorService[java:app/concurrent/AnnoScheduledExecutorToOverride]/concurrencyPolicy",
policyMessages);
assertContains("application[ConcurrentNoVTWeb]/module[ConcurrentNoVTWeb.war]/managedExecutorService[java:comp/concurrent/AnnoExecutorToOverride]/concurrencyPolicy",
policyMessages);
assertContains("application[ConcurrentNoVTWeb]/module[ConcurrentNoVTWeb.war]/managedScheduledExecutorService[java:module/concurrent/WebXMLScheduledExecutorToOverride]/concurrencyPolicy",
policyMessages);
assertContains("managedExecutorService[executorToOverride]/concurrencyPolicy[default-0]",
policyMessages);
assertContains("managedExecutorService[java:global/concurrent/WebXMLExecutorToOverride]/concurrencyPolicy",
policyMessages);
assertContains("virtualThreadPolicyToOverride",
policyMessages);

assertEquals(policyMessages.toString(), 6, policyMessages.size());
}
} finally {
server.stopServer();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,10 +132,10 @@ public void testOverrideVirtualManagedExecutorFromAnno() throws Exception {
}

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

Future<Thread> future = overriddenManagedExecutorFromServerXML
.invokeAll(List.of(task),
TIMEOUT_NS,
TimeUnit.NANOSECONDS)
.get(0);
if (Runtime.version().feature() == 17)
try {
overriddenManagedExecutorFromServerXML
.invokeAll(List.of(task),
TIMEOUT_NS,
TimeUnit.NANOSECONDS);
fail("Virtual=true should not be allowed on Java SE 17.");
} catch (IllegalArgumentException x) {
if (Runtime.version().feature() == 17)
return; // expected
else
throw x;
}
else {
Future<Thread> future = overriddenManagedExecutorFromServerXML
.invokeAll(List.of(task),
TIMEOUT_NS,
TimeUnit.NANOSECONDS)
.get(0);

assertEquals(true, future.isDone());
assertEquals(true, future.isDone());

Thread thread = future.get();
Thread thread = future.get();

assertEquals(false, isVirtual(thread));
assertEquals(false, isVirtual(thread));
}
}

/**
Expand Down Expand Up @@ -206,26 +221,41 @@ public void testOverrideVirtualManagedScheduledExecutorFromAnno() //
}

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

String testName = "testOverrideVirtualManagedScheduledExecutorFromServerXML";
Future<Thread> future = //
overriddenManagedScheduledExecutorFromServerXML
.submit(() -> {
System.out.println("Task from " + testName);
return Thread.currentThread();
});
Callable<Thread> task = () -> {
System.out.println("Task from " + testName);
return Thread.currentThread();
};

Thread thread = future.get(TIMEOUT_NS, TimeUnit.NANOSECONDS);
if (Runtime.version().feature() == 17)
try {
overriddenManagedScheduledExecutorFromServerXML
.submit(task);
fail("Virtual=true should not be allowed on Java SE 17.");
} catch (IllegalArgumentException x) {
if (Runtime.version().feature() == 17)
return; // expected
else
throw x;
}
else {
Future<Thread> future = //
overriddenManagedScheduledExecutorFromServerXML
.submit(task);

assertEquals(false, isVirtual(thread));
Thread thread = future.get(TIMEOUT_NS, TimeUnit.NANOSECONDS);

assertEquals(false, isVirtual(thread));
}
}

/**
Expand Down