Skip to content

Commit ae276d1

Browse files
first draft - 26.0.0.3-blog
1 parent 28c9042 commit ae276d1

1 file changed

Lines changed: 316 additions & 0 deletions

File tree

posts/2026-03-24-26.0.0.3.adoc

Lines changed: 316 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,316 @@
1+
---
2+
layout: post
3+
title: "Java Toolchains in Liberty Build Plugins in 26.0.0.3"
4+
# Do NOT change the categories section
5+
categories: blog
6+
author_picture: https://avatars3.githubusercontent.com/navaneethsnair1
7+
author_github: https://github.com/navaneethsnair1
8+
seo-title: Java Toolchains in Liberty Build Plugins in 26.0.0.3- OpenLiberty.io
9+
seo-description: This release introduces UserRegistry Attribute Reader APIs for retrieving user attributes from LDAP and custom registries, and adds support for Jandex index formats 11-13 to improve application startup performance.
10+
blog_description: This release introduces UserRegistry Attribute Reader APIs for retrieving user attributes from LDAP and custom registries, and adds support for Jandex index formats 11-13 to improve application startup performance.
11+
open-graph-image: https://openliberty.io/img/twitter_card.jpg
12+
open-graph-image-alt: Open Liberty Logo
13+
---
14+
= Java Toolchains in Liberty Build Plugins in 26.0.0.3
15+
Navaneeth S Nair <https://github.com/navaneethsnair1>
16+
:imagesdir: /
17+
:url-prefix:
18+
:url-about: /
19+
//Blank line here is necessary before starting the body of the post.
20+
21+
// // // // // // // //
22+
// In the preceding section:
23+
// Do not insert any blank lines between any of the lines.
24+
// Do not remove or edit the variables on the lines beneath the author name.
25+
//
26+
// "open-graph-image" is set to OL logo. Whenever possible update this to a more appropriate/specific image (For example if present a image that is being used in the post). However, it
27+
// can be left empty which will set it to the default
28+
//
29+
// "open-graph-image-alt" is a description of what is in the image (not a caption). When changing "open-graph-image" to
30+
// a custom picture, you must provide a custom string for "open-graph-image-alt".
31+
//
32+
// Replace TITLE with the blog post title eg: MicroProfile 3.3 is now available on Open Liberty 20.0.0.4
33+
// Replace navaneethsnair1 with your GitHub username eg: lauracowen
34+
// Replace DESCRIPTION with a short summary (~60 words) of the release (a more succinct version of the first paragraph of the post).
35+
// Replace Navaneeth S Nair with your name as you'd like it to be displayed, eg: Laura Cowen
36+
//
37+
// Example post: 2020-04-09-microprofile-3-3-open-liberty-20004.adoc
38+
//
39+
// If adding image into the post add :
40+
// -------------------------
41+
// [.img_border_light]
42+
// image::img/blog/FILE_NAME[IMAGE CAPTION ,width=70%,align="center"]
43+
// -------------------------
44+
// "[.img_border_light]" = This adds a faint grey border around the image to make its edges sharper. Use it around screenshots but not
45+
// around diagrams. Then double check how it looks.
46+
// There is also a "[.img_border_dark]" class which tends to work best with screenshots that are taken on dark
47+
// backgrounds.
48+
// Change "FILE_NAME" to the name of the image file. Also make sure to put the image into the right folder which is: img/blog
49+
// change the "IMAGE CAPTION" to a couple words of what the image is
50+
// // // // // // // //
51+
52+
This release introduces UserRegistry Attribute Reader APIs for retrieving user attributes from LDAP and custom registries, and adds support for Jandex index formats 11-13 to improve application startup performance.
53+
54+
// // // // // // // //
55+
// In the preceding section:
56+
// Leave any instances of `tag::xxxx[]` or `end:xxxx[]` as they are.
57+
//
58+
// Replace RELEASE_SUMMARY with a short paragraph that summarises the release. Start with the lead feature but also summarise what else is new in the release. You will agree which will be the lead feature with the reviewers so you can just leave a placeholder here until after the initial review.
59+
// // // // // // // //
60+
61+
// // // // // // // //
62+
// Replace the following throughout the document:
63+
// Replace 26.0.0.3 with the version number of Open Liberty, eg: 22.0.0.2
64+
// Replace 26001 with the version number of Open Liberty wihtout the periods, eg: 22002
65+
// // // // // // // //
66+
67+
In link:{url-about}[Open Liberty] 26.0.0.3:
68+
69+
* <<userregistry, UserRegistry Attribute Reader Enhancement>>
70+
* <<jandex, Jandex Index Format Support Update>>
71+
* <<bugs, Notable bug fixes>>
72+
73+
View the list of fixed bugs in link:https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A26003+label%3A%22release+bug%22[26.0.0.3].
74+
75+
Check out link:{url-prefix}/blog/?search=release&search!=beta[previous Open Liberty GA release blog posts].
76+
77+
78+
[#run]
79+
80+
// // // // // // // //
81+
// LINKS
82+
//
83+
// OpenLiberty.io site links:
84+
// link:{url-prefix}/guides/maven-intro.html[Maven]
85+
//
86+
// Off-site links:
87+
//link:https://openapi-generator.tech/docs/installation#jar[Download Instructions]
88+
//
89+
// IMAGES
90+
//
91+
// Place images in ./img/blog/
92+
// Use the syntax:
93+
// image::/img/blog/log4j-rhocp-diagrams/current-problem.png[Logging problem diagram,width=70%,align="center"]
94+
// // // // // // // //
95+
96+
== Develop and run your apps using 26.0.0.3
97+
98+
If you're using link:{url-prefix}/guides/maven-intro.html[Maven], include the following in your `pom.xml` file:
99+
100+
[source,xml]
101+
----
102+
<plugin>
103+
<groupId>io.openliberty.tools</groupId>
104+
<artifactId>liberty-maven-plugin</artifactId>
105+
<version>3.12.0</version>
106+
</plugin>
107+
----
108+
109+
Or for link:{url-prefix}/guides/gradle-intro.html[Gradle], include the following in your `build.gradle` file:
110+
111+
[source,gradle]
112+
----
113+
buildscript {
114+
repositories {
115+
mavenCentral()
116+
}
117+
dependencies {
118+
classpath 'io.openliberty.tools:liberty-gradle-plugin:4.0.0'
119+
}
120+
}
121+
apply plugin: 'liberty'
122+
----
123+
// // // // // // // //
124+
// In the preceding section:
125+
// Replace the Maven `3.11.5` with the latest version of the plugin: https://search.maven.org/artifact/io.openliberty.tools/liberty-maven-plugin
126+
// Replace the Gradle `3.9.5` with the latest version of the plugin: https://search.maven.org/artifact/io.openliberty.tools/liberty-gradle-plugin
127+
// TODO: Update GHA to automatically do the above. If the maven.org is problematic, then could fallback to using the GH Releases for the plugins
128+
// // // // // // // //
129+
130+
Or if you're using link:{url-prefix}/docs/latest/container-images.html[container images]:
131+
132+
[source]
133+
----
134+
FROM icr.io/appcafe/open-liberty
135+
----
136+
137+
Or take a look at our link:{url-prefix}/start/[Downloads page].
138+
139+
If you're using link:https://plugins.jetbrains.com/plugin/14856-liberty-tools[IntelliJ IDEA], link:https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext[Visual Studio Code] or link:https://marketplace.eclipse.org/content/liberty-tools[Eclipse IDE], you can also take advantage of our open source link:https://openliberty.io/docs/latest/develop-liberty-tools.html[Liberty developer tools] to enable effective development, testing, debugging and application management all from within your IDE.
140+
141+
[link=https://stackoverflow.com/tags/open-liberty]
142+
image::img/blog/blog_btn_stack.svg[Ask a question on Stack Overflow, align="center"]
143+
144+
// // // // DO NOT MODIFY THIS COMMENT BLOCK <GHA-BLOG-TOPIC> // // // //
145+
// Blog issue: https://github.com/OpenLiberty/open-liberty/issues/34074
146+
// Contact/Reviewer: karel-harjono
147+
// // // // // // // //
148+
[#userregistry]
149+
== UserRegistry Attribute Reader Enhancement
150+
151+
The UserRegistry Attribute Reader APIs feature enables applications to retrieve specific user attributes and search for users based on attribute values directly from LDAP and custom user registries.
152+
153+
=== What's New?
154+
155+
Previously, the UserRegistry API provided basic user lookups such as searching by `userSecurityName` or wildcard pattern matching. However, it did not allow applications to retrieve specific user attributes or search for users based on attribute values. The capabilities of these two methods are similarly available in Traditional WebSphere under the VMM API. The addition of these two APIs allows applications to search and read attributes from their LDAP and custom user registries.
156+
157+
With this change, you can now retrieve specific attributes for a user (such as email, phoneNumber, or "*" for all attributes) using `getAttributesForUser()` and search for users by attribute values using `getUsersByAttribute()`. These new methods are supported for LDAP user registries. A custom user registry implementation can also implement these methods.
158+
159+
=== How to Use It
160+
161+
New API methods (added in UserRegistry.java):
162+
163+
. `default Map<String, Object> getAttributesForUser(String userSecurityName, Set<String> attributeNames)`
164+
+
165+
*Description:* Returns a Map<String, Object> of the `attributesNames` and values for `userSecurityName` configured in the LDAP user registry.
166+
+
167+
[source,java]
168+
----
169+
UserRegistry ur = RegistryHelper.getUserRegistry("realmName");
170+
171+
// valid ldap attribute names
172+
Set<String> attributeNames = Set.of("telephoneNumber", "uid", "mail"); // or "*" for retrieving all attributes
173+
Map<String, Object> result = ur.getAttributesForUser("testuser", attributeNames);
174+
175+
// output in trace.log
176+
> getAttributesForUser Entry
177+
testuser
178+
[telephoneNumber, uid, mail]
179+
180+
< getAttributesForUser Exit
181+
{uid=testuser, mail=testuser@example.com, telephoneNumber=<telephone-number>}
182+
----
183+
184+
. `default SearchResult getUsersByAttribute(String attributeName, String value, int limit)`
185+
+
186+
*Description:* Returns a `SearchResult` object that contains a list of users that match an `attributeName` with specified `value` configured in the LDAP user registry.
187+
+
188+
[source,java]
189+
----
190+
UserRegistry ur = RegistryHelper.getUserRegistry("realmName");
191+
192+
SearchResult searchResult = ur.getUsersByAttribute("email", "testuser@example.com", 1);
193+
194+
// output in trace.log
195+
> getUsersByAttribute Entry
196+
kerberosId
197+
testuser@example.com
198+
0
199+
200+
< getUsersByAttribute Exit
201+
SearchResult hasMore=false [testuser]
202+
----
203+
204+
To learn more about user registry, see the following resources:
205+
206+
* link:https://www.ibm.com/docs/en/was-liberty/base?topic=infrastructure-customizing-user-registries-repositories-liberty[Open Liberty Custom User Registry Documentation]
207+
* link:https://openliberty.io/docs/modules/reference/24.0.0.3/com.ibm.websphere.appserver.api.securityClient_1.1-javadoc/com/ibm/websphere/security/UserRegistry.html[UserRegistry API Javadoc]
208+
* link:https://openliberty.io/docs/latest/user-registries-application-security.html#_federated_user_registries[Federated User Registry Configuration]
209+
210+
// DO NOT MODIFY THIS LINE. </GHA-BLOG-TOPIC>
211+
212+
// // // // DO NOT MODIFY THIS COMMENT BLOCK <GHA-BLOG-TOPIC> // // // //
213+
// Blog issue: https://github.com/OpenLiberty/open-liberty/issues/34231
214+
// Contact/Reviewer: benjamin-confino, tbitonti
215+
// // // // // // // //
216+
[#jandex]
217+
== Jandex Index Format Support Update
218+
219+
Open Liberty now supports the current latest Jandex index formats, enabling you to use Jandex indexes created with Jandex versions 3.1.0 and higher. Jandex is a space-efficient Java annotation indexer and offline reflection library that significantly improves application startup performance by pre-indexing class metadata.
220+
221+
This feature is intended for Application developers and DevOps engineers working with Jakarta EE and MicroProfile applications who want to optimize their application startup times and reduce runtime overhead.
222+
223+
=== What's New?
224+
225+
With this update, Open Liberty supports Jandex index formats *11, 12, and 13*. Indexes that use these index format versions are generated by Jandex versions 3.1.0 up to and including the current latest Jandex version 3.5.3.
226+
227+
Previously, Open Liberty only supported Jandex index format versions up to and including index format version 10. The index format limitation meant applications that were packaged with Jandex indexes could not use an index format version higher than 10 and continue to obtain expected performance improvements. To maintain performance improvements, build tooling was required to continue using a Jandex version prior to 3.1.0, or to add explicit parameters to Jandex index generation steps to force the generation of indexes using index format 10 or lower.
228+
229+
=== Benefits
230+
231+
The added support for Jandex index formats has several benefits:
232+
233+
* *Improved Compatibility:* Seamlessly work with the latest versions of build tools and frameworks that use newer Jandex versions
234+
* *Faster Startup Times:* Continue to benefit from Jandex's efficient annotation indexing without version constraints
235+
* *Reduced Maintenance:* No need to maintain multiple Jandex versions or regenerate indexes for compatibility
236+
* *Future-Proof:* Stay current with the Jandex ecosystem as it evolves
237+
238+
=== Limitations
239+
240+
*When using Jandex indexes, you must ensure that up-to-date index files are provided together with your application classes.* When a Jandex index is not up to date with application classes, incorrect annotation data is used. This might cause the application to function incorrectly. Out-of-date Jandex indexes cannot be reliably detected.
241+
242+
Open Liberty does not read index formats higher than index format 13. If a new version of Jandex adds a higher index format version, Open Liberty requires an update before it can read Jandex indexes which use that index format version.
243+
244+
The Open Liberty feature "mpGraphQL", which is obtained from an external source, is limited to reading Jandex index formats no higher than index format 10. If the feature "mpGraphQL" is used, Jandex indexes should be generated using index format 10. This limitation applies to all current versions of "mpGraphQL", including the current highest version, "mpGraphQL-2.0".
245+
246+
=== Lifting Restriction
247+
248+
Previously, if Jandex use was enabled and an index of formats 11 through 13 was present in an application, an error message would be displayed and that Jandex index would be ignored. Annotation scans would be performed using Liberty's internal annotation scan code.
249+
250+
With the addition of support for Jandex index formats 11 through 13, the indexes that use those index formats is now used. The indexes must be up to date with application classes. Ensure that the Jandex indexes that are packaged with your application are up to date with application classes.
251+
252+
=== How to Use
253+
254+
No configuration changes are required in your `server.xml` file to enable reads of the new index formats. Open Liberty detects the Jandex index format and uses an index reader that is appropriate for the index format. Open Liberty automatically reads indexes that use index formats 11, 12, and 13, and still continues to read indexes that use index formats 10 or less.
255+
256+
Use of Jandex is disabled by default. To enable use of Jandex, you must specify the property `useJandex` with a value of `true` within any application element or within the application manager element.
257+
258+
If you are generating Jandex indexes as part of your build process, you can now use the latest Jandex Maven plugin or Gradle plugin versions:
259+
260+
*Maven Example:*
261+
262+
[source,xml]
263+
----
264+
<plugin>
265+
<groupId>io.smallrye</groupId>
266+
<artifactId>jandex-maven-plugin</artifactId>
267+
<version>3.5.3</version>
268+
<executions>
269+
<execution>
270+
<id>make-index</id>
271+
<goals>
272+
<goal>jandex</goal>
273+
</goals>
274+
</execution>
275+
</executions>
276+
</plugin>
277+
----
278+
279+
*Gradle Example:*
280+
281+
[source,gradle]
282+
----
283+
plugins {
284+
id 'org.kordamp.gradle.jandex' version '2.3.0'
285+
}
286+
----
287+
288+
The generated `META-INF/jandex.idx` file is automatically recognized by Open Liberty, regardless of which supported format version is used.
289+
290+
To learn more, see the link:https://smallrye.io/jandex/jandex/3.5.3/index.html[Jandex Documentation]
291+
292+
// DO NOT MODIFY THIS LINE. </GHA-BLOG-TOPIC>
293+
294+
[#bugs]
295+
== Notable bugs fixed in this release
296+
297+
298+
We’ve spent some time fixing bugs. The following sections describe some of the issues resolved in this release. If you’re interested, here’s the link:https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A26003+label%3A%22release+bug%22[full list of bugs fixed in 26.0.0.3].
299+
300+
* link:https://github.com/OpenLiberty/open-liberty/issues/34017[Missing error message in JMX REST client]
301+
* link:https://github.com/OpenLiberty/open-liberty/issues/34052[NullPointerException resurfaced in Open Liberty due to removal of EclipseLink 2.7.16 fix]
302+
* link:https://github.com/OpenLiberty/open-liberty/issues/34171[IBM WebSphere Application Server Liberty is affected by a denial of service due to jose4j (CVE-2024-29371 CVSS 7.5)]
303+
304+
// // // // // // // //
305+
// In the preceding section:
306+
// For this section ask either Michal Broz or Tom Evans or the #openliberty-release-blog channel for Notable bug fixes in this release.
307+
// Present them as a list in the order as provided, linking to the issue and providing a short description of the bug and the resolution.
308+
// If the issue on Github is missing any information, leave a comment in the issue along the lines of:
309+
// "@[issue_owner(s)] please update the description of this `release bug` using the [bug report template](https://github.com/OpenLiberty/open-liberty/issues/new?assignees=&labels=release+bug&template=bug_report.md&title=)"
310+
// Feel free to message the owner(s) directly as well, especially if no action has been taken by them.
311+
// For inspiration about how to write this section look at previous blogs e.g- 20.0.0.10 or 21.0.0.12 (https://openliberty.io/blog/2021/11/26/jakarta-ee-9.1.html#bugs)
312+
// // // // // // // //
313+
314+
== Get Open Liberty 26.0.0.3 now
315+
316+
Available through <<run,Maven, Gradle, Docker, and as a downloadable archive>>.

0 commit comments

Comments
 (0)