Improved log filtering and more consumable stack traces in Open Liberty 22.0.0.7
Open Liberty 22.0.0.7 includes the addition of the application name to the LogRecordContext extension and a corresponding JSON logging field, as well as providing new logging functionality to join stack traces in logs so that they are output as a single log event and easier to consume. Also included in this release are several notable bug fixes and updates to our Open Liberty guides.
In Open Liberty 22.0.0.7:
Along with the new features and functions added to the runtime, we’ve also made updates to our guides.
View the list of fixed bugs in 22.0.0.7.
Run your apps using 22.0.0.7
If you’re using Maven, here are the coordinates:
<dependency>
<groupId>io.openliberty</groupId>
<artifactId>openliberty-runtime</artifactId>
<version>22.0.0.7</version>
<type>zip</type>
</dependency>
Or for Gradle:
dependencies {
libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '[22.0.0.7,)'
}
Or if you’re using Docker:
FROM open-liberty
Or take a look at our Downloads page.
Filter JSON logs on the application name
Previously, Liberty logs did not contain the application name in the LogRecordContext
extension. If you were using a log analysis tool, such as the Elastic Logstash Kibana (ELK) stack, you couldn’t filter out application logs, since the JSON
fields did not have a field for the application name.
In Open Liberty 22.0.0.7, when application log messages are logged and the application name is known, the application name is added to the LogRecordContext, with the key appName
and the value being the application name that the message was logged from. When JSON logging is enabled, a new default JSON field (ext_appName
) is added to the JSON application logs, which contains the application name that the log message was logged from.
You can use this function by enabling JSON logging support for your Liberty logs.
Example JSON logging snippet:
{
"type":"liberty_message",
"host":"localhost",
"ibm_userDir":"\/wlp\/usr\/",
"ibm_serverName":"test_json",
"message":"TESTAP0001W: Test Message.",
"ibm_threadId":"0000005d",
"ibm_datetime":"2022-02-16T14:07:47.226-0500",
"ibm_messageId":"BADAP0001W",
"module":"com.ibm.ws.lumberjack.Message",
"loglevel":"WARNING",
"ibm_sequence":"1645038467226_000000000001F",
"ext_appName":"TestApp",
"ext_thread":"Default Executor-thread-31"
}
For more information, check out the JSON Logging and JSON Log Events list documentation.
Merge stack traces into a single log event
You can now configure the stack trace in Open Liberty logs to be more readable by printing stack traces as a single log event. Previously, each line of the stack trace, typically thrown by Throwable.printStackTrace() calls from the application, was printed as a separate event.
Now, you can configure Open Liberty to output the emitted stack trace as a single log event. This is useful when using third-party log analysis tools, such as the Elastic Logstash Kibana (ELK) stack, so that each stack trace is treated as a single event instead of multiple.
This configuration applies to the console output, console logs, messages log, and the trace logs. The following examples show the console output and the messages log when the stack traces are printed as separate events versus as a single event:
Console output without the stack traces joined:
[err] java.lang.ArithmeticException: divide by zero
[err] at com.ibm.demo.MyResource.ex(MyResource.java:86)
[err] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[err] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[err] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[err] at java.base/java.lang.reflect.Method.invoke(Method.java:566)
[err] at com.ibm.ws.jaxrs20.server.LibertyJaxRsServerFactoryBean.performInvocation(LibertyJaxRsServerFactoryBean.java:656)
[err] at [internal classes]
[err] at javax.servlet.http.HttpServlet.service(HttpServlet.java:686)
[err] at com.ibm.websphere.jaxrs.server.IBMRestServlet.service(IBMRestServlet.java:96)
[err] at [internal classes]
[err] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[err] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[err] at java.base/java.lang.Thread.run(Thread.java:831)
Console output with the stack traces joined:
[err] java.lang.ArithmeticException: divide by zero
at com.ibm.demo.MyResource.ex(MyResource.java:86)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.ibm.ws.jaxrs20.server.LibertyJaxRsServerFactoryBean.performInvocation(LibertyJaxRsServerFactoryBean.java:656)
at [internal classes]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:686)
at com.ibm.websphere.jaxrs.server.IBMRestServlet.service(IBMRestServlet.java:96)
at [internal classes]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:831)
messages.log
output without the stack traces joined:
2022-04-06, 15:50:22:246 EDT] 00000047 SystemErr R java.lang.ArithmeticException: divide by zero
[2022-04-06, 15:50:22:247 EDT] 00000047 SystemErr R at com.ibm.demo.MyResource.ex(MyResource.java:86)
[2022-04-06, 15:50:22:248 EDT] 00000047 SystemErr R at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[2022-04-06, 15:50:22:249 EDT] 00000047 SystemErr R at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[2022-04-06, 15:50:22:250 EDT] 00000047 SystemErr R at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[2022-04-06, 15:50:22:251 EDT] 00000047 SystemErr R at java.base/java.lang.reflect.Method.invoke(Method.java:566)
[2022-04-06, 15:50:22:251 EDT] 00000047 SystemErr R at com.ibm.ws.jaxrs20.server.LibertyJaxRsServerFactoryBean.performInvocation(LibertyJaxRsServerFactoryBean.java:656)
...
messages.log
output with the stack traces joined:
[2022-04-06, 15:52:38:586 EDT] 00000077 SystemErr R java.lang.ArithmeticException: divide by zero
at com.ibm.demo.MyResource.ex(MyResource.java:86)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.ibm.ws.jaxrs20.server.LibertyJaxRsServerFactoryBean.performInvocation(LibertyJaxRsServerFactoryBean.java:656)
...
messages.log
output without the stack traces joined using JSON
logging:
{"type":"liberty_message","host":"LAPTOP-JU4FJ7TJ","ibm_userDir":"C:\/devdir\/LibertiesFeb18\/open-liberty\/dev\/build.image\/wlp\/usr\/","ibm_serverName":"sj","message":"java.lang.ArithmeticException: divide by zero","ibm_threadId":"00000034","ibm_datetime":"2022-04-20T13:41:37.605-0400","module":"SystemErr","loglevel":"SystemErr","ibm_methodName":"","ibm_className":"","ibm_sequence":"1650476497605_0000000000069","ext_thread":"Default Executor-thread-2"}
{"type":"liberty_message","host":"LAPTOP-JU4FJ7TJ","ibm_userDir":"C:\/devdir\/LibertiesFeb18\/open-liberty\/dev\/build.image\/wlp\/usr\/","ibm_serverName":"sj","message":"\tat com.ibm.demo.MyResource.ex(MyResource.java:86)","ibm_threadId":"00000034","ibm_datetime":"2022-04-20T13:41:37.616-0400","module":"SystemErr","loglevel":"SystemErr","ibm_methodName":"","ibm_className":"","ibm_sequence":"1650476497616_000000000006A","ext_thread":"Default Executor-thread-2"}
{"type":"liberty_message","host":"LAPTOP-JU4FJ7TJ","ibm_userDir":"C:\/devdir\/LibertiesFeb18\/open-liberty\/dev\/build.image\/wlp\/usr\/","ibm_serverName":"sj","message":"\tat java.base\/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)","ibm_threadId":"00000034","ibm_datetime":"2022-04-20T13:41:37.626-0400","module":"SystemErr","loglevel":"SystemErr","ibm_methodName":"","ibm_className":"","ibm_sequence":"1650476497626_000000000006B","ext_thread":"Default Executor-thread-2"}
...
messages.log
output with the stack traces joined using JSON
logging:
{"type":"liberty_message","host":"LAPTOP-JU4FJ7TJ","ibm_userDir":"C:\/devdir\/LibertiesFeb18\/open-liberty\/dev\/build.image\/wlp\/usr\/","ibm_serverName":"sj","message":"java.lang.ArithmeticException: divide by zero\r\n\tat com.ibm.demo.MyResource.ex(MyResource.java:86)\r\n\tat java.base\/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat java.base\/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat java.base\/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.base\/java.lang.reflect.Method.invoke(Method.java:566)\r\n\tat com.ibm.ws.jaxrs20.server.LibertyJaxRsServerFactoryBean.performInvocation(LibertyJaxRsServerFactoryBean.java:656)\r\n\tat com.ibm.ws.jaxrs20.server.LibertyJaxRsInvoker.performInvocation(LibertyJaxRsInvoker.java:160)\r\n\tat org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:101)\r\n\tat com.ibm.ws.jaxrs20.server.LibertyJaxRsInvoker.invoke(LibertyJaxRsInvoker.java:273)\r\n\tat org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:213)\r\n\tat com.ibm.ws.jaxrs20.server.LibertyJaxRsInvoker.invoke(LibertyJaxRsInvoker.java:444)\r\n\tat org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:112)\r\n\tat org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)\r\n\tat org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96)\r\n\tat org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)\r\n\tat org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:123)\r\n\tat org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:277)\r\n\tat com.ibm.ws.jaxrs20.endpoint.AbstractJaxRsWebEndpoint.invoke(AbstractJaxRsWebEndpoint.java:137)\r\n\tat com.ibm.websphere.jaxrs.server.IBMRestServlet.handleRequest(IBMRestServlet.java:146)\r\n\tat com.ibm.websphere.jaxrs.server.IBMRestServlet.doGet(IBMRestServlet.java:112)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:686)\r\n\tat com.ibm.websphere.jaxrs.server.IBMRestServlet.service(IBMRestServlet.java:96)\r\n\tat com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1258)\r\n\tat com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:746)\r\n\tat com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:443)\r\n\tat com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1227)\r\n\tat com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1011)\r\n\tat com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:75)\r\n\tat com.ibm.ws.webcontainer40.servlet.CacheServletWrapper40.handleRequest(CacheServletWrapper40.java:85)\r\n\tat com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:938)\r\n\tat com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:281)\r\n\tat com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:1184)\r\n\tat com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.wrapHandlerAndExecute(HttpDispatcherLink.java:453)\r\n\tat com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:412)\r\n\tat com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:566)\r\n\tat com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:500)\r\n\tat com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:360)\r\n\tat com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:327)\r\n\tat com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:167)\r\n\tat com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:75)\r\n\tat com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:514)\r\n\tat com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:584)\r\n\tat com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:968)\r\n\tat com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1057)\r\n\tat com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:245)\r\n\tat java.base\/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\r\n\tat java.base\/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\r\n\tat java.base\/java.lang.Thread.run(Thread.java:831)","ibm_threadId":"00000060","ibm_datetime":"2022-04-20T13:42:26.365-0400","module":"SystemErr","loglevel":"SystemErr","ibm_methodName":"","ibm_className":"","ibm_sequence":"1650476546365_0000000000099","ext_thread":"Default Executor-thread-38"}
This new functionality is enabled by configuring either a bootstrap property, an environment variable, or through the server.xml
file. If configuration is present in all these options, the configuration follows Open Liberty’s standard precedence order: server.xml
> bootstrap property > environment variable.
Configuration:
-
server.xml
:
<logging stackTraceSingleEntry="true" />
-
bootstrap.properties
:
com.ibm.ws.logging.stackTraceSingleEntry=true
-
server.env
:
WLP_LOGGING_STACK_TRACE_SINGLE_ENTRY=true
For more information, see the entry for stackTraceSingleEntry
in Configuration settings by source.
Notable bugs fixed in this release
We’ve spent some time fixing bugs. The following sections describe the issues resolved in this release. If you’re interested, here’s the full list of bugs fixed in 22.0.0.7.
-
The openapi-3.1 Liberty feature generates wrong property name for annotation @Schema
The
openapi-3.1
feature is used in Liberty to generate the Open API documents. We found that the@Schema
annotation doesn’t work as expected. For example, when annotating a field as shown below:@Schema(name="asset_id", readOnly = true, required = true) private String assetId;
The generated swagger doc
.yaml
file will contain the following:RelatedAsset: required: - assetId <<----- name of the property in the "required" section is not correct - ... type: object properties: asset_id: <<----- name of the property in the "properties" section is correct type: string readOnly: true ...
Although the property is generated correctly in the properties section, it was not generated correctly in the required section. The expected name should be the name used in the
@Schema
annotation, i.e.,asset_id
. This issue has now been resolved so that the correct property name for the@Schema
annotation is generated. -
Transactions summary trace is missing
We discovered that the
TransactionSummary
trace group was no longer working. This trace group provides ultra minimal trace for transaction creation and setRollbackOnly . When settingTransactionSummary=all
trace, the regularTransaction=all
trace is emitted. The trace was emitted only for transaction creation andsetRollbackOnly
. This trace group is used when identifying what started a transaction or what rolled back a transaction in very high throughput systems where regular trace would be too big. In this Open Liberty release, the transaction summary trace has been reinstated. -
FeatureUtility only checks one Maven repository
Previously, FeatureUtility only checked one Maven repository. The verbose output shows both repositories are configured, but the utility fails because it only checks Maven Central (the first repo in the properties file).
./featureUtility if helloWorld1 --verbose --noCache --featuresBom=test.user.test.osgi:hello-bom:1.0 [2022-04-26, 20:45:20:780 EDT] Check following assets whether they were installed or not: [helloWorld1] [2022-04-26, 20:45:20:835 EDT] Using old resolve API [2022-04-26, 20:45:20:854 EDT] checkAssetsNotInstalled() ignore exception: CWWKF1259E: Unable to obtain the following assets: helloWorld1. Ensure that the specified assets are valid. To find the IDs of applicable assets, run the installUtility find command. [2022-04-26, 20:45:20:858 EDT] checkAssetsNotInstalled() cause of exception: Top level feature not resolved: resource=helloWorld1 MissingRequirement [requirementName=helloWorld1, owningResource=null] [2022-04-26, 20:45:20:866 EDT] Initializing ... [2022-04-26, 20:45:20:869 EDT] Environment variables: [2022-04-26, 20:45:20:870 EDT] FEATURE_REPO_URL: null [2022-04-26, 20:45:20:872 EDT] FEATURE_REPO_USER: null [2022-04-26, 20:45:20:873 EDT] FEATURE_UTILITY_MAVEN_REPOSITORIES: [] [2022-04-26, 20:45:20:874 EDT] FEATURE_REPO_PASSWORD: ********* [2022-04-26, 20:45:20:875 EDT] FEATURE_LOCAL_REPO: null [2022-04-26, 20:45:20:878 EDT] Overriding the environment variables using featureUtility.properties [2022-04-26, 20:45:20:879 EDT] envmap before: [2022-04-26, 20:45:20:880 EDT] {FEATURE_REPO_URL=null, FEATURE_REPO_USER=null, FEATURE_UTILITY_MAVEN_REPOSITORIES=[], FEATURE_REPO_PASSWORD=null, FEATURE_LOCAL_REPO=null} [2022-04-26, 20:45:20:881 EDT] printing envmap after [2022-04-26, 20:45:20:882 EDT] {FEATURE_REPO_URL=null, FEATURE_REPO_USER=null, FEATURE_UTILITY_MAVEN_REPOSITORIES=[http://rhel8-install11.fyre.ibm.com:8081/repository/maven-central/, http://localhost:8081/repository/maven-central/], FEATURE_REPO_PASSWORD=null, FEATURE_LOCAL_REPO=null} [2022-04-26, 20:45:20:884 EDT] additional jsons: [test.user.test.osgi:features:1.0] [2022-04-26, 20:45:20:886 EDT] Features installed from the remote repository will not be cached locally [2022-04-26, 20:45:20:887 EDT] JSONs required: [com.ibm.websphere.appserver.features:features:22.0.0.3, io.openliberty.features:features:22.0.0.3, test.user.test.osgi:features:1.0] [2022-04-26, 20:45:20:889 EDT] Found the following jsons locally: [/Users/jiwoolim/.m2/repository/com/ibm/websphere/appserver/features/features/22.0.0.3/features-22.0.0.3.json] [2022-04-26, 20:45:20:890 EDT] Could not find all json files from local directories, now downloading from Maven.. [2022-04-26, 20:45:20:894 EDT] Using 8 threads to download artifacts. [2022-04-26, 20:45:20:895 EDT] Using temp location: /Users/jiwoolim/Downloads/wlp22003open/tmp/ [2022-04-26, 20:45:20:896 EDT] Testing connection for repository: http://rhel8-install11.fyre.ibm.com:8081/repository/maven-central/ [2022-04-26, 20:45:24:883 EDT] Response code: 200 [2022-04-26, 20:45:24:884 EDT] Connecting to the following repository: http://rhel8-install11.fyre.ibm.com:8081/repository/maven-central/ [2022-04-26, 20:45:36:170 EDT] Successfully validated MD5 checksum for file: features-22.0.0.3.json [2022-04-26, 20:45:36:170 EDT] Using temp location: /Users/jiwoolim/Downloads/wlp22003open/tmp/ [2022-04-26, 20:45:36:171 EDT] Testing connection for repository: http://rhel8-install11.fyre.ibm.com:8081/repository/maven-central/ [2022-04-26, 20:45:36:308 EDT] Response code: 200 [2022-04-26, 20:45:36:308 EDT] Connecting to the following repository: http://rhel8-install11.fyre.ibm.com:8081/repository/maven-central/ [2022-04-26, 20:45:36:950 EDT] Could not download this json with maven coordinate: test.user.test.osgi:features:1.0 [2022-04-26, 20:45:36:951 EDT] Downloaded the following json files from remote: [/Users/jiwoolim/Downloads/wlp22003open/tmp/io/openliberty/features/features/22.0.0.3/features-22.0.0.3.json] [2022-04-26, 20:45:36:952 EDT] action.exception.stacktrace: null [2022-04-26, 20:45:36:952 EDT] CWWKF1409E: Unable to find the following feature JSON files locally or on the configured Maven repository: [test.user.test.osgi:features:1.0]. com.ibm.ws.install.InstallException: CWWKF1409E: Unable to find the following feature JSON files locally or on the configured Maven repository: [test.user.test.osgi:features:1.0]. at com.ibm.ws.install.featureUtility.FeatureUtility.getJsonFiles(FeatureUtility.java:672) at com.ibm.ws.install.featureUtility.FeatureUtility.(FeatureUtility.java:164) at com.ibm.ws.install.featureUtility.FeatureUtility.(FeatureUtility.java:58) at com.ibm.ws.install.featureUtility.FeatureUtility$FeatureUtilityBuilder.build(FeatureUtility.java:808) at com.ibm.ws.install.featureUtility.cli.InstallFeatureAction.install(InstallFeatureAction.java:240) at com.ibm.ws.install.featureUtility.cli.InstallFeatureAction.execute(InstallFeatureAction.java:257) at com.ibm.ws.install.featureUtility.cli.InstallFeatureAction.handleTask(InstallFeatureAction.java:78) at com.ibm.ws.install.featureUtility.cli.FeatureAction.handleTask(FeatureAction.java:100) at com.ibm.ws.install.featureUtility.FeatureUtilityExecutor.main(FeatureUtilityExecutor.java:58) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at com.ibm.ws.kernel.boot.cmdline.UtilityMain.internal_main(UtilityMain.java:173) at com.ibm.ws.kernel.boot.cmdline.UtilityMain.main(UtilityMain.java:53) at com.ibm.ws.kernel.boot.cmdline.Main.main(Main.java:52)
The utility showed it never attempted to download the JSONs from the custom repository. If the order is reversed in the file, then it fails not finding the JSONs for core Liberty features instead of the custom ones. Once all the files are available in the local m2 repo, the utility succeeded. This release ensures that if the user feature is not found on the first repo, it should continue to find it in the next repo listed on
featureUtility.properties
. -
OpenIdConnectClient not working with proxy settings given in jvm.options
A bug was discovered which meant that
OpenIdConnectClient
would not take proxy settings given injvm.options
, which would cause a connection timeout. The issue lied with creating a connection to thediscoveryEndpointUrl
. This issue has now been fixed updating the relevant code to use theuseSystemPropertiesForHttpClientConnections
attribute.
New and updated guides since the previous release
As Open Liberty features and functionality continue to grow, we continue to add new guides to openliberty.io on those topics to make their adoption as easy as possible. Existing guides also receive updates in order to address any reported bugs/issues, keep their content current, and expand what their topic covers.
-
Containerizing microservices and Containerizing microservices with Podman
We’ve been hard at work updating our Containerizing microservices and Containerizing microservices with Podman guides, adding a new section "Optimizing the image size". This section explains how to deploy your application using a parent image with the
kernel-slim
tag. This practice is recommended for production deployments as it provides a bare minimum server with the ability to add the features required by the application, rather than including all of the Liberty features. -
Securing a web application and Persisting data with MongoDB
We are pleased to announce that we have also updated 2 of our guides to adopt our new cloud-hosted environment, removing the need for any prerequisites. The cloud-hosted versions of these guides can be accessed from the guides page by clicking the green "Run in cloud" button.
Get Open Liberty 22.0.0.7 now
Available through Maven, Gradle, Docker, and as a downloadable archive.