You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// change the "IMAGE CAPTION" to a couple words of what the image is
51
51
// // // // // // // //
52
52
53
-
BETA_RELEASE_SUMMARY
53
+
Support for override libraries in the application classloader and Java 25 compatibility are introduced in 25.0.0.10-beta.
54
54
55
55
// // // // // // // //
56
56
// Change the RELEASE_SUMMARY to an introductory paragraph. This sentence is really
@@ -61,8 +61,8 @@ BETA_RELEASE_SUMMARY
61
61
62
62
The link:{url-about}[Open Liberty] 25.0.0.10-beta includes the following beta features (along with link:{url-prefix}/docs/latest/reference/feature/feature-overview.html[all GA features]):
63
63
64
-
* <<SUB_TAG_0, overrideLibrary support for application classloader>>
65
-
* <<SUB_TAG_1, Beta support for Java 25>>
64
+
* <<overrideLibrary, overrideLibrary support for application classloader>>
65
+
* <<beta_support_java25, Beta support for Java 25>>
66
66
67
67
// // // // // // // //
68
68
// In the preceding section:
@@ -79,23 +79,23 @@ See also link:{url-prefix}/blog/?search=beta&key=tag[previous Open Liberty beta
79
79
// Blog issue: https://github.com/OpenLiberty/open-liberty/issues/32778
80
80
// Contact/Reviewer: tjwatson
81
81
// // // // // // // //
82
-
[#SUB_TAG_0]
82
+
[#overrideLibrary]
83
83
== overrideLibrary support for application classloader
84
84
85
-
86
-
For the 25.0.0.10-beta, a new library reference type is available for an application's `<classloader/>` configuration that is used to configure an override library. Similar to private library references, class insteances are unique to the application's classloader, independent of class instances from other classloaders. The referenced override library class path is searched before searching the application classloader's own class path. This allows a library path to override classes contained in an application.
85
+
The 25.0.0.10-beta release introduces a new type of library reference for configuring an application's <classloader/>. This new reference type is called an override library reference. An override library reference works similarly to a private library reference, where class instances remain unique to the application's classloader. However, the key difference is in the search order, the override library class path is searched before the application’s own class path.This allows the library path to override classes that are already contained within the application.
87
86
88
-
For example, if there is an `<webApplication/>` that contains a class `org.acme.needs.fix.SomeImpl` that needs to be overridden in order to fix an issue, but it is difficult or undesirable to rebuild the application to pull in the fix a new library JAR (e.g. someImplFix.jar) could be built to include the class files that need to be fixed. Then the following `server.xml` could be used to configure an `overrideLibraryRef` to fix the application without requiring the application to be rebuilt:
87
+
For example, when a `<webApplication/>` contains a class like `org.acme.needs.fix.SomeImpl` that needs to be overridden in order to fix an issue, but rebuilding the application to include the fix is difficult or undesirable,as a new library JAR (e.g., someImplFix.jar) is built to include the corrected class files. Then the following `server.xml` could be used to configure an `overrideLibraryRef` to fix the application without requiring the application to be rebuilt:
89
88
90
-
```xml
89
+
[source, xml]
90
+
----
91
91
<webApplication location="appThatNeedsFix.war">
92
92
<classloader overrideLibraryRef="someImplFix"/>
93
93
</webApplication>
94
94
95
95
<library id="someImplFix">
96
96
<path name="someImplFix.jar"/>
97
97
</library>
98
-
```
98
+
----
99
99
100
100
101
101
// DO NOT MODIFY THIS LINE. </GHA-BLOG-TOPIC>
@@ -104,38 +104,38 @@ For example, if there is an `<webApplication/>` that contains a class `org.acme.
104
104
// Blog issue: https://github.com/OpenLiberty/open-liberty/issues/32681
105
105
// Contact/Reviewer: gjwatts
106
106
// // // // // // // //
107
-
[#SUB_TAG_1]
107
+
[#beta_support_java25]
108
108
== Beta support for Java 25
109
109
110
-
Please provide a summary of the update, including the following points:
111
-
112
110
Java 25 is the latest version of Java and a Long-Term-Support (LTS) release. It contains many new features and enhancements over previous versions of Java that you will want to review.
113
111
114
112
There are 18 new features (JEPs) in link:https://openjdk.org/projects/jdk/25/[Java 25]. Six are test features and twelve are fully delivered:
115
113
116
114
Test features:
117
-
470: link:https://openjdk.org/jeps/470[PEM Encodings of Cryptographic Objects (Preview)]
An important note about using the `CompletableFuture` and `SubmissionPublisher` classes provided in the Java 25 JDK. If you do not have an explicit Executor backing them, the default is to use the `ForkJoinPool.commonPool`. That pool defaults to a parallelism value equal to the number of available processors minus 1 (# available processors - 1). If your application runs in an environment where you have 2 (or fewer) processors, you could run into issues with concurrency in Java 25 since you will only have 1 thread available by default. This was not an issue in earlier versions of Java as the JDK would overlook the parallelism value and create an additional thread.
124
+
125
+
* 503: link:https://openjdk.org/jeps/503[Remove the 32-bit x86 Port]
An important note about using the `CompletableFuture` and `SubmissionPublisher` classes provided in the Java 25 JDK. If you do not have an explicit Executor backing them, the default is to use the `ForkJoinPool.commonPool`.The pool defaults to a parallelism value equal to the number of available processors minus 1 (# available processors - 1). If your application runs in an environment where you have 2 (or fewer) processors, you could run into issues with concurrency in Java 25 since you will only have 1 thread available by default. This was not an issue in earlier versions of Java as the JDK would overlook the parallelism value and create an additional thread.
139
139
To avoid this, you can:
140
140
1. Use the `CompletableFuture` provided in Liberty's Jakarta Concurrency implementation, which does not have this issue. An easy way to do that is with a link:https://www.ibm.com/docs/en/was-liberty/core?topic=manually-configuring-managed-executors[DefaultManagedExecutorService] and using link:https://jakarta.ee/specifications/concurrency/3.1/apidocs/jakarta.concurrency/jakarta/enterprise/concurrent/managedexecutorservice#supplyAsync(java.util.function.Supplier[supplyAsync or runAsync]).
141
141
2. Explicitly set the `ForkJoinPool.commonPool` parallelism value to whatever you need, `-Djava.util.concurrent.ForkJoinPool.common.parallelism=N` (where N is the minimum number of threads needed)
@@ -186,7 +186,7 @@ If you're using link:{url-prefix}/guides/maven-intro.html[Maven], you can instal
0 commit comments