<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Open Liberty</title>
    <description>Open Liberty is the most flexible server runtime available to Earth’s Java developers.
</description>
    <link>https://openliberty.io/</link>
    <atom:link href="https://openliberty.io/jakartaee.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Wed, 11 Mar 2026 07:54:56 +0000</pubDate>    
    <lastBuildDate>Wed, 11 Mar 2026 07:54:56 +0000</lastBuildDate>
    <generator>Jekyll v3.8.6</generator>

    
      <item>
        <title>SpringBoot 4.0, preview of Jakarta Data 1.1 and more in 25.0.0.12-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This beta release adds Spring Boot 4.x support, previews Jakarta Data 1.1 capabilities, and enhances the Netty-based HTTP transport. It also updates Model Context Protocol Server 1.0 and introduces the option to use your own AES-256 key for Liberty password encryption.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 25.0.0.12-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#springboot&quot;&gt;SpringBoot 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Early preview of Jakarta Data 1.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mcp&quot;&gt;Model Context Protocol Server 1.0 updates&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#netty&quot;&gt;Updates to Netty‑based HTTP transport on Open Liberty&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#aes256&quot;&gt;Bring your own AES-256 Key&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;springboot&quot;&gt;SpringBoot 4.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty currently supports running Spring Boot 1.5, 2.x, and 3.x applications. With the introduction of the new &lt;code&gt;springBoot-4.0&lt;/code&gt; feature, users can now deploy Spring Boot 4.x applications by enabling this feature. While Liberty consistently supports Spring Boot applications packaged as &lt;code&gt;WAR&lt;/code&gt; files, this enhancement extends support to both &lt;code&gt;JAR&lt;/code&gt; and &lt;code&gt;WAR&lt;/code&gt; formats for Spring Boot 4.x applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The springBoot-4.0 feature provides complete support for running a Sprint Boot 4.x application on Open Liberty as well as having the capability to thin the application when creating applications in containers.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use this feature, the user must be running &lt;code&gt;Java 17&lt;/code&gt; or later with EE11 features enabled. If the application uses servlets, it must be configured to use &lt;code&gt;Servlet 6.1&lt;/code&gt;. Include the following features in your &lt;code&gt;server.xml&lt;/code&gt; file to define the settings.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;features&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;springboot-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-6.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/features&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;server.xml&lt;/code&gt; configuration for deploying a Spring Boot application follows the same approach as in earlier Liberty Spring Boot versions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;springBootApplication&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;spring-boot-app&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;location&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;spring-boot-app-0.1.0.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;spring-boot-app&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As in earlier versions, the Spring Boot application JAR can be deployed by placing it in the &lt;code&gt;/dropins/spring&lt;/code&gt; folder. The &lt;code&gt;springBootApplication&lt;/code&gt; configuration in the &lt;code&gt;server.xml&lt;/code&gt; file can be omitted when using this deployment method.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Early preview of Jakarta Data 1.1&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This release previews three new features of Jakarta Data 1.1: retrieving a subset or projection of entity attributes, the &lt;code&gt;@Is&lt;/code&gt; annotation, and &lt;code&gt;Constraint&lt;/code&gt; subtype parameters for repository methods that apply basic constraints to repository &lt;code&gt;@Find&lt;/code&gt; and &lt;code&gt;@Delete&lt;/code&gt; operations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, repository methods couldn&amp;#8217;t limit retrieval of results to subsets of entity attributes (commonly referred to as projections). Now, repository methods can return Java records that represent a subset of an entity. In addition, parameter-based &lt;code&gt;@Find&lt;/code&gt; and &lt;code&gt;@Delete&lt;/code&gt; methods earlier were not able to filter on conditions other than equality. Now, more advanced filtering can be done in two different ways: typing the repository method parameter with a &lt;code&gt;Constraint&lt;/code&gt; subtype or indicating the &lt;code&gt;Constraint&lt;/code&gt; subtype by using the &lt;code&gt;@Is&lt;/code&gt; annotation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In Jakarta Data, you write simple Java objects called &lt;strong&gt;Entities&lt;/strong&gt; to represent data, and you write interfaces called &lt;strong&gt;Repositories&lt;/strong&gt; to define operations on data. You inject a Repository into your application and use it. The implementation of the &lt;strong&gt;Repository&lt;/strong&gt; is automatically provided for you!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Start by defining an entity class that corresponds to your data. With relational databases, the entity class corresponds to a database table and the entity properties (public methods and fields of the entity class) generally correspond to the columns of the table. An entity class can be:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;annotated with &lt;code&gt;jakarta.persistence.Entity&lt;/code&gt; and related annotations from Jakarta Persistence&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;a Java class without entity annotations, in which case the primary key is inferred from an entity property named &lt;code&gt;id&lt;/code&gt; or ending with &lt;code&gt;Id&lt;/code&gt; and an entity property named &lt;code&gt;version&lt;/code&gt; designates an automatically incremented version column.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Here&amp;#8217;s a simple entity,&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Product&lt;/span&gt; {
    &lt;span class=&quot;annotation&quot;&gt;@Id&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; id;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; price;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; weight;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After you define the entity to represent the data, it is usually helpful to have your IDE generate a static metamodel class for it. By convention, static metamodel classes begin with the underscore character, followed by the entity name. Because this beta is being made available well before the release of Jakarta Data 1.1, we cannot expect IDEs to generate for us yet. However, we can provide the static metamodel class that an IDE would be expected to generate for the &lt;code&gt;Product&lt;/code&gt; entity:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@StaticMetamodel&lt;/span&gt;(Product.class)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;_Product&lt;/span&gt; {
    &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; ID = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;
    &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; NAME = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;
    &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; PRICE = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;
    &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; WEIGHT = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;weight&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;

    NumericAttribute&amp;lt;Product, &lt;span class=&quot;predefined-type&quot;&gt;Long&lt;/span&gt;&amp;gt; id = NumericAttribute.of(
            Product.class, ID, &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt;.class);
    &lt;span class=&quot;predefined-type&quot;&gt;TextAttribute&lt;/span&gt;&amp;lt;Product&amp;gt; name = &lt;span class=&quot;predefined-type&quot;&gt;TextAttribute&lt;/span&gt;.of(
            Product.class, NAME);
    NumericAttribute&amp;lt;Product, &lt;span class=&quot;predefined-type&quot;&gt;Float&lt;/span&gt;&amp;gt; price = NumericAttribute.of(
            Product.class, PRICE, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt;.class);
    NumericAttribute&amp;lt;Product, &lt;span class=&quot;predefined-type&quot;&gt;Float&lt;/span&gt;&amp;gt; weight = NumericAttribute.of(
            Product.class, WEIGHT, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt;.class);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The first half of the static metamodel class includes constants for each of the entity attribute names so that you don&amp;#8217;t need to otherwise hardcode string values into your application. The second half of the static metamodel class provides a special instance for each entity attribute, from which you can build restrictions and sorting to apply to queries at run time.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example is a repository that defines operations that are related to the &lt;code&gt;Product&lt;/code&gt; entity. Your repository interface can inherit from built-in interfaces such as &lt;code&gt;BasicRepository&lt;/code&gt; and &lt;code&gt;CrudRepository&lt;/code&gt;. These interfaces contain various general-purpose repository methods for inserting, updating, deleting, and querying for entities. In addition, you can compose your own operations using the static metamodel and annotations such as &lt;code&gt;@Find&lt;/code&gt; or &lt;code&gt;@Delete&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;(dataStore = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/jdbc/my-example-data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Products&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; CrudRepository&amp;lt;Product, &lt;span class=&quot;predefined-type&quot;&gt;Long&lt;/span&gt;&amp;gt; {

    &lt;span class=&quot;comment&quot;&gt;// Retrieving the whole entity,&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Find&lt;/span&gt;
    Optional&amp;lt;Product&amp;gt; find(&lt;span class=&quot;annotation&quot;&gt;@By&lt;/span&gt;(_Product.ID) &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productNum);

    &lt;span class=&quot;comment&quot;&gt;// The Select annotation can identify a single entity attribute to retrieve,&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Find&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Select&lt;/span&gt;(_Product.PRICE)
    Optional&amp;lt;&lt;span class=&quot;predefined-type&quot;&gt;Float&lt;/span&gt;&amp;gt; getPrice(&lt;span class=&quot;annotation&quot;&gt;@By&lt;/span&gt;(_Product.ID) &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productNum);

    &lt;span class=&quot;comment&quot;&gt;// You can return multiple entity attributes as a Java record,&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Find&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Select&lt;/span&gt;(_Product.WEIGHT)
    &lt;span class=&quot;annotation&quot;&gt;@Select&lt;/span&gt;(_Product.NAME)
    Optional&amp;lt;WeightInfo&amp;gt; getWeightAndName(&lt;span class=&quot;annotation&quot;&gt;@By&lt;/span&gt;(_Product.ID) &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productNum);

    &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; record WeightInfo(&lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; itemWeight, &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; itemName) {}

    &lt;span class=&quot;comment&quot;&gt;// The Select annotation can be omitted if the record component names match the entity attribute names,&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Find&lt;/span&gt;
    &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;WeightPriceInfo&amp;gt; getWeightAndPrice(&lt;span class=&quot;annotation&quot;&gt;@By&lt;/span&gt;(_Product.Name) &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name);

    &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; record WeightPriceInfo(&lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; weight, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; price) {}

    &lt;span class=&quot;comment&quot;&gt;// Constraint subtypes (such as Like) for method parameters offer different types of filtering,&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Find&lt;/span&gt;
    Page&amp;lt;Product&amp;gt; named(&lt;span class=&quot;annotation&quot;&gt;@By&lt;/span&gt;(_Product.Name) Like namePattern,
                        Order&amp;lt;Product&amp;gt; sorting,
                        PageRequest pageRequest);

    &lt;span class=&quot;comment&quot;&gt;// The @Is annotation also allows you to specify Constraint subtypes,&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Find&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@OrderBy&lt;/span&gt;(_Product.PRICE)
    &lt;span class=&quot;annotation&quot;&gt;@OrderBy&lt;/span&gt;(_Product.NAME)
    &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; pricedBelow(&lt;span class=&quot;annotation&quot;&gt;@By&lt;/span&gt;(_Product.PRICE) &lt;span class=&quot;annotation&quot;&gt;@Is&lt;/span&gt;(LessThan.class) &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; maxPrice,
                              &lt;span class=&quot;annotation&quot;&gt;@By&lt;/span&gt;(_Product.Name) &lt;span class=&quot;annotation&quot;&gt;@Is&lt;/span&gt;(Like.class) &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; namePattern);

    &lt;span class=&quot;annotation&quot;&gt;@Delete&lt;/span&gt;
    &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; removeHeaviest(&lt;span class=&quot;annotation&quot;&gt;@By&lt;/span&gt;(_Product.WEIGHT) &lt;span class=&quot;annotation&quot;&gt;@Is&lt;/span&gt;(GreaterThan.class) &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; maxWeightAllowed);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See the following example of the application that uses the repository and static metamodel.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@DataSourceDefinition&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/jdbc/my-example-data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      className = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;org.postgresql.xa.PGXADataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      databaseName = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ExampleDB&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      serverName = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      portNumber = &lt;span class=&quot;integer&quot;&gt;5432&lt;/span&gt;,
                      user = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${example.database.user}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      password = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${example.database.password}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;MyServlet&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; HttpServlet {
    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    Products products;

    &lt;span class=&quot;directive&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doGet(HttpServletRequest req, HttpServletResponse resp)
            &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt; {
        &lt;span class=&quot;comment&quot;&gt;// Insert:&lt;/span&gt;
        Product prod = ...
        prod = products.insert(prod);

        &lt;span class=&quot;comment&quot;&gt;// Find one entity attribute:&lt;/span&gt;
        price = products.getPrice(prod.id).orElseThrow();

        &lt;span class=&quot;comment&quot;&gt;// Find multiple entity attributes as a Java record:&lt;/span&gt;
        WeightInfo info = products.getWeightAndName(prod.id);
        &lt;span class=&quot;predefined-type&quot;&gt;System&lt;/span&gt;.out.println(info.itemName() + &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt; weighs &lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; + info.itemWeight() + &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt; kg.&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);

        &lt;span class=&quot;comment&quot;&gt;// Filter by supplying a Like constraint, returning only the first 10 results:&lt;/span&gt;
        Page&amp;lt;Product&amp;gt; page1 = products.named(
                        Like.pattern(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;%computer%&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;),
                        Order.by(_Product.price.desc(),
                                 _Product.name.asc(),
                                 _Product.id.asc()),
                        PageRequest.ofSize(&lt;span class=&quot;integer&quot;&gt;10&lt;/span&gt;));

        &lt;span class=&quot;comment&quot;&gt;// Filter by supplying values only:&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; found = pricedBelow(&lt;span class=&quot;float&quot;&gt;50.0f&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;%keyboard%&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);

        ...
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about Jakarta Data 1.1, see the following resources:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/data/1.1/apidocs&quot;&gt;Jakarta Data 1.1 API Javadoc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/data/1.1/jakarta-data-1.1.0-m1&quot;&gt;Jakarta Data 1.1 specification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/data/1.1/&quot;&gt;Jakarta Data 1.1 overview page&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;
This beta includes only the Data 1.1 features for entity subsets or projections, the &lt;code&gt;@Is&lt;/code&gt; annotation, and &lt;code&gt;Constraint&lt;/code&gt; subtypes as repository method parameters that accept basic constraint values. Other new Data 1.1 features are not included in this beta.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;mcp&quot;&gt;Model Context Protocol Server 1.0 updates&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;https://modelcontextprotocol.io/docs/getting-started/intro&quot;&gt;Model Context Protocol (MCP)&lt;/a&gt; is an open standard for AI applications to access real-time information from external sources. The Liberty MCP Server feature &lt;code&gt;mcpServer-1.0&lt;/code&gt; allows developers to expose the business logic of their applications, allowing it to be integrated into agentic AI workflows.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This beta release of Liberty includes important updates to the &lt;code&gt;mcpServer-1.0&lt;/code&gt; feature, including session management and easier discovery of the MCP endpoint.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use the &lt;code&gt;mcpServer-1.0&lt;/code&gt; feature, it is required to have &lt;code&gt;Java 17&lt;/code&gt; installed on your system.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mcp-session-management&quot;&gt;MCP Session Management&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This beta version includes support for the &lt;a href=&quot;https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#session-management&quot;&gt;session management&lt;/a&gt; function of the MCP specification. This feature enables stateful sessions between client and server, allowing the server to securely correlate multiple requests in the same session for features like tool call cancellation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When a client connects to the MCP server, a unique session ID is assigned to the client during the &lt;a href=&quot;https://modelcontextprotocol.io/specification/2025-06-18/basic/lifecycle#initialization&quot;&gt;initialization phase&lt;/a&gt; and returned in the &lt;code&gt;Mcp-Session-Id&lt;/code&gt; HTTP response header. For subsequent requests, the client must include the session ID in the &lt;code&gt;Mcp-Session-Id&lt;/code&gt; request header.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mcp-endpoint-discoverability&quot;&gt;MCP Endpoint Discoverability&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The MCP endpoint is made available at &lt;code&gt;/mcp&lt;/code&gt; under the context root of your application, e.g., &lt;code&gt;&lt;a href=&quot;http://localhost:9080/myMcpApp/mcp&quot; class=&quot;bare&quot;&gt;http://localhost:9080/myMcpApp/mcp&lt;/a&gt;&lt;/code&gt;. For ease of discovery, the URL of the MCP endpoint for your Liberty hosted application is now output to the server logs on application startup.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows what you would see in your logs if you have an application called &lt;code&gt;myMcpApp&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;I MCP server endpoint: http://localhost:9080/myMcpApp/mcp&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this beta version, the MCP server endpoint is also accessible with a trailing slash(&lt;code&gt;/&lt;/code&gt;) at the end, for example, &lt;code&gt;&lt;a href=&quot;http://localhost:9080/myMcpApp/mcp/&quot; class=&quot;bare&quot;&gt;http://localhost:9080/myMcpApp/mcp/&lt;/a&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;liberty-mcp-server-api-documentation&quot;&gt;Liberty MCP Server API Documentation&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can now find API documentation for the Liberty MCP Server feature. The javadoc is located in the &lt;code&gt;io.openliberty.mcp_1.0-javadoc.zip&lt;/code&gt; file within your &lt;code&gt;wlp/dev/api/ibm/javadoc&lt;/code&gt; directory.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Attach the Liberty MCP Server feature’s Javadoc to your IDE to view descriptions of the API&amp;#8217;s methods and class details.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The following packages and interfaces that are documented in the Javadoc are not yet implemented:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;io.openliberty.mcp.encoders&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;io.openliberty.mcp.annotations.OutputSchemaGenerator&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;io.openliberty.mcp.annotations.Tool.OutputSchema&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about Liberty MCP Server feature &lt;code&gt;mcpServer-1.0&lt;/code&gt;, including how to get started with it, see the &lt;a href=&quot;https://openliberty.io/blog/2025/10/23/mcp-standalone-blog.html&quot;&gt;blog post&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;netty&quot;&gt;Updates to Netty‑based HTTP transport on Open Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty intoduced Netty-based HTTP transport for 25.0.0.11-beta preview. This change replaced the underlying transport implementation for HTTP/1.1, HTTP/2, WebSocket, JMS, and SIP communications. In this beta release, there are some updates added to this feature. It is designed for zero migration impact—your applications and the &lt;code&gt;server.xml&lt;/code&gt; file continue to behave as before. We are looking forward and counting on your feedback before GA!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Netty’s event‑driven I/O gives us a modern foundation for long‑term scalability, easier maintenance, and future performance work, all without changing APIs or configuration!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;No changes are required to effectively use the current 'All Beta Features' runtime for this release.
To help us evaluate parity and performance with real-world scenarios, you can try the following things:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;HTTP/1.1 and HTTP/2: large uploads or downloads, chunked transfers, compression-enabled content, keep-alive behavior.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WebSocket: long-lived communications, backpressure scenarios&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Timeouts: read/write/keep-alive timeouts under load&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Access logging: verify formatting and log results compared to previous builds&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JMS communications: message send/receive throughput, durable subscriptions&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;limitations-of-the-beta-release&quot;&gt;Limitations of the Beta release:&lt;/h3&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;http&quot;&gt;HTTP&lt;/h4&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;HTTP requests with content length greater than the maximum integer value fails due to internal limitations on request size with Netty.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When the HTTP option &lt;code&gt;maxKeepAliveRequests&lt;/code&gt; has no limit, HTTP 1.1 limits pipelined requests to 50.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HTTP option &lt;code&gt;resetFramesWindow&lt;/code&gt; is reduced from millisecond to second precision due to limitations in the Netty library.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Due to internal limitations of the Netty library, the HTTP option &lt;code&gt;MessageSizeLimit&lt;/code&gt; is now adjusted to be capped at the maximum integer value for HTTP/2.0 connections.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Due to internal differences with Netty, the HTTP option &lt;code&gt;ThrowIOEForInboundConnections&lt;/code&gt; could behave differently from the Channel Framework implementation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Due to internal limitations of Netty, &lt;code&gt;acceptThread&lt;/code&gt; and &lt;code&gt;waitToAccept&lt;/code&gt; TCP options are currently not implemented and are ignored for the current Beta if set.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cleartext upgrade requests for HTTP 2.0 with request data are rejected with a 'Request Entity Too Large' status code. A fix is in progress.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;websocket&quot;&gt;WebSocket&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Websocket inbound requests can generate FFDC &lt;code&gt;RuntimeExceptions&lt;/code&gt; on connection cleanup when a connection is closed from the client side.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;sip&quot;&gt;SIP&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;SIP Resolver transport does not use a Netty transport implementation until this release. This issue is resolved in the current beta!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;alpn&quot;&gt;ALPN&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Currently, our Netty implementation supports only the native JDK ALPN implementation. Additional information for the ALPN implementations that are currently supported by the Channel Framework but not our Netty beta can be found &lt;a href=&quot;https://www.ibm.com/docs/en/was-liberty/base?topic=40-alpn-support&quot;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;aes256&quot;&gt;Bring Your Own AES-256 Key&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty now allows you to provide a Base64-encoded 256-bit AES key for password encryption.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;whats-new&quot;&gt;What’s New?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, Liberty supported the &lt;code&gt;wlp.password.encryption.key&lt;/code&gt; property, which accepted a password and derived an AES key through a computationally intensive process. This derivation involved repeated hashing with a salt over many iterations, which added overhead during server startup.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now you can now supply a pre-generated AES key directly. This eliminates the derivation step, resulting in faster startup times and improved runtime performance when encrypting and decrypting passwords.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;why-it-matters&quot;&gt;Why It Matters&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This feature not only improves performance but also prepares for migration from traditional WebSphere. The encoded password format remains the same, and future migration tools will allow you to export keys from traditional WebSphere for use in Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;how-to-enable-it&quot;&gt;How to Enable It&lt;/h3&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Obtain a 256-bit AES key&lt;/strong&gt; - Generate a 256-bit AES key using your own infrastructure and encode it in Base64, or by using securityUtility.&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To generate a 256-bit AES key using securityUtility, run the new securityUtility generateAESKey task to:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Generate a random AES key:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;./securityUtility generateAESKey&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Derive a key from a passphrase:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;./securityUtility generateAESKey --key=&amp;lt;password&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure the key in Liberty&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Add the following variable in &lt;code&gt;server.xml&lt;/code&gt; or an included file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;variable&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;wlp.aes.encryption.key&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;&amp;lt;your_aes_key&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;&amp;gt;&lt;/span&gt;&amp;quot; /&lt;span class=&quot;error&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Encode your passwords&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Use &lt;code&gt;securityUtility encode&lt;/code&gt; with one of these options:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Provide the key directly:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;./securityUtility encode --encoding=aes --base64Key=&amp;lt;your_base64_key&amp;gt; &amp;lt;password&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Specify an XML or properties file containing &lt;code&gt;wlp.aes.encryption.key&lt;/code&gt; or &lt;code&gt;wlp.password.encryption.key&lt;/code&gt;. &lt;strong&gt;Note:&lt;/strong&gt; The aesConfigFile parameter now allows users to encode with either of the aes properties:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;./securityUtility encode --encoding=aes --aesConfigFile=&amp;lt;xml_or_properties_file_path&amp;gt; &amp;lt;password&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Update configuration&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Copy the new encoded values into your server configuration.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Performance Tip:&lt;/strong&gt; For best results, re-encode all passwords using the new key. Mixed usage of old and new formats is supported for backward compatibility, but full migration ensures optimal performance.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Other command line tasks have been updated to accept Base64 keys and AES configuration files in a similar fashion:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;securityUtility&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;createSSLCertificate&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;createLTPAKeys&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;encode&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;configUtility&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;install&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;collective&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;create&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;join&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;replicate&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 25, Java SE 21, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.11.5&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;25.0.0.12-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your &lt;code&gt;pom.xml&lt;/code&gt; file for the beta version of the APIs that are associated with the beta features that you want to try. For example, the following block adds dependencies for two example beta APIs:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.example.spec&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;exampleApi&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;7.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;example.platform&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;example.example-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;11.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.9.5'
    }
}
apply plugin: 'liberty'
dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[25.0.0.12-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;IntelliJ IDEA&lt;/a&gt;, &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Visual Studio Code&lt;/a&gt; or &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Eclipse IDE&lt;/a&gt;, you can also take advantage of our open source &lt;a href=&quot;https://openliberty.io/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty developer tools&lt;/a&gt; to enable effective development, testing, debugging and application management all from within your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 18 Nov 2025 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2025/11/18/25.0.0.12-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2025/11/18/25.0.0.12-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>security</category>
        
        <category>spring</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        <category>performance-enhancements</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Enhanced message validation for XML Web Services in 24.0.0.12-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 24.0.0.12-beta release enhances inbound SOAP message validation in XML Web Services to simplify message debugging and make your web services and clients more resilient.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;xmlws&quot;&gt;Fine-tuning XML Web Services inbound SOAP message validation&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty&amp;#8217;s XML Web Services features now support fine-grained message validation for inbound SOAP messages. This enhancement provides more control over message validation options.
In Open Liberty 24.0.0.12-beta, you can configure message validation using new attributes in the &lt;code&gt;server.xml&lt;/code&gt; file. These attributes are available for the &lt;code&gt;webService&lt;/code&gt; and &lt;code&gt;webServiceClient&lt;/code&gt; elements.&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 50%;&quot;&gt;
&lt;col style=&quot;width: 50%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Attribute&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;code&gt;enableSchemaValidation&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Enable full validation against the XML schema&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;code&gt;enableDefaultValidation&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Enable or disable default validation for JAXB&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;code&gt;ignoreUnexpectedElements&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Use default validation while ignoring &lt;code&gt;UnmarshallExceptions: Unknown Element&lt;/code&gt; errors&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The default value for &lt;code&gt;enableDefaultValidation&lt;/code&gt; in the &lt;code&gt;webServiceClient&lt;/code&gt; element is &lt;code&gt;true&lt;/code&gt;. The rest of the attributes default to &lt;code&gt;false&lt;/code&gt; in both the &lt;code&gt;webServiceClient&lt;/code&gt; and &lt;code&gt;webService&lt;/code&gt; elements.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These attributes require one of the following XML Web Services features to be enabled in your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/xmlWS-4.0.html&quot;&gt;Jakarta XML Web Services 4.0&lt;/a&gt; (&lt;code&gt;xmlWS-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/xmlWS-3.0.html&quot;&gt;Jakarta XML Web Services 4.0&lt;/a&gt; (&lt;code&gt;xmlWS-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/jaxws-2.2.html&quot;&gt;Java Web Services 2.2&lt;/a&gt; (&lt;code&gt;jaxws-2.2&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;By using these attributes, you can tailor message validation to your specific needs and improve the security and reliability of your SOAP-based web services. You can apply the configuration to web services (&lt;code&gt;webService&lt;/code&gt;) or web service clients (&lt;code&gt;webServiceClient&lt;/code&gt;), either globally, or to an individual client or web service implementation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;xml-schema-validation&quot;&gt;XML schema validation&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can set the &lt;code&gt;enableSchemaValidation=true&lt;/code&gt; attribute to provide more insight into JAXB unmarshalling exceptions and make painful message debugging easier. This option is the highest level of XML validation, which provides faster debugging and the most thorough checks on inbound message contents. But it comes with a tradeoff: higher performance cost.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;global-xml-schema-validation&quot;&gt;Global XML schema validation&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to enable XML schema validation for web services globally for your Open Liberty runtime:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webService&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;enableSchemaValidation&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable XML schema validation globally for web service clients, set the same attribute on the &lt;code&gt;webServiceClient&lt;/code&gt; element:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webServiceClient&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;enableSchemaValidation&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;targeted-xml-schema-validation&quot;&gt;Targeted XML schema validation&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to enable XML schema validation for a particular web service by using the web service port:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webService&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;portName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;&amp;lt;web service port name&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;&amp;gt;&lt;/span&gt;&amp;quot;  enableSchemaValidation=&amp;quot;true&amp;quot; /&lt;span class=&quot;error&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The value of &lt;code&gt;portName&lt;/code&gt; is the port name of the Web Service implementation you&amp;#8217;re configuring.  This name comes from your &lt;code&gt;@WebService(portName=&amp;lt;web service port name&amp;gt;&lt;/code&gt; annotated class.
Alternatively, you can check the &lt;code&gt;&amp;lt;wsdl:port &amp;#8230;&amp;#8203; name=&quot;Web Service Port Name&quot;&amp;gt;&lt;/code&gt; line in your WSDL file for the port name.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to enable XML schema validation for a specific client service:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webServiceClient&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;serviceName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;&amp;lt;client service name&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;&amp;gt;&lt;/span&gt;&amp;quot;  enableSchemaValidation=&amp;quot;true&amp;quot; /&lt;span class=&quot;error&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The value of &lt;code&gt;serviceName&lt;/code&gt; is the name of the Web Service Client you&amp;#8217;re configuring. This name comes from your &lt;code&gt;@WebServiceClient(serviceName=&amp;lt;client service name&amp;gt;&lt;/code&gt; annotated stub class for managed clients.
For unmanaged clients, you can check the &lt;code&gt;&amp;lt;wsdl:service name=&quot;&amp;lt;client service name&amp;gt;&quot;&lt;/code&gt; line in your WSDL file.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;default-validation&quot;&gt;Default validation&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can configure the default level of JAXB validation of inbound SOAP Messages with the &lt;code&gt;enableDefaultValidation=true&lt;/code&gt; attribute. Default validation is much more efficient than XML schema validation, so enabling it provides basic message validation with lower overhead. Disabling it lets you ignore various unmarshalling errors for problematic messages. Default validation is enabled by default for web services, but disabled for web service clients.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;global-default-validation&quot;&gt;Global default validation&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to enable default validation globally for web services in your Open Liberty runtime:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webService&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;enableDefaultValidation&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Default validation is enabled by default for web service clients. To disable default validation globally for web service clients, set the &lt;code&gt;enableDefaultValidation=&quot;false&quot;&lt;/code&gt; attribute on the &lt;code&gt;webServiceClient&lt;/code&gt; element.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webServiceClient&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;enableDefaultValidation&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;targeted-default-validation&quot;&gt;Targeted default validation&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to enable default validation for a specific web service:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webService&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;portName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SayHelloService&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;enableDefaultValidation&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Default validation is enabled by default for web service clients. To disable default validation for a specific web service client, set the &lt;code&gt;enableDefaultValidation=&quot;false&quot;&lt;/code&gt; attribute on the &lt;code&gt;webServiceClient&lt;/code&gt; element and use the &lt;code&gt;serviceName&lt;/code&gt; attribute to specify the client service.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webServiceClient&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;serviceName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;&amp;lt;client service name&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;&amp;gt;&lt;/span&gt;&amp;quot;  enableDefaultValidation=&amp;quot;false&amp;quot; /&lt;span class=&quot;error&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;ignore-unexpected-elements&quot;&gt;Ignore unexpected elements&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Inbound SOAP messages often contain extra elements in the SOAP body when a web service is updated but the client is not. When a message contains an unknown element, Open Liberty throws a &lt;code&gt;UnmarshallingException: Unknown Element&lt;/code&gt;. By enabling &lt;code&gt;ignoreUnexpectedElements&lt;/code&gt;, you can keep validation enabled while ignoring unknown elements.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;global-configuration&quot;&gt;Global configuration&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to ignore unexpected elements globally for web services on your Open Liberty runtime:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webService&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;ignoreUnexpectedElements&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To ignore unexpected elements globally for web service clients, set the &lt;code&gt;ignoreUnexpectedElements&lt;/code&gt; attribute on the &lt;code&gt;webServiceClient&lt;/code&gt; element.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;targeted-configuration&quot;&gt;Targeted configuration&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to ignore unexpected elements for a specific web service:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webService&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;portName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SayHelloService&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;ignoreUnexpectedElements&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To ignore unexpected elements for a specific web service client, set the same attribute on the &lt;code&gt;webServiceClient&lt;/code&gt; element and use the &lt;code&gt;serviceName&lt;/code&gt; attribute to specify the client service.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 23, 21, 17, 11, and 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package by using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.11.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;24.0.0.12-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try. For example, the following block adds dependencies for two example beta APIs:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.example.spec&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;exampleApi&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;7.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;example.platform&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;example.example-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;11.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.9.1'
    }
}
apply plugin: 'liberty'
dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[24.0.0.12-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;IntelliJ IDEA&lt;/a&gt;, &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Visual Studio Code&lt;/a&gt; or &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Eclipse IDE&lt;/a&gt;, you can also take advantage of our open source &lt;a href=&quot;https://openliberty.io/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty developer tools&lt;/a&gt; to enable effective development, testing, debugging, and application management all from within your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 19 Nov 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/11/19/24.0.0.12-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/11/19/24.0.0.12-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Rethinking microservices</title>
        <description>&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;There are many misconceptions for microservices, which have been around for over a decade. Some people wonder whether microservices are going to die, especially in an IT industry that is quickly moving toward the cloud. With serverless becoming a hot topic, will microservices survive in the serverless era?&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this blog, take a step back and rethink microservices. We start with the history of microservices, then misconception about microservices, best practices of microservices and finally the future of microservices.&lt;/p&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 12 Nov 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/redirected.html</link>
        <guid isPermaLink="true">
          
            https://medium.com/@emijiang6/rethinking-microservices-dcf9696af385
          
        </guid>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Simplify your configuration with versionless features in 24.0.0.8</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This release introduces versionless features for the Jakarta EE, Java EE, and MicroProfile platforms. It also includes updates to eliminate unnecessary audit records.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 24.0.0.8:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#versionless&quot;&gt;Streamline feature selection with versionless Jakarta EE, Java EE, and MicroProfile features&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#audit&quot;&gt;Use the Audit 2.0 feature to avoid generating unnecessary REST Handler records&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Along with the new features and functions added to the runtime, we’ve also &lt;a href=&quot;#guides&quot;&gt;added a new guide to using MicroProfile Config&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;View the list of fixed bugs in &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A24008+label%3A%22release+bug%22&quot;&gt;24.0.0.8&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out &lt;a href=&quot;/blog/?search=release&amp;amp;search!=beta&quot;&gt;previous Open Liberty GA release blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Develop and run your apps using 24.0.0.8&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, include the following code in your &lt;code&gt;pom.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.10.3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;, include the following in your &lt;code&gt;build.gradle&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.8.3'
    }
}
apply plugin: 'liberty'&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/start/&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;IntelliJ IDEA&lt;/a&gt;, &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Visual Studio Code&lt;/a&gt; or &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Eclipse IDE&lt;/a&gt;, you can also take advantage of our open source &lt;a href=&quot;https://openliberty.io/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty developer tools&lt;/a&gt; to enable effective development, testing, debugging and application management all from within your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://stackoverflow.com/tags/open-liberty&quot;&gt;&lt;img src=&quot;/img/blog/blog_btn_stack.svg&quot; alt=&quot;Ask a question on Stack Overflow&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;versionless&quot;&gt;Streamline feature selection with versionless Jakarta EE, Java EE, and MicroProfile features&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With Open Liberty, you configure only the features at the specific versions that your application needs. This composable design pattern minimizes runtime resource requirements and accelerates application startup times. However, you might not always know which version of a feature is compatible with the rest of your application configuration. In previous releases, determining the correct version typically required a mix of experimentation, guesswork, and digging deep into feature documentation. In 24.0.0.8 and later, versionless features automate version selection, enabling you to focus on application development without worrying about compatibility issues.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For example, instead of specifying &lt;code&gt;servlet-6.0&lt;/code&gt; in your &lt;code&gt;server.xml&lt;/code&gt; file and having to figure out which other feature versions are compatible with Servlet 6.0, you can specify a platform version and &lt;code&gt;servlet&lt;/code&gt;. The platform that you specify resolves all versionless features to a compatible version.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following &lt;code&gt;server.xml&lt;/code&gt; file configuration uses a Java EE platform of &lt;code&gt;javaee-8.0&lt;/code&gt; with associated versionless features that are defined for &lt;code&gt;servlet&lt;/code&gt;, &lt;code&gt;jpa&lt;/code&gt;, and &lt;code&gt;jaxrs&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Enable features --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;platform&amp;gt;&lt;/span&gt;javaee-8.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/platform&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jpa&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jaxrs&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This example enables versionless MicroProfile features with &lt;code&gt;microProfile-5.0&lt;/code&gt; specified as the platform element:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Enable features --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;platform&amp;gt;&lt;/span&gt;microProfile-5.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/platform&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpHealth&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpMetrics&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Note: The Liberty Maven and Gradle build plugins do not yet support versionless features or platform definitions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Learn more and check out the full collection of available platforms and versionless features in the &lt;a href=&quot;/docs/latest/reference/feature/versionless-features.html&quot;&gt;Open Liberty docs&lt;/a&gt;. Stay tuned for more versionless features and platforms in future releases.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;audit&quot;&gt;Use the Audit 2.0 feature to avoid generating unnecessary REST Handler records&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 24.0.0.8 release introduces the &lt;a href=&quot;/docs/latest/reference/feature/audit-2.0.html&quot;&gt;Audit 2.0 feature&lt;/a&gt; (&lt;code&gt;audit-2.0&lt;/code&gt;). The feature is designed for users who are not using REST Handler applications.
It provides the same audit records as the Audit 1.0 feature (&lt;code&gt;audit-1.0&lt;/code&gt;) but it does not generate records for REST Handler applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you need to keep audit records for REST Handler applications, you can continue to use the Audit 1.0 feature.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the Audit 2.0 feature in your application, add the following code to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;audit-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;guides&quot;&gt;New guide: Externalizing environment-specific microservice configuration for CI/CD&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A new guide is available under the &lt;a href=&quot;https://openliberty.io/guides/#configuration&quot;&gt;Configuration&lt;/a&gt; category: &lt;a href=&quot;https://openliberty.io/guides/microprofile-config-profile.html&quot;&gt;Externalizing environment-specific microservice configuration for CI/CD&lt;/a&gt;. You&amp;#8217;ll learn how to use MicroProfile Config&amp;#8217;s configuration profiles to externalize configurations for different phases of the CI/CD lifecycle.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-open-liberty-24-0-0-8-now&quot;&gt;Get Open Liberty 24.0.0.8 now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Available through &lt;a href=&quot;#run&quot;&gt;Maven, Gradle, Docker, and as a downloadable archive&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 13 Aug 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/08/13/24.0.0.8.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/08/13/24.0.0.8
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        <category>monitoring</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Recognize your cloud-native Java development skills with the Liberty Developer Essentials Badge</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In a world where in-demand skills are critical for job success, security, and progression, it&amp;#8217;s vital that we, as developers, ensure we are showcasing our skills to the wider world. This can include qualifications, courses, and badges, all of which help us to advertise our skills and highlight our professional experiences and expertise.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;So, to help make this easier (and free!) for Java developers, the Open Liberty team created the first-ever Liberty badge: &lt;a href=&quot;https://www.credly.com/org/ibm/badge/liberty-developer-essentials&quot;&gt;Liberty Developer Essentials&lt;/a&gt;!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This badge enables developers to showcase their ability to use open source technologies, such as &lt;a href=&quot;https://openliberty.io/&quot;&gt;Open Liberty&lt;/a&gt;, &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Jakarta EE&lt;/a&gt;, and &lt;a href=&quot;https://microprofile.io/&quot;&gt;MicroProfile&lt;/a&gt;, to effectively create a cloud-native Java application.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/LibertyBadge1.png&quot; alt=&quot;Screenshot of Liberty Developer Essentials badge on Credly website&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;em&gt;If you&amp;#8217;re not familiar with &lt;a href=&quot;https://openliberty.io/&quot;&gt;Open Liberty&lt;/a&gt;, it is an open application framework that is designed for the cloud. It&amp;#8217;s small, lightweight, and designed with modern cloud-native application development in mind. It supports the full MicroProfile and Jakarta EE APIs and is composable, meaning that you can use only the features that you need and keep everything lightweight, which is great for microservices. It also deploys to every major cloud platform, including Docker, Kubernetes, and Cloud Foundry. You can check out more about why developers love Liberty in &lt;a href=&quot;https://developer.ibm.com/articles/why-cloud-native-java-developers-love-liberty/&quot;&gt;this article on IBM Developer&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;who-should-apply-for-this-badge&quot;&gt;Who should apply for this badge?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;New Java developers and experienced Java developers can both benefit from this badge!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;new-developers&quot;&gt;New developers&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re new to the world of developing cloud-native Java applications and you&amp;#8217;re looking for a good place to start, this badge and its corresponding course are a great starting point. By completing this course, you&amp;#8217;ll learn practical, hands-on skills to effectively develop a basic Java application. You&amp;#8217;ll then be able to apply these skills and be recognised for them through the associated badge that you can advertise on your CV, LinkedIn profile, and elsewhere.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;experienced-developers&quot;&gt;Experienced developers:&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Alternatively, if you already have experience developing cloud-native Java applications, you can benefit from this badge as a way to showcase and advertise your skills externally. If you&amp;#8217;re a developer who is already using Liberty, this is a great way to easily show the experience you have and ability to use Liberty and other enterprise-level, open source technologies and standards to effectively create cloud-native Java applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;On the other hand, if you&amp;#8217;re experienced in developing cloud-native Java applications but have not used Liberty before, this course and badge offer you an opportunity to showcase your transferable skills, add Liberty to your tool belt, and widen the range of proven platforms that you can apply your development skills to.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;how-can-i-get-this-badge&quot;&gt;How can I get this badge?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To earn the badge, there are two core components:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A hands-on course&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;An exam that tests the skills and knowledge learnt through the course&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;hands-on-course&quot;&gt;Hands-on Course&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Developers who complete the &lt;a href=&quot;https://cognitiveclass.ai/courses/essentials-for-java-application-development-with-liberty&quot;&gt;Essentials for Cloud-Native Java Application Development&lt;/a&gt; beginner-level course on &lt;a href=&quot;https://cognitiveclass.ai/&quot;&gt;cognitiveclass.ai&lt;/a&gt; can earn this badge.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;em&gt;Note: If you&amp;#8217;re already an experienced Liberty user, you&amp;#8217;re also welcome to skip straight to the end exam.&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This course teaches you the essential skills and technologies to create a basic cloud-native Java application with Open Liberty. It is composed of 5 modules that all involve hands-on coding experience using some of the Open Liberty interactive guides.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Course modules:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Getting started with Open Liberty&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Creating a RESTful web service&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Consuming a RESTful web service&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Injecting dependencies into microservices&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configuring microservices&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/LibertyBadge2.png&quot; alt=&quot;Screenshot of Essentials for Cloud Native Java Application Development course on cognitiveclass.ai site&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;By completing these modules, you&amp;#8217;ll learn about REST applications, contexts and dependency injection (CDI), externalizing application configuration, and more. All of these skills are essential for developing a basic cloud-native Java application. These modules utilise enterprise, open source, industry standards, including MicroProfile and Jakarta EE - skills that are especially important for developers working on enterprise applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;There are no hard requirements to be able to take this course. However, a basic knowledge of Java, Maven, and microservices will be useful. It&amp;#8217;s also worth noting that this is a self-paced course and can be taken at any time.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;end-exam&quot;&gt;End Exam&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;At the end of the course, you&amp;#8217;ll be presented with an exam to complete. To pass this end exam, you must score at least 80% on higher. The exam consists of 20 multiple-choice questions based on the skills and knowledge you gained by competing the the course.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Once you successfully pass this final exam, you&amp;#8217;ll receive the Liberty Developer Essentials badge from Credly. You can then share this badge through social media sites like LinkedIn, or add it to things like your CV or email footer.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;the-first-of-many&quot;&gt;The first of many…&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This badge is what we hope will be the first of many Liberty badges, enabling developers to learn and be recognised for various skills that are required for effective cloud-native Java app development. In the future, we aim to create badges that go beyond the beginner level into deeper, more challenging topics. Keep your eyes peeled for updates. If you have suggestions for badges you&amp;#8217;d like to see, share them with us by creating an issue on the &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;Open Liberty GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-your-liberty-developer-essentials-badge-today&quot;&gt;Get your Liberty Developer Essentials Badge today!&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;So, whether you&amp;#8217;re new to Java development or a seasoned pro, get your &lt;a href=&quot;https://www.credly.com/org/ibm/badge/liberty-developer-essentials&quot;&gt;Liberty Developer Essentials badge&lt;/a&gt; today and showcase your cloud-native Java application development skills! Once you&amp;#8217;ve been awarded the badge, we&amp;#8217;d love to see them on social media - please do tag us on X (&lt;a href=&quot;https://twitter.com/openlibertyio&quot;&gt;@OpenLibertyIO&lt;/a&gt;) and LinkedIn (&lt;a href=&quot;https://www.linkedin.com/company/openlibertyio/&quot;&gt;Open Liberty&lt;/a&gt;) so we can celebrate with you!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/LibertyBadgeIcon.png&quot; alt=&quot;Screenshot of Liberty Developer Essentials badge icon&quot; width=&quot;30%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 06 Aug 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/08/06/liberty-developer-essentials-badge.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/08/06/liberty-developer-essentials-badge
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>maven</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Simplify your runtime configuration with versionless features in 24.0.0.8-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This release simplifies choosing compatible features for the MicroProfile, Jakarta EE, and Java EE platforms by introducing versionless features. It also includes previews of Jakarta EE 11 and MicroProfile 7.0 beta features and a partitioned cookies function.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 24.0.0.8-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#versionless&quot;&gt;Streamline feature selection with versionless Jakarta EE and MicroProfile features&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#cookie&quot;&gt;Keep using third party cookies with CHIPS&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile 7.0 beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp7&quot;&gt;Enable the full set of MicroProfile 7.0 beta features with the MicroProfile 7.0 convenience feature&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#ft&quot;&gt;Integrate fault tolerance and OpenTelemetry with MicroProfile Fault Tolerance 4.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#openapi&quot;&gt;Document APIs in OpenAPI 3.1 format with MicroProfile OpenAPI 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#rc&quot;&gt;Align your REST client with Jakarta RESTful Web Services with MicroProfile Rest Client 4.0 &lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mptel&quot;&gt;Collect and export HTTP metrics and logs with MicroProfile Telemetry 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta EE 11 beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#data&quot;&gt;Bring your own Jakarta Data provider with Jakarta Data API 1.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#faces&quot;&gt;Bring your own Jakarta Faces implementation with Jakarta Faces Container 4.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#websocket&quot;&gt;Improve asynchronous handling with Jakarta WebSocket 2.2&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jpa&quot;&gt;Use Jakarta Persistence with improved type safety and other enhancements with Jakarta Persistence 3.2&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;versionless&quot;&gt;Streamline feature selection with versionless Jakarta EE and MicroProfile features&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With Open Liberty, you configure only the features at the specific versions that your application needs. This composable design pattern minimizes runtime resource requirements and accelerates application startup times. However, you might not always know which version of a feature is compatible with the rest of your application configuration. Determining the correct version typically requires a mix of experimentation, guesswork, and digging deep into feature documentation. Versionless features automate version selection, enabling you to focus on application development without worrying about compatibility issues.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Versionless features provide a generic way to specify Open Liberty features without having to specify a feature version. These new features are available for the MicroProfile, Jakarta EE, and Java EE platforms. When you use versionless features, you must specify a corresponding versioned platform element in your &lt;code&gt;server.xml&lt;/code&gt; file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For example, instead of specifying &lt;code&gt;servlet-6.0&lt;/code&gt; in your &lt;code&gt;server.xml&lt;/code&gt; file and having to figure out which other feature versions are compatible with Servlet 6.0, you can specify a platform version and &lt;code&gt;servlet&lt;/code&gt;. The platform that you specify resolves all versionless features to a compatible version.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following &lt;code&gt;server.xml&lt;/code&gt; file configuration uses a Java EE platform of &lt;code&gt;javaee-8.0&lt;/code&gt; with associated versionless features that are defined for &lt;code&gt;servlet&lt;/code&gt;, &lt;code&gt;jpa&lt;/code&gt;, and &lt;code&gt;jaxrs&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Another example is specifying&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Enable features --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;platform&amp;gt;&lt;/span&gt;javaee-8.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/platform&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jpa&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jaxrs&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This example enables versionless MicroProfile features with &lt;code&gt;microProfile-5.0&lt;/code&gt; specified as the platform element:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Enable features --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;platform&amp;gt;&lt;/span&gt;microProfile-5.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/platform&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpHealth&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpMetrics&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out the full collection of available platforms and versionless features in the &lt;a href=&quot;#platform-ref&quot;&gt;lists at the end of this post&lt;/a&gt;. Stay tuned for more information about versionless features in a forthcoming blog post and full documentation when versionless features are released for general availability (GA).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;known-limitations&quot;&gt;Known limitations&lt;/h3&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Error handling scenarios return generic messages.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Feature installation scenarios that use  command-line tools, including Maven and Gradle plug-ins, are not supported.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;cookie&quot;&gt;Keep using third party cookies with CHIPS&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To increase privacy and reduce tracking, &lt;a href=&quot;https://developers.google.com/privacy-sandbox/3pcd/&quot;&gt;Google Chrome announced it would phase out third-party cookies in 2025&lt;/a&gt;. Then, as of July 22, 2024, &lt;a href=&quot;https://privacysandbox.com/news/privacy-sandbox-update/&quot;&gt;Chrome stated they might scrap the phase-out plan&lt;/a&gt; due to regulatory concerns. Users instead could opt to block third party cookies via their browser. Some sites that are designed with third-party cookies in mind are broken by browsers that opt-in to block third party cookies. Chrome provides &lt;a href=&quot;https://developers.google.com/privacy-sandbox/3pcd/prepare/test-for-breakage&quot;&gt;documentation&lt;/a&gt; to help you test whether your sites are affected. If you are, one option to mitigate this change is called CHIPS: Cookies Having Independent Partitioned State.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;First, some background information regarding third-party (cross-site) cookies.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If a top-level site X embeds another site Z, such as an iframe, then any cookies set by the embedded site Z might be shared with any other site that embeds site Z, such as top-level site Y. This vulnerability is due to cookies placed in a cookie jar under the Z site key. This scenario assumes that the cookie is labeled as &lt;code&gt;SameSite=None&lt;/code&gt;, because it isn&amp;#8217;t shared when set to &lt;code&gt;Lax&lt;/code&gt; or &lt;code&gt;Strict&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/cookie1.png&quot; alt=&quot;multisite cookie diagram&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Chrome provides a &lt;code&gt;Partitioned&lt;/code&gt; cookie attribute, which divides the cookie jar, as a workaround for third-party cookies with limitations. Instead of saving the cookies within the Z site key, they will also be keyed under the top-level site, such as X and Y.  In this way, if X embeds Z and Y embeds Z, the Z&amp;#8217;s cookies will not be shared between X and Y.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/cookie2.png&quot; alt=&quot;partitioned cookie diagram&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can use the &lt;code&gt;Partitioned&lt;/code&gt; attribute to specify whether a cookie is partitioned. If the &lt;code&gt;SameSite=None&lt;/code&gt; attribute is missing from the cookie, it is blocked by Chrome and any Chromium-based browsers because it is treated as &lt;code&gt;Lax&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The partitioned attribute configuration is opt-in and behaves much like the SameSite configuration. The &lt;code&gt;samesite&lt;/code&gt; channel configuration applies to all cookies, while the &lt;code&gt;httpSession&lt;/code&gt; and &lt;code&gt;webAppSecurity&lt;/code&gt; configurations apply to their respective cookies. It&amp;#8217;s important to note that the &lt;code&gt;httpSession&lt;/code&gt; and &lt;code&gt;webAppSecurity&lt;/code&gt; configurations take precedence over the channel configuration. The default value for these two attributes is &lt;code&gt;defer&lt;/code&gt;, which means they defer to the channel configuration. As for channel configuration, its default value is &lt;code&gt;false&lt;/code&gt;, which means the &lt;code&gt;Partitioned&lt;/code&gt; attribute is not added.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Depending on which configuration you use to declare the &lt;code&gt;Partitioned&lt;/code&gt; attribute, Liberty uses one of three attributes.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to set the &lt;code&gt;cookiePartitioned&lt;/code&gt; attribute for the HTTP session cookie on the &lt;code&gt;httpSession&lt;/code&gt; attribute in your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;httpSession&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;cookieSameSite&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;cookiePartitioned&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defer|true|false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;`&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to set the &lt;code&gt;partitionedCookie&lt;/code&gt; attribute for LTPA and JWT security cookies on the &lt;code&gt;webAppSecurity&lt;/code&gt; attribute in your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webAppSecurity&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;sameSiteCookie&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;partitionedCookie&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defer|true|false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;`&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to set the &lt;code&gt;partitioned&lt;/code&gt; attribute for other cookies on the &lt;code&gt;httpEndpoint&lt;/code&gt; attribute in your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;httpEndpoint&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultHttpEndpoint&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
              &lt;span class=&quot;attribute-name&quot;&gt;httpPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9080&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
              &lt;span class=&quot;attribute-name&quot;&gt;httpsPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9443&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;samesite&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;none&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;partitioned&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true|false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/httpEndpoint&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Alternatively, you can set &lt;code&gt;Partitioned&lt;/code&gt; by using the &lt;code&gt;Set-Cookie&lt;/code&gt; header with the following two &lt;code&gt;HttpServletResponse&lt;/code&gt; APIs:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/docs/ref/javaee/8/#package=javax/servlet/http/package-frame.html&amp;amp;class=javax/servlet/http/HttpServletResponse.html#setHeader-java.lang.String-java.lang.String-&quot;&gt;HttpServletResponse.setHeader&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/docs/ref/javaee/8/#package=javax/servlet/http/package-frame.html&amp;amp;class=javax/servlet/http/HttpServletResponse.html#addHeader-java.lang.String-java.lang.String-&quot;&gt;HttpServletResponse.addHeader&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, including a visual example, see &lt;a href=&quot;https://github.com/privacycg/CHIPS?tab=readme-ov-file#chips-cookies-having-independent-partitioned-state&quot;&gt;CHIPS (Cookies Having Independent Partitioned State)&lt;/a&gt; on GitHub.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;mp7&quot;&gt;Enable the full set of MicroProfile 7.0 beta features with the MicroProfile 7.0 convenience feature&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 24.0.0.8-beta release includes the beta release of MicroProfile 7.0 and the &lt;code&gt;microProfile-7.0&lt;/code&gt; &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html#&quot;&gt;convenience feature&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile 7.0 (MP 7.0) is a major release. It brings in &lt;a href=&quot;https://jakarta.ee/specifications/coreprofile/10/&quot;&gt;Jakarta EE 10&lt;/a&gt; and &lt;a href=&quot;https://jakarta.ee/specifications/coreprofile/11/&quot;&gt;Jakarta 11&lt;/a&gt; core profile APIs and the following MicroProfile component specifications:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-config/releases/tag/3.1&quot;&gt;MicroProfile Config 3.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-fault-tolerance/releases/tag/4.1-RC2&quot;&gt;MicroProfile Fault Tolerance 4.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-health/releases/tag/4.0&quot;&gt;MicroProfile Health 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-jwt-auth/releases/tag/2.1&quot;&gt;MicroProfile JWT Authentication 2.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-open-api/releases/tag/4.0&quot;&gt;MicroProfile OpenAPI 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-rest-client/releases/tag/4.0-RC2&quot;&gt;MicroProfile Rest Client 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-telemetry/releases/tag/2.0-RC2&quot;&gt;MicroProfile Telemetry 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following 4 specifications have updates while the other 3 specifications remain unchanged.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#ft&quot;&gt;MicroProfile Fault Tolerance 4.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#openapi&quot;&gt;MicroProfile OpenAPI 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#rc&quot;&gt;MicroProfile Rest Client 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mptel&quot;&gt;MicroProfile Telemetry 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Telemetry 2.0 now provides support for &lt;a href=&quot;https://opentelemetry.io/&quot;&gt;OpenTelemetry&lt;/a&gt; logs and metrics. Consequently, MicroProfile Metrics is not part of MicroProfile 7.0. However, the MicroProfile Metrics 5.1 feature is still compatible with MicroProfile 7.0 features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable MicroProfile 7.0 and all its constituent features, add the &lt;code&gt;microProfile-7.0&lt;/code&gt; convenience feature to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;microProfile-7.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;ft&quot;&gt;Integrate fault tolerance and OpenTelemetry with MicroProfile Fault Tolerance 4.1&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/fault-tolerance.html&quot;&gt;MicroProfile Fault Tolerance&lt;/a&gt; helps you easily identify and mitigate failures in your code. It provides annotations that you can add to methods to use bulkhead, circuit breaker, retry, timeout, and fallback strategies.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new &lt;code&gt;mpFaultTolerance-4.1&lt;/code&gt; feature integrates with the &lt;code&gt;mpTelemetry-2.0&lt;/code&gt; feature, so that Fault Tolerance can export metric data to OpenTelemetry. With this change, and other changes in &lt;code&gt;mpTelemetry-2.0&lt;/code&gt;, you can simplify the configuration and management of your application observability by using OpenTelemetry as the single source for logging, metrics, and tracing.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable this functionality, enable &lt;code&gt;mpFaultTolerance-4.1&lt;/code&gt; and &lt;code&gt;mpTelemetry-2.0&lt;/code&gt; in your &lt;code&gt;server.xml&lt;/code&gt; file and then &lt;a href=&quot;/docs/latest/microprofile-telemetry.html&quot;&gt;configure mpTelemetry-2.0 to export metrics&lt;/a&gt;. The following examples show a minimal configuration for OpenTelemetry to export to your &lt;code&gt;messages.log&lt;/code&gt; file and a class that generates Fault Tolerance metrics (it must be accessed as a CDI bean).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;server-xml-file-configuration&quot;&gt;server.xml file configuration&lt;/h3&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpFaultTolerance-4.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpTelemetry-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;bootstrap-properties-file-configuration&quot;&gt;bootstrap.properties file configuration&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example configures OpenTelemetry to only output metrics to the &lt;code&gt;messages.log&lt;/code&gt; file.
It also sets a very low interval for exporting metrics so you can see the results quickly.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;otel.sdk.disabled=false
otel.metrics.exporter=logging
otel.logs.exporter=none
otel.traces.exporter=none
otel.metric.export.interval=500&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;example-application-class&quot;&gt;Example application class&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Ensure that this class is injected as a CDI bean and invoked by the user in whatever way you prefer.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;import org.eclipse.microprofile.faulttolerance.Retry;
import jakarta.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class ExampleClass {

    @Retry
    public int exampleMethod(String name) {
        return 1;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;learn-more&quot;&gt;Learn more&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can read more details about the changes in the new version in the &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-fault-tolerance-4.1-RC2/microprofile-fault-tolerance-spec-4.1-RC2.html&quot;&gt;Microprofile Fault Tolerance 4.1 RC2 specification&lt;/a&gt; and &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-fault-tolerance-4.1-RC2/apidocs/&quot;&gt;API Javadoc&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can learn more about how to use MicroProfile Fault Tolerance from our &lt;a href=&quot;https://openliberty.io/docs/latest/fault-tolerance.html&quot;&gt;documentation&lt;/a&gt; and &lt;a href=&quot;https://openliberty.io/guides/#fault_tolerance&quot;&gt;guides&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;openapi&quot;&gt;Document APIs in OpenAPI 3.1 format and more with MicroProfile OpenAPI 4.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.openapis.org/&quot;&gt;OpenAPI&lt;/a&gt; is a standardized way to document REST APIs in a JSON or YAML format. MicroProfile OpenAPI helps you generate and serve OpenAPI documentation for your REST applications that are built using JAX-RS or Jakarta RESTful Web Services. This documentation is useful for developers to test out the API during development, or for people using the API in production.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the new MicroProfile OpenAPI 4.0 feature (&lt;code&gt;mpOpenAPI-4.0&lt;/code&gt;), documentation is now produced in &lt;a href=&quot;https://spec.openapis.org/oas/v3.1.0.html&quot;&gt;OpenAPI 3.1 format&lt;/a&gt;, updated from 3.0 in previous versions. Changes in OpenAPI 3.1 include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use of full JSON Schema 2020-12 draft for data object schemas (updated from a subset of an older JSON schema draft in 3.0)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Support for documenting webhooks&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Reusable PathItems&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Updates to the model API so that it directly reflects the OpenAPI 3.1 format&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Additions to the annotations API to allow users to take advantage of the new features of OpenAPI 3.1&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A detailed list of changes can be found in the &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-open-api-4.0-RC4/microprofile-openapi-spec-4.0-RC4.html#release_notes_40&quot;&gt;release notes of the specification&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This is an early beta release to support the ratification of MicroProfile 7.0. As such, some function which was available in previous versions of the feature are not yet implemented:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Documenting more than one web module as &lt;a href=&quot;https://openliberty.io/docs/latest/documentation-openapi.html#multi-module&quot;&gt;can be configured in previous versions&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Validation of the produced OpenAPI document&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;learn-more-2&quot;&gt;Learn more&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, see the following resources:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-open-api-4.0-RC4/microprofile-openapi-spec-4.0-RC4.html&quot;&gt;MP OpenAPI 4.0 RC4 specification document&lt;/a&gt; and &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-open-api-4.0-RC4/apidocs/&quot;&gt;API Javadoc&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/docs/latest/documentation-openapi.html&quot;&gt;API documentation with OpenAPI&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Guide: &lt;a href=&quot;https://openliberty.io/guides/microprofile-openapi.html&quot;&gt;Documenting RESTful APIs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;rc&quot;&gt;Align your REST client with Jakarta RESTful Web Services with MicroProfile Rest Client 4.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Rest Client provides a type-safe approach to invoke RESTful services over HTTP. As much as possible, the MicroProfile Rest Client 4.0 release attempts to use &lt;a href=&quot;https://jakarta.ee/specifications/restful-ws/3.1/&quot;&gt;Jakarta RESTful Web Services 3.1&lt;/a&gt; APIs for consistency and easier re-use.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The MicroProfile Rest Client 4.0 feature (&lt;code&gt;mpRestClient-4.0&lt;/code&gt;) aligns with Jakarta RESTful Web Services 3.1 as part of the greater effort to align MicroProfile 7.0 with Jakarta EE10. The beta release of this feature includes the following updates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Added a new &lt;code&gt;RestClientBuilder.header(String, Object)&lt;/code&gt; method to add dynamic headers to the request.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Added a new &lt;code&gt;RestClientBuilder.baseUri(String)&lt;/code&gt; overload method so users don&amp;#8217;t have to call &lt;code&gt;URI.create(String)&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Added clarification in the spec on how to use Jakarta RESTful Web Services &lt;code&gt;EntityPart&lt;/code&gt; API for multipart requests.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;learn-more-3&quot;&gt;Learn more&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, see the following resources:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-rest-client&quot;&gt;Rest Client for MicroProfile&lt;/a&gt; on GitHub&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-rest-client-4.0-RC2/microprofile-rest-client-spec-4.0-RC2.html&quot;&gt;Rest Client for MicroProfile 4.0 RC2 specification document&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://download.eclipse.org/microprofile/microprofile-rest-client-4.0-RC2/apidocs/&quot;&gt;API Javadoc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;mptel&quot;&gt;Collect and export HTTP metrics and logs with MicroProfile Telemetry 2.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Telemetry 2.0 (&lt;code&gt;mpTelemetry-2.0&lt;/code&gt;) provides developers with the latest OpenTelemetry technology. The feature now consumes &lt;code&gt;OpenTelemetry-1.34.0&lt;/code&gt;. In addition to distributed tracing, the feature now allows OpenTelemetry to collect and export HTTP metrics and logs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the &lt;code&gt;mpTelemetry-2.0&lt;/code&gt; feature to collect metrics, logs, and traces, add the following configuration to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpTelemetry-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Additionally, you must add the following configuration to your &lt;code&gt;server.xml&lt;/code&gt; file to make third-party APIs visible for your application:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webApplication&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;location&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;application-name.war&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;contextRoot&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- enable visibility to third party apis --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;classloader&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;apiTypeVisibility&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;+third-party&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/webApplication&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;http-metrics&quot;&gt;HTTP Metrics&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the 24.0.0.7-beta release, we introduced &lt;a href=&quot;/blog/2024/07/02/24.0.0.7-beta.html#monitor10&quot;&gt;Enhanced HTTP Request Monitoring with Monitor 1.0&lt;/a&gt;. This update enables you to track HTTP requests made to the server and record the following data:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Request method&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Response status&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Duration&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HTTP route&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Other attributes that align with the &lt;a href=&quot;https://opentelemetry.io/docs/specs/semconv/general/metrics/&quot;&gt; OpenTelemetry HTTP metric semantic conventions. &lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This information is recorded into an &lt;code&gt;HttpStatsMXBean&lt;/code&gt;. If the MicroProfile Metrics 5.0 or later feature (&lt;code&gt;mpMetrics-5.x&lt;/code&gt;) is enabled, then the HTTP metrics are reported on the &lt;code&gt;/metrics&lt;/code&gt; REST endpoint.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this beta release, we can now register HTTP Metrics with the &lt;code&gt;mpTelemetry-2.0&lt;/code&gt; feature. This metric data can then be exported to a compatible OpenTelemetry metrics consumer. This enhancement is an auto-feature that activates with &lt;code&gt;mpTelemetry-2.0&lt;/code&gt;, &lt;code&gt;monitor-1.0&lt;/code&gt;, and any feature that uses the servlet engine that currently supports Jakarta EE 10 features, such as &lt;code&gt;servlet-6.0&lt;/code&gt;, &lt;code&gt;pages-3.1&lt;/code&gt;, and &lt;code&gt;restfulWS-3.1&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;logs&quot;&gt;Logs&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Logs generated by the &lt;code&gt;java.util.logging&lt;/code&gt; (JUL) package and message logs can now be collected by OpenTelemetry with the &lt;code&gt;mpTelemetry-2.0&lt;/code&gt; feature.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To collect and export runtime-level logs and metrics, enable OpenTelemetry by using the following system property or environment variable:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;System property: &lt;code&gt;otel.sdk.disabled=false&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Environment variable: &lt;code&gt;OTEL_SDK_DISABLED=false&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To separately configure for multiple applications on a server, you can configure OpenTelemetry at the application level. However, you cannot collect runtime-level logs and metrics with this configuration.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;By default, all OpenTelemetry data is exported to the &lt;a href=&quot;https://opentelemetry.io/docs/languages/java/exporters/#otlp&quot;&gt;OTLP&lt;/a&gt;. You can change each exporter with the following system properties and variables.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;System properties:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;otel.metrics.exporter&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;otel.logs.exporter&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;otel.traces.exporter&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Environment variables:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;OTEL_METRICS_EXPORTER&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;OTEL_LOGS_EXPORTER&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;OTEL_TRACES_EXPORTER&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;microprofile-telemetry-2-0-beta-known-issues&quot;&gt;MicroProfile Telemetry 2.0 beta known issues&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Tracing context is not transferred through threads in REST Client async requests. Therefore, context values are inconsistent with parent and child spans.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;data&quot;&gt;Bring your own Jakarta Data provider with Jakarta Data API 1.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data 1.0 is a new Jakarta EE specification that standardizes a repository-based programming model for data access across relational and non-relational databases.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Jakarta Data API feature (&lt;code&gt;dataContainer-1.0&lt;/code&gt;) enables you to use third-party Jakarta Data providers in Open Liberty without including the built-in provider for EclipseLink. This configuration is useful if you want to use a different Jakarta Persistence-based Jakarta Data provider, such as Hibernate, without colliding on the Jakarta Persistence Entity annotation. It&amp;#8217;s also useful if you want to use Jakarta NoSQL exclusively and do not want the overhead of the built-in provider for relational databases.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use a third-party Jakarta Data provider, enable the &lt;code&gt;dataContainer-1.0&lt;/code&gt; feature in your &lt;code&gt;server.xml&lt;/code&gt; file. You can then include a third-party Jakarta Data provider in your server configuration by using the &lt;code&gt;library&lt;/code&gt; element.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following &lt;code&gt;server.xml&lt;/code&gt; file example shows the configuration to use the Eclipse jNoSQL Jakarta Data provider and a MongoDB database:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;dataContainer-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Features needed for jNoSQL config / processing --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpConfig-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jsonb-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jnosql&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Jakarta NoSQL API --&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;fileset&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;dir&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${shared.resource.dir}/nosql&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;includes&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jakarta.nosql-api.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Eclipse jNoSQL Implementation of Jakarta NoSQL and Jakarta Data --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;fileset&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;dir&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${shared.resource.dir}/jnosql&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;attribute-name&quot;&gt;includes&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jnosql-communication-core.jar jnosql-mapping-core.jar jnosql-mongodb.jar *.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Mongo java driver --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;fileset&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;dir&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${shared.resource.dir}/mongodb&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;attribute-name&quot;&gt;includes&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mongodb-driver-core.jar mongodb-driver-sync.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- MongoDB connection configuration --&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;variable&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jnosql.mongodb.host&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${MONGO_HOST}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;variable&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jnosql.document.database&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${MONGO_DBNAME}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;tag&quot;&gt;&amp;lt;application&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;location&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;MyApplication.war&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;classloader&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;commonLibraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jnosql&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/application&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use a third-party Jakarta Persistence-based Jakarta Data provider, include the &lt;code&gt;dataContainer-1.0&lt;/code&gt; and &lt;code&gt;persistenceContainer-3.2&lt;/code&gt; features. You can then include the third-party Jakarta Data provider in your server configuration by using a &lt;code&gt;library&lt;/code&gt; element.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following &lt;code&gt;server.xml&lt;/code&gt; file example shows the configuration to use the Hibernate ORM Jakarta Data provider and a PostgreSQL database:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;dataContainer-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;persistenceContainer-3.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Features needed for Hibernate config / processing --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;xmlBinding-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Hibernate Implementation of Jakarta Persistence and Jakarta Data --&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;hibernate&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;fileset&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;dir&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${shared.resource.dir}/hibernate&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;includes&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;hibernate-core.jar hibernate-models.jar *.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- PostgreSQL JDBC driver --&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;postgresql&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;fileset&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;dir&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${shared.resource.dir}/postgresql&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;includes&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;*.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Datasource used to create a Persistence Unit --&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;dataSource&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;jndiName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jdbc/postgresql&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;jdbcDriver&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;libraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;postgresql&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties.postgresql&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;URL&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${POSTGRESQL_URL}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/dataSource&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;tag&quot;&gt;&amp;lt;application&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;location&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;MyApplication.war&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;classloader&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;commonLibraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;hibernate, postgresql&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/application&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Hibernate ORM uses a persistence unit to persist entities that are defined on a Jakarta Data &lt;code&gt;repository&lt;/code&gt; interface. To create a persistence unit, add a &lt;code&gt;META-INF/persistence.xml&lt;/code&gt; deployment descriptor file to your application, similar to the following example.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;persistence&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;xmlns&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;https://jakarta.ee/xml/ns/persistence&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
         &lt;span class=&quot;attribute-name&quot;&gt;xmlns:xsi&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
         &lt;span class=&quot;attribute-name&quot;&gt;xsi:schemaLocation&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_2.xsd&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
         &lt;span class=&quot;attribute-name&quot;&gt;version&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;3.2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;tag&quot;&gt;&amp;lt;persistence-unit&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;postgresql-pu&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;provider&amp;gt;&lt;/span&gt;org.hibernate.jpa.HibernatePersistenceProvider&lt;span class=&quot;tag&quot;&gt;&amp;lt;/provider&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;jta-data-source&amp;gt;&lt;/span&gt;jdbc/postgresql&lt;span class=&quot;tag&quot;&gt;&amp;lt;/jta-data-source&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jakarta.persistence.schema-generation.database.action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/persistence-unit&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/persistence&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;learn-more-4&quot;&gt;Learn more&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, see the following resources:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/data/1.0/jakarta-data-1.0&quot;&gt;Jakarta Data specification document&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/data/1.0/apidocs/jakarta.data/module-summary.html&quot;&gt;Jakarta Data Javadoc &lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/blog/2024/06/04/24.0.0.6-beta.html#data&quot;&gt;Open Liberty blog: Preview of Jakarta Data (Release Candidate 1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.jboss.org/hibernate/orm/7.0/repositories/html_single/Hibernate_Data_Repositories.html&quot;&gt;Hibernate support&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jakartaee/nosql&quot;&gt;Eclipse jNoSQL support&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;faces&quot;&gt;Bring your own Jakarta Faces implementation with Jakarta Faces Container 4.1&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Faces is a Model-View-Controller (MVC) framework for building web applications. It offers many convenient features, such as state management and input validation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Jakarta Faces Container 4.1 feature (&lt;code&gt;facesContainer-4.1&lt;/code&gt;) enables you to bring your own Jakarta Faces API and implementation to Liberty. The alternative is to use the Liberty-provided &lt;code&gt;faces-4.1&lt;/code&gt; feature, which provides the MyFaces 4.1 API and implementation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Faces Container feature is updated in this beta release to support the 4.1 API and implementation JARs. If the 4.1 JARs were used with earlier features, errors occurred because the feature checks against the specification version listed within the jars.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use the &lt;code&gt;facesContainer-4.1&lt;/code&gt; feature, add the following configuration to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;facesContainer-4.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;learn-more-5&quot;&gt;Learn more&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, see the following resources:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/docs/latest/reference/feature/facesContainer-4.0.html&quot;&gt;Jakarta Faces Container 4.0&lt;/a&gt; feature&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/blog/2024/07/02/24.0.0.7-beta.html#faces41&quot;&gt;Faces 4.1 beta blog announcement&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/faces/4.1/&quot;&gt;Faces 4.1 Javadocs and specification document&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;websocket&quot;&gt;Improve asynchronous handling with Jakarta WebSocket 2.2&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Jakarta WebSocket 2.2 (&lt;code&gt;websocket-2.2&lt;/code&gt;) feature enables communication for endpoints by using the WebSocket protocol. It is an implementation of the Jakarta EE 11 WebSocket 2.2 Specification.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Although very few specification changes were listed for the 2.2 release, the main change from 2.1 is the introduction of the &lt;a href=&quot;https://jakarta.ee/specifications/websocket/2.2/apidocs/server/jakarta/websocket/sendresult#getSession()&quot;&gt;getSession()&lt;/a&gt; method on the &lt;code&gt;SendResult&lt;/code&gt; class. This method enables you to retrieve the original session that was used in the asynchronous remote call. This capability is useful for broadcasting messages to numerous listening clients.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable this feature, add the following configuration to your &lt;code&gt;server.xml&lt;/code&gt; file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt; &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;websocket-2.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;learn-more-6&quot;&gt;Learn more&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, such as the Javadocs, specification documents, and other details, see the &lt;a href=&quot;https://jakarta.ee/specifications/websocket/2.2/&quot;&gt;Jakarta WebSocket 2.2 specification document&lt;/a&gt; and &lt;a href=&quot;/docs/latest/web-socket.html&quot;&gt;Send bidirectional messages between services with WebSocket&lt;/a&gt; in the Open Liberty docs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jpa&quot;&gt;Use Jakarta Persistence with improved type safety and other enhancements with Jakarta Persistence 3.2&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Jakarta Persistence feature (&lt;code&gt;persistence-3.2&lt;/code&gt;) provides an object-model approach to persist, fetch, and modify data that is stored on a relational database system.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Persistence 3.2  includes the following updates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Improve type safety of the &lt;code&gt;find()&lt;/code&gt; and &lt;code&gt;refresh()&lt;/code&gt; methods&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provide schema management programmatically&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Allow Java records as embeddable types&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add functions and operators to the JPQL/Criteria API,  such as &lt;code&gt;left&lt;/code&gt;, &lt;code&gt;right&lt;/code&gt;, &lt;code&gt;replace&lt;/code&gt;, &lt;code&gt;||&lt;/code&gt; operator, &lt;code&gt;cast&lt;/code&gt;, &lt;code&gt;union&lt;/code&gt;, &lt;code&gt;union all&lt;/code&gt;, &lt;code&gt;intersect&lt;/code&gt;, &lt;code&gt;intersect all&lt;/code&gt;, &lt;code&gt;except&lt;/code&gt;, and  &lt;code&gt;except all&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Support for subqueries in the &lt;code&gt;select&lt;/code&gt;, &lt;code&gt;from&lt;/code&gt;,  and &lt;code&gt;join&lt;/code&gt; clauses.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use the &lt;code&gt;persistence-3.2&lt;/code&gt; feature, add the following configuration to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;persistence-3.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This feature uses Eclipselink 5.0 beta release as the Jakarta Persistence provider. To bring your own 3rd party persistence provider, enable the &lt;code&gt;persistenceContainer-3.2&lt;/code&gt; feature instead:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;persistenceContainer-3.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;learn-more-7&quot;&gt;Learn more&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, see the &lt;a href=&quot;/docs/latest/data-persistence-jpa.html&quot;&gt;Data persistence with the Jakarta Persistence API&lt;/a&gt; in the Open Liberty docs and the &lt;a href=&quot;https://jakarta.ee/specifications/persistence/3.2/&quot;&gt;Jakarta Persistence 3.2 specification document&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Try it now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 22, Java SE 21, Java SE 17, Java SE 11, and Java SE 8. However, Java SE 17 or later is required for the Jakarta EE 11 features that are in the beta.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.10.3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;24.0.0.8-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try. For example, the following block adds dependencies for two example beta APIs:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.example.spec&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;exampleApi&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;7.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;example.platform&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;example.example-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;11.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.8.3'
    }
}
apply plugin: 'liberty'
dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[24.0.0.8-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;IntelliJ IDEA&lt;/a&gt;, &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Visual Studio Code&lt;/a&gt; or &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Eclipse IDE&lt;/a&gt;, you can also take advantage of our open source &lt;a href=&quot;https://openliberty.io/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty developer tools&lt;/a&gt; to enable effective development, testing, debugging and application management all from within your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;platform-ref&quot;&gt;Platforms and related versionless features reference list&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following platform features are available in this beta release. You can specify up to 2 platform elements, one for MicroProfile, another for either Jakarta EE or Java EE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;microprofile&quot;&gt;MicroProfile&lt;/h3&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;platforms&quot;&gt;Platforms&lt;/h4&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-1.2&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-1.3&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-1.4&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-2.0&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-2.1&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-2.2&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-3.0&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-3.2&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-3.3&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-4.0&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-4.1&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-5.0&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-6.0&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-6.1&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;microProfile-7.0&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;versionless-features&quot;&gt;Versionless features&lt;/h4&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mpConfig&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mpFaultTolerance&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mpHealth&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mpJwt&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mpMetrics&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mpOpenAPI&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mpOpenTracing&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mpRestClient&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mpTelemetry&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;jakarta-ee-and-java-ee&quot;&gt;Jakarta EE and Java EE&lt;/h3&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;platforms-2&quot;&gt;Platforms&lt;/h4&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;javaee-7.0&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;javaee-8.0&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;jakartaee-9.1&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;jakartaee-10.0&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;jakartaee-11.0&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;versionless-features-2&quot;&gt;Versionless features&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Although Liberty uses different feature names and short names for some Java EE and Jakarta EE versions of the same feature, you can use either short name and the platform you specify pulls in the correct compatible feature.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;appAuthentication&lt;/code&gt; or &lt;code&gt;jaspic&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;appAuthorization&lt;/code&gt; or &lt;code&gt;jacc&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;appClientSupport&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;appSecurity&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;batch&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;beanValidation&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;cdi&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;concurrent&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;connectors&lt;/code&gt; or &lt;code&gt;jca&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;connectorsInboundSecurity&lt;/code&gt; or &lt;code&gt;jcaInboundSecurity&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;data&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;enterpriseBeans&lt;/code&gt; or &lt;code&gt;ejb&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;enterpriseBeansHome&lt;/code&gt; or &lt;code&gt;ejbHome&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;enterpriseBeansLite&lt;/code&gt; or &lt;code&gt;ejbLite&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;enterpriseBeansPersistentTimer&lt;/code&gt; or &lt;code&gt;ejbPersistentTimer&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;enterpriseBeansRemote&lt;/code&gt; or &lt;code&gt;ejbRemote&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;expressionLanguage&lt;/code&gt; or &lt;code&gt;el&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;faces&lt;/code&gt; or &lt;code&gt;jsf&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;j2eeManagement&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;jdbc&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;jsonb&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;jsonp&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mail&lt;/code&gt; or &lt;code&gt;javaMail&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;managedBeans&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mdb&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;messaging&lt;/code&gt; or &lt;code&gt;jms&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;messagingClient&lt;/code&gt; or &lt;code&gt;wasJmsClient&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;messagingSecurity&lt;/code&gt; or &lt;code&gt;wasJmsSecurity&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;messagingServer&lt;/code&gt; or &lt;code&gt;wasJmsServer&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;pages&lt;/code&gt; or &lt;code&gt;jsp&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;persistence&lt;/code&gt; or &lt;code&gt;jpa&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;restfulWS&lt;/code&gt; or &lt;code&gt;jaxrs&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;restfulWSClient&lt;/code&gt; or &lt;code&gt;jaxrsClient&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;servlet&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;websocket&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;xmlBinding&lt;/code&gt; or &lt;code&gt;jaxb&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;xmlWS&lt;/code&gt; or &lt;code&gt;jaxws&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 30 Jul 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/07/30/24.0.0.8-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/07/30/24.0.0.8-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>security</category>
        
        <category>metrics</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        <category>monitoring</category>
        
        <category>data-sources</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Enhancements in Jakarta RESTful Web Services 4.0 and more in 24.0.0.7-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 24.0.0.7-beta release introduces enhancements to Jakarta RESTful Web Services 4.0, including new API methods and media type values. It also includes enhanced HTTP request tracking and the beta release of the Audit 2.0 feature, which creates REST Handler records only when a REST Handler application is configured.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 24.0.0.7-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#webservices&quot;&gt;Jakarta Restful Web Services 4.0 (EE11)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#monitor10&quot;&gt;Enhanced HTTP Request Monitoring with Monitor 1.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#faces41&quot;&gt;Jakarta EE11 Faces 4.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#audit20&quot;&gt;Use the Audit 2.0 feature to avoid generating unnecessary REST Handler records&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;webservices&quot;&gt;Jakarta Restful Web Services 4.0 (EE11)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta RESTful Web Services provides a foundational API to develop web services based on the REST architectural pattern. The Jakarta Restful Web Services 4.0 update introduces several enhancements to make web service development more efficient and effective.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new features, &lt;code&gt;restfulWS-4.0&lt;/code&gt; and &lt;code&gt;restfulWSClient-4.0&lt;/code&gt;, are primarily aimed at application developers. This release brings incremental improvements to Jakarta RESTful Web Services. It provides the following new convenience API methods:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;containsHeaderString()&lt;/code&gt; method is added to &lt;code&gt;ContainerRequestContext&lt;/code&gt;, &lt;code&gt;ContainerResponseContext&lt;/code&gt;, and &lt;code&gt;HttpHeaders&lt;/code&gt; to help determine whether a header contains a specified value.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;UriInfo.getMatchedResourceTemplate()&lt;/code&gt; method is a new addition that returns a full template for a request.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New &lt;code&gt;MediaType&lt;/code&gt; values to handle specific media types are introduced, including &lt;code&gt;APPLICATION_JSON_PATCH_JSON&lt;/code&gt; and &lt;code&gt;APPLICATION_MERGE_PATCH_JSON&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These updates streamline the process of developing RESTful services. To implement these new features, add the following code to your &lt;code&gt;server.xml&lt;/code&gt; file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For the RESTful web services feature:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;restfulWS-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For the RESTful web services client feature:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;restfulWSClient-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, see the Jakarta RESTful Web Services 4.0 &lt;a href=&quot;https://jakarta.ee/specifications/restful-ws/4.0/&quot;&gt;specification&lt;/a&gt; and the &lt;a href=&quot;https://jakarta.ee/specifications/restful-ws/4.0/apidocs/jakarta.ws.rs/module-summary&quot;&gt;Javadoc&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;monitor10&quot;&gt;Enhanced HTTP Request Monitoring with Monitor 1.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty introduces a significant update that enhances the tracking of HTTP connections that are made to the server. With the Monitor-1.0 feature (&lt;code&gt;monitor-1.0&lt;/code&gt;) and any Jakarta EE 10 feature that uses the servlet engine, Open Liberty can now record detailed information about HTTP requests into an &lt;code&gt;HttpStatsMXBean&lt;/code&gt;. This includes the request method, response status, duration, HTTP route, and other attributes that align with the Open Telemetry HTTP metric semantic convention.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If  the &lt;code&gt;mpMetrics-5.0&lt;/code&gt; or &lt;code&gt;mpMetrics-5.1&lt;/code&gt; feature is also active, Open Liberty creates corresponding HTTP metrics, such as &lt;code&gt;http.server.request.duration&lt;/code&gt;, using a &lt;code&gt;Timer&lt;/code&gt; type metric. To use these metrics effectively, configure histogram buckets explicitly for &lt;code&gt;Timer&lt;/code&gt; and &lt;code&gt;Histogram&lt;/code&gt; type metrics by using the MicroProfile Metrics feature. For more details, see the &lt;code&gt;mp.metrics.distribution.timer.buckets&lt;/code&gt; property on the &lt;a href=&quot;https://openliberty.io/docs/latest/microprofile-config-properties.html#metrics&quot;&gt;MicroProfile Config Properties page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This update ensures that operations teams responsible for monitoring can now have a detailed and comprehensive view of HTTP requests, enhancing the monitoring and management capabilities within Open Liberty environments.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, Open Liberty tracked servlet and JAX-RS/RESTful resource requests to the server as separate MBeans (servlet MBeans and REST MBeans). This data might then be forwarded to the mpMetrics feature to create corresponding metrics. Monitoring tools like Prometheus and Grafana could visualize this metric data to showcase server performance and responsiveness.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the new update, HTTP connections are now tracked more comprehensively, combining request details into a unified &lt;code&gt;HttpStatsMXBean&lt;/code&gt;. This approach simplifies monitoring and provides a more cohesive view of server performance, making it easier for operations teams to ensure optimal server responsiveness.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This enhancement is an auto-feature that activates with &lt;code&gt;monitor-1.0&lt;/code&gt; and any feature that uses the servlet engine currently supporting Jakarta EE 10 features like &lt;code&gt;servlet-6.0&lt;/code&gt;, &lt;code&gt;pages-3.1&lt;/code&gt;, and &lt;code&gt;restfulWS-3.1&lt;/code&gt;. It also supports registering HTTP metrics with &lt;code&gt;mpMetrics-5.x&lt;/code&gt; features. To enable this function, add the following to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;monitor-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-6.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpMetrics-5.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For detailed configuration, see the &lt;a href=&quot;https://openliberty.io/docs/latest/microprofile-config-properties.html#metrics&quot;&gt;MicroProfile Config Properties page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about the HTTP semantic convention used, see the &lt;a href=&quot;https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration&quot;&gt;Open Telemetry HTTP semantic convention&lt;/a&gt; page.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;faces41&quot;&gt;Jakarta EE11 Faces 4.1&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Faces is a Model-View-Controller (MVC) framework for building web applications, offering many convenient features, such as state management and input validation. The Jakarta Faces 4.1 (&lt;code&gt;faces-4.1&lt;/code&gt;) update introduces a range of incremental improvements to enhance the developer experience. These enhancements include increased use of generics in &lt;code&gt;FacesMessages&lt;/code&gt; and other locations, as well as improved CDI integration by requiring events for &lt;code&gt;@Initialized&lt;/code&gt;, &lt;code&gt;@BeforeDestroyed&lt;/code&gt;, and &lt;code&gt;@Destroyed&lt;/code&gt; for built-in scopes like &lt;code&gt;FlowScoped&lt;/code&gt; and &lt;code&gt;ViewScoped&lt;/code&gt;. The current &lt;code&gt;Flow&lt;/code&gt; can also now be injected into a backing bean. Finally, a new &lt;code&gt;UUIDConverter&lt;/code&gt; is added to the API, which simplifies the handling of UUIDs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This update also includes some deprecations and removals. The &lt;code&gt;composite:extension&lt;/code&gt; tag and references to the Security Manager are removed, and the full state saving mechanism is deprecated. To enable the Jakarta Faces 4.1 feature in your application, add the following to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;faces-4.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, see the Jakarta Faces 4.1 &lt;a href=&quot;https://jakarta.ee/specifications/faces/4.1/&quot;&gt;specification&lt;/a&gt; and the &lt;a href=&quot;https://jakarta.ee/specifications/faces/4.1/apidocs/jakarta.faces/module-summary.html&quot;&gt;Javadoc&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;audit20&quot;&gt;Use the Audit 2.0 feature to avoid generating unnecessary REST Handler records&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Audit 2.0 feature (&lt;code&gt;audit-2.0&lt;/code&gt;) is now in beta release. The feature is designed for users that are not using REST Handler applications.
It provides the same audit records as the Audit 1.0 feature (&lt;code&gt;audit-1.0&lt;/code&gt;) but it does not generate records for REST Handler applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Customers that need to keep audit records for REST Handler applications must continue to use the Audit 1.0 feature.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the Audit 2.0 feature in your application, add the following to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;audit-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 21, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.10.3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;24.0.0.7-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try. For example, the following block adds dependencies for two example beta APIs:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.example.spec&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;exampleApi&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;7.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;example.platform&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;example.example-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;11.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.8.3'
    }
}
apply plugin: 'liberty'
dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[24.0.0.7-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;IntelliJ IDEA&lt;/a&gt;, &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Visual Studio Code&lt;/a&gt; or &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Eclipse IDE&lt;/a&gt;, you can also take advantage of our open source &lt;a href=&quot;https://openliberty.io/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty developer tools&lt;/a&gt; to enable effective development, testing, debugging and application management all from within your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 02 Jul 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/07/02/24.0.0.7-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/07/02/24.0.0.7-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>metrics</category>
        
        <category>jakarta-ee</category>
        
        <category>monitoring</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta EE11 previews and more in 24.0.0.6-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 24.0.0.6-beta release includes previews of the Jakarta Validation and Jakarta Data implementations, both of which are part of Jakarta EE 11. The release also includes enhancements for histogram and timer metrics in MicroProfile 3.0 and 4.0 and InstantOn support for distributed HTTP session caching.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 24.0.0.6-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#validate&quot;&gt;Validate Java constraints and records with Jakarta Validation 3.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#data&quot;&gt;Preview of Jakarta Data (Release Candidate 1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mpm&quot;&gt;Enhanced histogram and timer metrics in MicroProfile 3.0 and 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jcache&quot;&gt;InstantOn support for distributed HTTP session caching&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;validate&quot;&gt;Validate Java constraints and records with Jakarta Validation 3.1&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Validation provides a mechanism to validate constraints that are imposed on Java objects by using annotations. The most noticeable change in version 3.1 is the name change, from Jakarta Bean Validation to  Jakarta Validation. This version also includes explicit support for validating Java record classes, which were added in Java 16. Records reduce much of the boilerplate code in simple data classes, and pair nicely with Jakarta Validation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following examples demonstrate the simplicity of defining a Java record with Jakarta Validation annotations, as well as performing validation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this example, an &lt;code&gt;Employee&lt;/code&gt; record is defined with two fields, &lt;code&gt;empid&lt;/code&gt; and &lt;code&gt;email&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; record Employee(&lt;span class=&quot;annotation&quot;&gt;@NotEmpty&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; empid, &lt;span class=&quot;annotation&quot;&gt;@Email&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; email) {}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;@NotEmpty&lt;/code&gt; annotation specifies that &lt;code&gt;empid&lt;/code&gt; cannot be an empty string, while the &lt;code&gt;@Email&lt;/code&gt; annotation specifies that the value for &lt;code&gt;email&lt;/code&gt; must be a properly formatted email address.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this example, a validator is created to check the specified &lt;code&gt;Employee&lt;/code&gt; values against the constraints that were set in the previous example.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;Employee employee = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; Employee(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;12432&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mark@example.com&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
&lt;span class=&quot;predefined-type&quot;&gt;Set&lt;/span&gt;&amp;lt;ConstraintViolation&amp;lt;Employee&amp;gt;&amp;gt; violations = validator.validate(employee);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;data&quot;&gt;Preview of Jakarta Data (Release Candidate 1)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data is a new Jakarta EE specification being developed in the open that aims to standardize the popular Data Repository pattern across various providers. Open Liberty 24.0.0.6-beta includes the Jakarta Data 1.0 release candidate 1, which decouples sorting from pagination, improves the static metamodel, and completes the initial definition of Jakarta Data Query Language (JDQL).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty beta includes a test implementation of Jakarta Data that we are using to experiment with proposed specification features. You can try out these features and provide feedback to influence the Jakarta Data 1.0 specification as it continues to be developed. The test implementation currently works with relational databases and operates by redirecting repository operations to the built-in Jakarta Persistence provider.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data 1.0 Release Candidate 1 completes the definition of Jakarta Data Query Language (JDQL) as a subset of Jakarta Persistence Query Language (JPQL). JDQL allows basic comparison and update operations on a single type of entity (an entity identifier variable is not used), as well as the ability to perform deletion and count operations. Find operations in JDQL consist of SELECT, FROM, WHERE, and ORDER BY clauses, all of which are optional.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data 1.0 Release Candidate 1 decouples sorting from pagination, allowing you to request pages of results without needing to duplicate the specification of the entity type that is queried.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The static metamodel, which allows for more type-safe usage, is streamlined in Release Candidate 1 to allow the use of interface classes with constant fields to define the metamodel.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use these capabilities, you need an Entity and a Repository.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Start by defining an entity class that corresponds to your data. With relational databases, the entity class corresponds to a database table and the entity properties (public methods and fields of the entity class) generally correspond to the columns of the table. An entity class can be:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Annotated with &lt;code&gt;jakarta.persistence.Entity&lt;/code&gt; and related annotations from Jakarta Persistence&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A Java class without entity annotations, in which case the primary key is inferred from an entity property that is named &lt;code&gt;id&lt;/code&gt; or ends with &lt;code&gt;Id&lt;/code&gt; and an entity property that is named &lt;code&gt;version&lt;/code&gt; designates an automatically incremented version column.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You define one or more repository interfaces for an entity, annotate those interfaces as &lt;code&gt;@Repository&lt;/code&gt;, and inject them into components by using &lt;code&gt;@Inject&lt;/code&gt;. The Jakarta Data provider supplies the implementation of the repository interface for you.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows a simple entity:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Product&lt;/span&gt; {
    &lt;span class=&quot;annotation&quot;&gt;@Id&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; id;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; isDiscounted;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; price;

    &lt;span class=&quot;annotation&quot;&gt;@Version&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; version;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Here is a repository that defines operations relating to the entity. Your repository interface can inherit from built-in interfaces, such as &lt;code&gt;BasicRepository&lt;/code&gt; and &lt;code&gt;CrudRepository&lt;/code&gt;, to gain various general-purpose repository methods for inserting, updating, deleting, and querying for entities. You can add methods to further customize it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;(dataStore = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/jdbc/my-example-data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Products&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; BasicRepository&amp;lt;Product, &lt;span class=&quot;predefined-type&quot;&gt;Long&lt;/span&gt;&amp;gt; {
    &lt;span class=&quot;annotation&quot;&gt;@Insert&lt;/span&gt;
    Product add(Product newProduct);

    &lt;span class=&quot;comment&quot;&gt;// query-by-method name pattern:&lt;/span&gt;
    &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; findByNameIgnoreCaseContains(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; searchFor, Order&amp;lt;Product&amp;gt; orderBy);

    &lt;span class=&quot;comment&quot;&gt;// parameter based query that does not require -parameters because it explicitly specifies the name&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Find&lt;/span&gt;
    Page&amp;lt;Product&amp;gt; find(&lt;span class=&quot;annotation&quot;&gt;@By&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;isDiscounted&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; onSale,
                       PageRequest pageRequest,
                       Order &amp;lt;Product&amp;gt; orderBy);

    &lt;span class=&quot;comment&quot;&gt;// find query in JDQL that requires compilation with -parameters to preserve parameter names&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SELECT price FROM Product WHERE id=:productId&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    Optional&amp;lt;&lt;span class=&quot;predefined-type&quot;&gt;Float&lt;/span&gt;&amp;gt; getPrice(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId);

    &lt;span class=&quot;comment&quot;&gt;// update query in JDQL:&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;UPDATE Product SET price = price - (?2 * price), isDiscounted = true WHERE id = ?1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; discount(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; discountRate);

    &lt;span class=&quot;comment&quot;&gt;// delete query in JDQL:&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DELETE FROM Product WHERE name = ?1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; discontinue(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Observe that the repository interface includes type parameters in &lt;code&gt;PageRequest&amp;lt;Product&amp;gt;&lt;/code&gt; and &lt;code&gt;Order&amp;lt;Product&amp;gt;&lt;/code&gt;. These parameters help ensure that the page request and sort criteria are for a &lt;code&gt;Product&lt;/code&gt; entity rather than some other entity. To accomplish this, you can optionally define a static metamodel class for the entity (or various IDEs might generate one for you after the 1.0 specification is released). Here is one that can be used with the &lt;code&gt;Product&lt;/code&gt; entity:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@StaticMetamodel&lt;/span&gt;(Product.class)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;_Product&lt;/span&gt; {
    &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; ID = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;
    &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; IS_DISCOUNTED = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;isDiscounted&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;
    &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; NAME = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;
    &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; PRICE = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;
    &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; VERSION = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;

    SortableAttribute&amp;lt;Product&amp;gt; id = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; SortableAttributeRecord(ID);
    SortableAttribute&amp;lt;Product&amp;gt; isDiscounted = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; SortableAttributeRecord(IS_DISCOUNTED);
    &lt;span class=&quot;predefined-type&quot;&gt;TextAttribute&lt;/span&gt;&amp;lt;Product&amp;gt; name = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; TextAttributeRecord(NAME);
    SortableAttribute&amp;lt;Product&amp;gt; price = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; SortableAttributeRecord(PRICE);
    SortableAttribute&amp;lt;Product&amp;gt; version = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; SortableAttributeRecord(VERSION);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows the repository and static metamodel being used:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@DataSourceDefinition&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/jdbc/my-example-data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      className = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;org.postgresql.xa.PGXADataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      databaseName = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ExampleDB&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      serverName = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      portNumber = &lt;span class=&quot;integer&quot;&gt;5432&lt;/span&gt;,
                      user = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${example.database.user}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      password = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${example.database.password}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;MyServlet&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; HttpServlet {
    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    Products products;

    &lt;span class=&quot;directive&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doGet(HttpServletRequest req, HttpServletResponse resp)
            &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt; {
        &lt;span class=&quot;comment&quot;&gt;// Insert:&lt;/span&gt;
        Product prod = ...
        prod = products.add(prod);

        &lt;span class=&quot;comment&quot;&gt;// Find the price of one product:&lt;/span&gt;
        price = products.getPrice(productId).orElseThrow();

        &lt;span class=&quot;comment&quot;&gt;// Find all, sorted:&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; all = products.findByNameIgnoreCaseContains(searchFor, Order.by(
                                     _Product.price.desc(),
                                     _Product.name.asc(),
                                     _Product.id.asc()));

        &lt;span class=&quot;comment&quot;&gt;// Find the first 20 most expensive products on sale:&lt;/span&gt;
        Page&amp;lt;Product&amp;gt; page1 = products.find(onSale, PageRequest.ofSize(&lt;span class=&quot;integer&quot;&gt;20&lt;/span&gt;), Order.by(
                                       _Product.price.desc(),
                                       _Product.name.asc(),
                                       _Product.id.asc()));
        ...
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;mpm&quot;&gt;Enhanced histogram and timer metrics in MicroProfile 3.0 and 4.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This release introduces MicroProfile Config properties for MicroProfile 3.0 and 4.0 that are used for configuring the statistics that are tracked and outputted by the histogram and timer metrics. These changes are already available in MicroProfile Metrics 5.1.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In previous MicroProfile Metrics 3.0 and 4.0 releases, histogram and timer metrics tracked only the following values:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Min/max recorded values&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The sum of all values&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The count of the recorded values&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A static set of percentiles for the 50th, 75th, 95th, 98th, 99th and 99.9th percentile.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These values are output to the &lt;code&gt;/metrics&lt;/code&gt; endpoint in Prometheus format.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new properties can define a custom set of percentiles as well as custom set of histogram buckets for the histogram and timer metrics. Other new configuration properties can enable a default set of histogram buckets, including properties that define an upper and lower bound for the bucket set.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With these properties, you can define a semicolon-separated list of value definitions that use the following syntax:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;&amp;lt;metric name&amp;gt;=&amp;lt;value-1&amp;gt;[,&amp;lt;value-2&amp;gt;…&amp;lt;value-n&amp;gt;]&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Some properties can accept multiple values for a given metric name, while others can accept only a single value.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can use an asterisk ( *) as a wildcard at the end of the metric name.&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 50%;&quot;&gt;
&lt;col style=&quot;width: 50%;&quot;&gt;
&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Property&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Description&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.percentiles&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Defines a custom set of percentiles for matching Histogram and Timer metrics to track and output. Accepts a set of integer and decimal values for a metric name pairing. Can be used to disable percentile output if no value is provided with a metric name pairing.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.histogram.buckets&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Defines a custom set of (cumulative) histogram buckets for matching Histogram metrics to track and output.  Accepts a set of integer and decimal values for a metric name pairing.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.timer.buckets&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Defines a custom set of (cumulative) histogram buckets for matching Timer metrics to track and output.  Accepts a set of decimal values with a time unit appended (that is, ms, s, m, h) for a metric name pairing.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.percentiles-histogram.enabled&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Configures any matching Histogram or Timer metric to provide a large set of default histogram buckets to allow for percentile configuration with a monitoring tool. Accepts a true/false value for a metric name pairing.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.histogram.max-value&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;When percentile-histogram is enabled for a Timer, this property defines an upper bound for the buckets reported. Accepts a single integer or decimal value for a metric name pairing.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.histogram.min-value&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;When percentile-histogram is enabled for a Timer, this property defines a lower bound for the buckets reported. Accepts a single integer or decimal value for a metric name pairing.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.timer.max-value&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;When percentile-histogram is enabled for a Histogram, this property defines an upper bound for the buckets reported. Accepts a single decimal value with a time unit appended (that is, ms, s, m, h) for a metric name pairing. Accepts a single decimal value with a time unit appended (that is, ms, s, m, h) for a metric name pairing.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.timer.min-value&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;When percentile-histogram is enabled for a Histogram, this property defines a lower bound for the buckets reported. Accepts a single decimal value with a time unit appended (that is, ms, s, m, h) for a metric name pairing.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can define the &lt;code&gt;mp.metrics.distribution.percentiles&lt;/code&gt; property similar to the following example.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;mp.metrics.distribution.percentiles=alpha.timer=0.5,0.7,0.75,0.8;alpha.histogram=0.8,0.85,0.9,0.99;delta.*=&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This property creates the &lt;code&gt;alpha.timer&lt;/code&gt; timer metric to track and output the 50th, 70th, 75th, and 80th percentile values. The &lt;code&gt;alpha.histogram&lt;/code&gt; histogram metric outputs the 80th, 85th, 90th, and 99th percentile values. Percentiles for any histogram or timer metric that matches with &lt;code&gt;delta.*&lt;/code&gt; are disabled.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We&amp;#8217;ll expand on this example and define histogram buckets for the &lt;code&gt;alpha.timer&lt;/code&gt; timer metric by using the &lt;code&gt;mp.metrics.distribution.timer.buckets&lt;/code&gt; property.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;mp.metrics.distribution.timer.buckets=alpha.timer=100ms,200ms,1s&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This configuration tells the metrics runtime to track and output the count of durations that fall within 0-100ms, 0-200ms and 0-1 seconds. This output is due to the histogram buckets working in a &lt;em&gt;cumulative&lt;/em&gt; fashion.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The corresponding prometheus output for the &lt;code&gt;alpha.timer&lt;/code&gt; metric at the &lt;code&gt;/metrics&lt;/code&gt; REST endpoint is similar to the following example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;# TYPE application_alpha_timer_mean_seconds gauge
application_alpha_timer_mean_seconds 2.9700022497975187
# TYPE application_alpha_timer_max_seconds gauge
application_alpha_timer_max_seconds 5.0
# TYPE application_alpha_timer_min_seconds gauge
application_alpha_timer_min_seconds 1.0
# TYPE application_alpha_timer_stddev_seconds gauge
application_alpha_timer_stddev_seconds 1.9997750210918204
# TYPE alpha_timer_seconds histogram &lt;i class=&quot;conum&quot; data-value=&quot;1&quot;&gt;&lt;/i&gt;&lt;b&gt;(1)&lt;/b&gt;
application_alpha_timer_seconds_bucket{le=&quot;0.1&quot;} 0.0 &lt;i class=&quot;conum&quot; data-value=&quot;2&quot;&gt;&lt;/i&gt;&lt;b&gt;(2)&lt;/b&gt;
application_alpha_timer_seconds_bucket{le=&quot;0.2&quot;} 0.0 &lt;i class=&quot;conum&quot; data-value=&quot;2&quot;&gt;&lt;/i&gt;&lt;b&gt;(2)&lt;/b&gt;
application_alpha_timer_seconds_bucket{le=&quot;1.0&quot;} 1.0 &lt;i class=&quot;conum&quot; data-value=&quot;2&quot;&gt;&lt;/i&gt;&lt;b&gt;(2)&lt;/b&gt;
application_alpha_timer_seconds_bucket{le=&quot;+Inf&quot;} 2.0 &lt;i class=&quot;conum&quot; data-value=&quot;2&quot;&gt;&lt;/i&gt;&lt;b&gt;(2)&lt;/b&gt; &lt;i class=&quot;conum&quot; data-value=&quot;3&quot;&gt;&lt;/i&gt;&lt;b&gt;(3)&lt;/b&gt;
application_alpha_timer_seconds_count 2
application_alpha_timer_seconds_sum 6.0
application_alpha_timer_seconds{quantile=&quot;0.5&quot;} 1.0
application_alpha_timer_seconds{quantile=&quot;0.7&quot;} 5.0
application_alpha_timer_seconds{quantile=&quot;0.75&quot;} 5.0
application_alpha_timer_seconds{quantile=&quot;0.8&quot;} 5.0&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;colist arabic&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;conum&quot; data-value=&quot;1&quot;&gt;&lt;/i&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;The Prometheus metric type is &lt;code&gt;histogram&lt;/code&gt;. Both the quantiles/percentile and buckets are represented under this type.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;conum&quot; data-value=&quot;2&quot;&gt;&lt;/i&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;The &lt;code&gt;le&lt;/code&gt; tag represents &lt;em&gt;less than&lt;/em&gt; and is for the defined buckets, which are converted to seconds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;conum&quot; data-value=&quot;3&quot;&gt;&lt;/i&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Prometheus requires that a &lt;code&gt;+Inf&lt;/code&gt; bucket counts all hits.&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jcache&quot;&gt;InstantOn support for distributed HTTP session caching&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty &lt;a href=&quot;https://openliberty.io/docs/latest/instanton.html&quot;&gt;InstantOn&lt;/a&gt; provides fast startup times for MicroProfile and Jakarta EE applications. With InstantOn, your applications can start in milliseconds, without compromising on throughput, memory, development-production parity, or Java language features. InstantOn uses the Checkpoint/Restore In Userspace (&lt;a href=&quot;https://criu.org/&quot;&gt;CRIU&lt;/a&gt;) feature of the Linux kernel to take a checkpoint of the JVM that can be restored later.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 24.0.0.6-beta release provides InstantOn support for the &lt;a href=&quot;/docs/latest/reference/feature/sessionCache-1.0.html&quot;&gt;JCache Session Persistence&lt;/a&gt; feature. This feature uses a JCache provider to create a distributed in-memory cache. Distributed session caching is achieved when the server is connected to at least one other server to form a cluster. Open Liberty servers can behave in the following ways in a cluster.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Client-server model: An Open Liberty server can act as the JCache client and connect to a dedicated JCache server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Peer-to-Peer model: An Open Liberty server can connect with other Open Liberty servers that are also running with the JCache Session Persistence feature and configured to be part of the same cluster.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable JCache Session Persistence, the &lt;code&gt;sessionCache-1.0&lt;/code&gt; feature must be enabled in your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;sessionCache-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can configure the client/server model in the &lt;code&gt;server.xml&lt;/code&gt; file, similar to the following example.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;InfinispanLib&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;fileset&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;dir&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${shared.resource.dir}/infinispan&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;includes&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;*.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;httpSessionCache&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;cacheManagerRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CacheManager&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;cacheManager&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CacheManager&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;infinispan.client.hotrod.server_list&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;infinispan-server:11222&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;infinispan.client.hotrod.auth_username&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sampleUser&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;infinispan.client.hotrod.auth_password&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;samplePassword&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;infinispan.client.hotrod.auth_realm&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;infinispan.client.hotrod.sasl_mechanism&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;PLAIN&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;infinispan.client.hotrod.java_serial_whitelist&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;.*&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;infinispan.client.hotrod.marshaller&lt;/span&gt;=
            &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;org.infinispan.commons.marshall.JavaSerializationMarshaller&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;cachingProvider&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;jCacheLibraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;InfinispanLib&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/cacheManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can configure the peer-to-peer model in the &lt;code&gt;server.xml&lt;/code&gt; file, similar to the following example.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;JCacheLib&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;file&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${shared.resource.dir}/hazelcast/hazelcast.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;httpSessionCache&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;cacheManagerRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CacheManager&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;cacheManager&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CacheManager&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;cachingProvider&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;jCacheLibraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;JCacheLib&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/cacheManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;
To provide InstantOn support for the peer-to-peer model by using Infinispan as a JCache Provider, you must use Infinispan 12 or later. You must also enable &lt;a href=&quot;{url-prefiux}/docs/latest/reference/feature/mpReactiveStreams-3.0.html&quot;&gt;MicroProfile Reactive Streams 3.0&lt;/a&gt; or later and &lt;a href=&quot;docs/latest/reference/feature/mpMetrics-4.0.html&quot;&gt;MicroProfile Metrics 4.0&lt;/a&gt; or later in the &lt;code&gt;server.xml&lt;/code&gt; file, in addition to the JCache Session Persistence feature.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The environment can provide vendor-specific JCache configuration properties when the server is restored from the checkpoint. The following configuration uses server list, username, and password values as variables defined in the restore environment.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;httpSessionCache&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;libraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;InfinispanLib&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;infinispan.client.hotrod.server_list&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${INF_SERVERLIST}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;infinispan.client.hotrod.auth_username&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${INF_USERNAME}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;infinispan.client.hotrod.auth_password&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${INF_PASSWORD}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;infinispan.client.hotrod.auth_realm&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;infinispan.client.hotrod.sasl_mechanism&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;PLAIN&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/httpSessionCache&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 22, Java SE 21, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package by using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.10.3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;24.0.0.6-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try. For example, the following block adds dependencies for two example beta APIs:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.example.spec&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;exampleApi&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;7.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;example.platform&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;example.example-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;11.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.8.3'
    }
}
apply plugin: 'liberty'
dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[24.0.0.6-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;IntelliJ IDEA&lt;/a&gt;, &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Visual Studio Code&lt;/a&gt; or &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Eclipse IDE&lt;/a&gt;, you can also take advantage of our open source &lt;a href=&quot;https://openliberty.io/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty developer tools&lt;/a&gt; to enable effective development, testing, debugging, and application management all from within your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 04 Jun 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/06/04/24.0.0.6-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/06/04/24.0.0.6-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>metrics</category>
        
        <category>jakarta-ee</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta NoSQL in Action: Switching NoSQL Databases with Ease</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the cloud era, switching between NoSQL solutions could be an interesting way to save resources and costs. It could also be a nightmare, especially if we&amp;#8217;re highly coupled to a particular vendor. Certain changes could make this approach very expensive, e.g.: time spent on the change, the learning curve of a new API to use with this database, the code that will be lost, the persistence layer that needs to be replaced, etc.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This is where the flexibility of Jakarta NoSQL, with an implementation like &lt;a href=&quot;https://www.jnosql.org&quot;&gt;Eclipse JNoSQL&lt;/a&gt;, shines.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonitionblock note&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;icon&quot;&gt;
&lt;i class=&quot;fa icon-note&quot; title=&quot;Note&quot;&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class=&quot;content&quot;&gt;
As of March 2024, Eclipse JNoSQL supports about &lt;a href=&quot;https://www.jnosql.org/docs/supported_dbs.html&quot;&gt;30 NoSQL databases&lt;/a&gt;.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To explore this capability, let&amp;#8217;s use the &lt;a href=&quot;/blog/2024/05/13/jakarta-nosql-in-action-meet-jnopo-game.html&quot;&gt;&lt;strong&gt;JNopo&lt;/strong&gt; game&lt;/a&gt; introduced in blog 2 of this series.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In our scenario, let&amp;#8217;s suppose that we need to change the JNopo&amp;#8217;s Document NoSQL database from MongoDB, to another Document NoSQL database (Couchbase) to save money. The good thing is that because we&amp;#8217;ve already used the Jakarta NoSQL specification to connect to our NoSQL solutions in this application, with just a few small changes we&amp;#8217;ll be able to achieve this goal easily. Let&amp;#8217;s take a look at the steps we need to take for this.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;toc&quot; class=&quot;toc&quot;&gt;
&lt;div id=&quot;toctitle&quot;&gt;Table of Contents&lt;/div&gt;
&lt;ul class=&quot;sectlevel1&quot;&gt;
&lt;li&gt;&lt;a href=&quot;#configuring-eclipse-jnosql-dependencies-for-couchbase&quot;&gt;Configuring Eclipse JNoSQL dependencies for Couchbase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#configuring-a-local-couchbase-cluster&quot;&gt;Configuring a local Couchbase cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#key-takeaways&quot;&gt;Key takeaways&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#next-steps-continuing-the-journey&quot;&gt;Next steps: continuing the journey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#special-thanks&quot;&gt;Special thanks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#references-and-further-reading&quot;&gt;References and Further Reading&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;configuring-eclipse-jnosql-dependencies-for-couchbase&quot;&gt;Configuring Eclipse JNoSQL dependencies for Couchbase&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The first step we need to take is to add the Couchbase dependency to our the &lt;code&gt;pom.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jnosql.databases&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jnosql-couchbase&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;configuring-a-local-couchbase-cluster&quot;&gt;Configuring a local Couchbase cluster&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To successfully configure our new Couchbase cluster, we&amp;#8217;ll first need to add the following content to the &lt;code&gt;docker-compose.yml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;  &lt;span class=&quot;key&quot;&gt;couchbase-db&lt;/span&gt;:
    &lt;span class=&quot;key&quot;&gt;image&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;couchbase&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;key&quot;&gt;container_name&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;couchbase-db&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;key&quot;&gt;ports&lt;/span&gt;:
      - &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;8091-8097:8091-8097&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
      - &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9123:9123&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
      - &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;11207:11207&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
      - &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;11210:11210&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
      - &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;11280:11280&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
      - &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;18091-18097:18091-18097&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After we apply these changes, we then need to initialize the container by executing the following command:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;docker-compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now, let&amp;#8217;s configure the Couchbase cluster for this example scenario:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;With the Couchbase container started, go to: &lt;a href=&quot;http://localhost:8091/ui/index.html&quot; class=&quot;bare&quot;&gt;http://localhost:8091/ui/index.html&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the &lt;strong&gt;Setup New Cluster&lt;/strong&gt; option.&lt;/p&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/couchbase-01.png&quot; alt=&quot;Couchbase 01&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Define a name for the cluster.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set &lt;code&gt;root&lt;/code&gt; as the Admin Username.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set &lt;code&gt;123456&lt;/code&gt; as the Password.&lt;/p&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/couchbase-02.png&quot; alt=&quot;Couchbase 02&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check &lt;strong&gt;I accept the terms and conditions&lt;/strong&gt; and click the &lt;strong&gt;Finish With Defaults&lt;/strong&gt; button.&lt;/p&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/couchbase-03.png&quot; alt=&quot;Couchbase 03&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go to the &lt;strong&gt;Buckets&lt;/strong&gt; section.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a &lt;code&gt;jnopo&lt;/code&gt; Bucket by clicking on the &lt;strong&gt;Add Bucket&lt;/strong&gt; option&lt;/p&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/couchbase-04.png&quot; alt=&quot;Couchbase 04&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Scopes &amp;amp; Collections&lt;/strong&gt; and then click &lt;strong&gt;Add Collection&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enter &lt;code&gt;GameMatch&lt;/code&gt; as the collection name and click the &lt;strong&gt;Save&lt;/strong&gt; button to complete your creation.&lt;/p&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/couchbase-05.png&quot; alt=&quot;Couchbase 05&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now, in the &lt;strong&gt;Query Editor&lt;/strong&gt; section, run the command &lt;a href=&quot;https://www.couchbase.com/products/n1ql/&quot;&gt;N1QL&lt;/a&gt; command to create the primary index for the &lt;code&gt;GameMatch&lt;/code&gt; collection:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;n1ql&quot;&gt;CREATE PRIMARY INDEX primaryGameMatch ON jnopo._default.GameMatch&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/couchbase-06.png&quot; alt=&quot;Couchbase 06&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With a Couchbase cluster running, we just need to set up Eclipse JNoSQL to connect to it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Apply the following changes into the &lt;code&gt;resources/META-INF/microprofile-config.properties&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;properties&quot;&gt;## Couchbase
jnosql.couchbase.host=couchbase://localhost
jnosql.couchbase.user=root
jnosql.couchbase.password=123456
jnosql.document.provider=org.eclipse.jnosql.databases.couchbase.communication.CouchbaseDocumentConfiguration&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;jnosql.document.provider&lt;/code&gt; property is required in this context because we have more than one Eclipse JNoSQL Database API for Document NoSQL implementations. You can learn more about the configurations available for Eclipse JNoSQL Database API for Couchbase in this &lt;a href=&quot;https://github.com/eclipse/jnosql-databases/tree/main?tab=readme-ov-file#configuration-2&quot;&gt;Git repository&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;That&amp;#8217;s all! Let&amp;#8217;s restart the &lt;a href=&quot;https://openliberty.io/&quot;&gt;Open Liberty&lt;/a&gt; runtime to make sure that everything is running smoothly:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;On Linux/Mac machines, run the following command:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;./mvnw liberty:dev&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On Windows machines, run the following command:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;mvnw.cmd liberty:dev&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After some game matches, you should see something similar to the following images to prove that this data is now being stored in our new Couchbase database.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/couchbase-verification-01.png&quot; alt=&quot;Couchbase Verification 01&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/couchbase-verification-02.png&quot; alt=&quot;Couchbase Verification 02&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re interesting to take a look on the finished project code developed during this challenge, clone this &lt;a href=&quot;https://github.com/OpenLiberty/sample-jakartaNoSQL-game&quot;&gt;Git repository&lt;/a&gt; and navigate to the &lt;code&gt;database-switching-challenge&lt;/code&gt; directory.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;git clone https://github.com/OpenLiberty/sample-jakartaNoSQL-game.git
cd sample-jakartaNoSQL-game
cd database-switching-challenge&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;key-takeaways&quot;&gt;Key takeaways&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This blog has shown just how easy it can be to switch between NoSQL solutions by using Jakarta NoSQL, bringing one more item to your utility belt that could be useful in helping you save resources and costs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;By reading this blog, you should now be familiar with:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;How to set up the Couchbase database cluster for development purposes;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How to switch between NoSQL database from different vendors, in our example: switching from MongoDB to Couchbase;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;next-steps-continuing-the-journey&quot;&gt;Next steps: continuing the journey&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Congratulations on getting this far!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This blog post is the 3rd part of a set of blog posts:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2024/05/11/simplifying-nosql-database-integration-with-jakarta-nosql.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Simplifying NoSQL Database Integration with Jakarta NoSQL&lt;/a&gt;;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2024/05/13/jakarta-nosql-in-action-meet-jnopo-game.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Jakarta NoSQL in Action: JNopo Game&lt;/a&gt;;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To see more sample projects, take a look at the official Eclipse JNoSQL samples repositories:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jnosql/demos-se&quot; class=&quot;bare&quot;&gt;https://github.com/jnosql/demos-se&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/JNOSQL/demos-ee&quot; class=&quot;bare&quot;&gt;https://github.com/JNOSQL/demos-ee&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To learn more about Eclipse JNoSQL, take a look at these official repositories:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/jnosql&quot; class=&quot;bare&quot;&gt;https://github.com/eclipse/jnosql&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/jnosql-databases&quot; class=&quot;bare&quot;&gt;https://github.com/eclipse/jnosql-databases&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/jnosql-extensions&quot; class=&quot;bare&quot;&gt;https://github.com/eclipse/jnosql-extensions&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;if you&amp;#8217;re an expert on some NoSQL database that Eclipse JNoSQL doesn&amp;#8217;t support, feel free to open an issue or a PR on the project repositories mentioned above. Except for the NoSQL solutions mentioned like MongoDB and Couchbase, all the technology used in this blog post are open-source, so, what do you think about contributing to these projects? If you don&amp;#8217;t know how to get started to contribute, take a look at this &lt;a href=&quot;https://www.youtube.com/watch?v=7qhHOOoZEBU&amp;amp;list=PLOQgznExm9ivs8VZ1ub8-F-JS7GB-V7sC&quot;&gt;Coffee.withJava(&quot;Contribute to JNoSQL&quot;) Youtube Series&lt;/a&gt;, or if you prefer, feel free to contact me! Contributing to these projects is not just with codes, you could help a lot by promoting and speaking about them wherever you go! Contributing to open-source is a great way to boost your career, and improve your skills to become an effective developer and relevant in the market! Think about that!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;special-thanks&quot;&gt;Special thanks&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;m bursting with gratitude and would love to give a big shout-out to my incredible Java community friends for their unwavering support throughout my journey. A special round of applause for:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/otaviojava/&quot;&gt;Otavio Santana&lt;/a&gt;, you&amp;#8217;re not just a mentor but a guiding star in my open-source journey. Your mentorship have opened doors for me to become an active open-source contributor and a proud Eclipse Foundation committer. Thank you for being such a monumental part of my journey. Also, thanks for your insightful reviews of the codes featured in this blog post.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/kvarel4/&quot;&gt;Karina Varela&lt;/a&gt;, your keen eye for detail and your generosity in sharing your knowledge have enriched this content beyond measure. Your thoughtful reviews have made this content not just better, but truly curated and relevant. I&amp;#8217;m so grateful for your contribution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/gabrieljava/&quot;&gt;Gabriel Silva Andrade&lt;/a&gt;, your support and encouragement have been a constant source of inspiration for me. Your partnership at the SouJava JUG and Java community initiatives around this subject have been invaluable in shaping this content. Thank you for your unwavering support.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/fabio-franco-8401055/&quot;&gt;Fabio Franco&lt;/a&gt;, you were the catalyst for this wonderful opportunity, connecting me with the fantastic OpenLiberty team and offering your support throughout the publishing process of this blog post. Your belief in me and your encouragement have been invaluable. Thank you for making this possible.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;And to the OpenLiberty team, thank you for opening your doors and allowing me the privilege to share and post this content that I&amp;#8217;ve thoroughly enjoyed working on. Thanks for this opportunity.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To each of you, your support means a lot to me, and I&amp;#8217;m deeply thankful.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;references-and-further-reading&quot;&gt;References and Further Reading&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Official documentation:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jnosql.org&quot;&gt;Eclipse JNoSQL website&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/&quot;&gt;Jakarta EE Specifications&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Articles:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/jakarta-nosql-100-b5-how-to-make-your-life-easier&quot;&gt;Jakarta NoSQL 1.0.0-b5: How To Make Your Life Easier Around Enterprise Java and NoSQL Databases by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/eclipse-jnosql-100-streamlining-java-and-nosql-int&quot;&gt;Eclipse JNoSQL 1.0.0: Streamlining Java and NoSQL Integration With New Features and Bug Fixes by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/mastering-java-persistence-best-practices-for-clou&quot;&gt;Mastering Java Persistence: Best Practices for Cloud-Native Applications and Modernization by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/eclipse-jnosql-102-empowering-java-with-nosql-data&quot;&gt;Eclipse JNoSQL 1.0.2: Empowering Java With NoSQL Database Flexibility by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blogs.oracle.com/nosql/post/getting-started-accessing-oracle-nosql-database-using-jakarta-nosql&quot;&gt;Getting Started - Accessing Oracle NoSQL Database using Jakarta NoSQL by Dario VEGA&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/exploring-the-new-eclipse-jnosql-version-110-a-div&quot;&gt;Exploring the New Eclipse JNoSQL Version 1.1.0: A Dive Into Oracle NoSQL by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://eldermoraes.com/how-to-create-cdi-events/&quot;&gt;How to create CDI Events by Elder Moraes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blogs.oracle.com/javamagazine/post/jakarta-data-mysql&quot;&gt;Simplifying data access with MySQL and Jakarta Data by Ivar Grimstad&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/introduction-to-nosql-database-1&quot;&gt;Introduction to NoSQL Database by Rama Krishna Panguluri&lt;/a&gt;;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Books:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.com/Persistence-Best-Practices-Java-Applications/dp/1837631271/&quot;&gt;Persistence Best Practices for Java Applications by Otavio Santana and Karina Varela&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://bpbonline.com/products/java-persistence-with-nosql&quot;&gt;Java Persistence with NoSQL by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://a.co/d/4dlvHQj&quot;&gt;NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence by Pramod Sadalage and Martin Fowler&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 14 May 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/05/14/jakarta-nosql-challenge-switching-nosql-easily.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/05/14/jakarta-nosql-challenge-switching-nosql-easily
          
        </guid>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta NoSQL in action: JNopo game</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the data-driven age of AI and cloud computing, the choice between relational or NoSQL databases crucially influences a solution&amp;#8217;s success. The Jakarta NoSQL specification addresses this challenge by providing a standard-based, easy-to-learn framework that mirrors the familiar JPA and  simplifies development across various NoSQL databases. Learn about the JNopo game and delve into how Jakarta NoSQL, together with Jakarta Data, can simplify using NoSQL databases.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After getting an overview about Jakarta NoSQL, Jakarta Data, and Eclipse JNoSQL in this &lt;a href=&quot;/blog/2024/05/10/simplifying-nosql-database-integration-with-jakarta-nosql.html&quot;&gt;blog post&lt;/a&gt;, we&amp;#8217;re in a good shape to explore and understand what an actual application implementation with Jakarta NoSQL would look like, through a sample game application that relies on non-relational storage and data manipulation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;toc&quot; class=&quot;toc&quot;&gt;
&lt;div id=&quot;toctitle&quot;&gt;Table of Contents&lt;/div&gt;
&lt;ul class=&quot;sectlevel1&quot;&gt;
&lt;li&gt;&lt;a href=&quot;#getting-started-playing-jnopo&quot;&gt;Getting started: playing JNopo!&lt;/a&gt;
&lt;ul class=&quot;sectlevel2&quot;&gt;
&lt;li&gt;&lt;a href=&quot;#its-fun-time-lets-play-jnopo&quot;&gt;It&amp;#8217;s fun time: Let&amp;#8217;s play JNopo!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-winner-ranking-challenge&quot;&gt;The winner ranking challenge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#implementing-the-winner-ranking&quot;&gt;Implementing the winner ranking&lt;/a&gt;
&lt;ul class=&quot;sectlevel2&quot;&gt;
&lt;li&gt;&lt;a href=&quot;#setting-up-the-persistence-layer&quot;&gt;Setting up the persistence layer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#configuring-project-dependencies&quot;&gt;Configuring project dependencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#setting-up-local-nosql-databases&quot;&gt;Setting up local NoSQL databases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#defining-database-credentials&quot;&gt;Defining database credentials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#modeling-data-with-jakarta-nosql&quot;&gt;Modeling data with Jakarta NoSQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#data-store-and-retrieval-with-jakarta-data&quot;&gt;Data store and retrieval with Jakarta Data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#capturing-and-persisting-game-matches&quot;&gt;Capturing and persisting game matches&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#exposing-the-winner-ranking&quot;&gt;Exposing the winner ranking&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#key-takeaways&quot;&gt;Key takeaways&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#next-steps-continuing-the-journey&quot;&gt;Next steps: continuing the journey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#special-thanks&quot;&gt;Special thanks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#references-and-further-reading&quot;&gt;References and further reading&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;getting-started-playing-jnopo&quot;&gt;Getting started: playing JNopo!&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;JNopo&lt;/strong&gt; is a Java version of the famous the &lt;em&gt;Rock, Paper, and Scissors&lt;/em&gt; game. This game consists of a battle of two players where each one chooses a move between rock, paper, or scissors. Hopefully you&amp;#8217;re already familiar with the rules of this game, but if you are not, we&amp;#8217;ve included some example scenarios to illustrate the game logic below. Let&amp;#8217;s suppose that a &lt;em&gt;Player A&lt;/em&gt; will play with a &lt;em&gt;Player B&lt;/em&gt; and, in this case:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If &lt;em&gt;Player A&lt;/em&gt; chooses &lt;em&gt;ROCK&lt;/em&gt; and &lt;em&gt;Player B&lt;/em&gt; chooses &lt;em&gt;SCISSORS&lt;/em&gt; then &lt;em&gt;Player A&lt;/em&gt; wins the game.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If &lt;em&gt;Player A&lt;/em&gt; chooses &lt;em&gt;PAPER&lt;/em&gt; and &lt;em&gt;Player B&lt;/em&gt; chooses &lt;em&gt;ROCK&lt;/em&gt; then &lt;em&gt;Player A&lt;/em&gt; wins the game.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If &lt;em&gt;Player A&lt;/em&gt; chooses &lt;em&gt;SCISSORS&lt;/em&gt; and &lt;em&gt;Player B&lt;/em&gt; chooses &lt;em&gt;PAPER&lt;/em&gt; then &lt;em&gt;Player A&lt;/em&gt; wins the game.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If &lt;em&gt;Player A&lt;/em&gt; and &lt;em&gt;Player B&lt;/em&gt; choose the same move, then the game is a tie and neither player wins.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the following sequence diagram, we can illustrate the default behavior of the JNopo game:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/jnopo-sequence-diagram-without-persistence.gif&quot; alt=&quot;JNopo Sequence Diagram&quot; width=&quot;60%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;JNopo is implemented using Jakarta EE Specifications so it&amp;#8217;s compatible with Jakarta EE and MicroProfile runtimes. In our case, we&amp;#8217;re using &lt;a href=&quot;https://openliberty.io/&quot;&gt;Open Liberty&lt;/a&gt; 23.0.0.10.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The architecture for this application is comprises two components:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The web page where the players interact with the game&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The back-end where the game matches are managed&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the following image, we can see the system design of the JNopo game:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/jnopo-architecture-without-persistence.png&quot; alt=&quot;JNopo Architecture Diagram&quot; width=&quot;60%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;its-fun-time-lets-play-jnopo&quot;&gt;It&amp;#8217;s fun time: Let&amp;#8217;s play JNopo!&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Before you start, this game uses the Maven Wrapper plugin, which means, you just need to have the &lt;strong&gt;JDK 21&lt;/strong&gt; or later installed in your machine to build and/or run the application.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Yeah! It&amp;#8217;s time have fun playing JNopo!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Clone the &lt;a href=&quot;https://github.com/OpenLiberty/sample-jakartaNoSQL-game&quot;&gt;Git repository&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;git clone https://github.com/OpenLiberty/sample-jakartaNoSQL-game.git

cd sample-jakartaNoSQL-game&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Navigate to the &lt;code&gt;start&lt;/code&gt; directory. This directory contains the starting project that we&amp;#8217;ll work through in this post.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;cd start&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This project is ready to run on Open Liberty. You just need to perform the following Maven Wrapper command:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;For Mac or Linux:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;./mvnw liberty:dev&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For Windows:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;mvnw.cmd liberty:dev&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This will install all required dependencies and start the default server.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now, if everything works, you can play the game by accessing the following URL address:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;curl&quot;&gt;http://localhost:9080/jakarta-nosql-game/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To play the game locally you just need to open two browsers tabs/windows pointing to the same URL address.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;the-winner-ranking-challenge&quot;&gt;The winner ranking challenge&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This is where things get interesting: why not to challenge us to learn, create, and improve our knowledge and practical software development skills? That&amp;#8217;s we&amp;#8217;re going to do: let&amp;#8217;s make JNopo provide a winner ranking!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This challenge is an amazing opportunity to learn and explore how to use Jakarta NoSQL and Jakarta Data to simplify NoSQL integration with Java applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To get a winner ranking, JNopo needs to persist the game matches results and then summarize the results composing the ranking. To expose this ranking, the application must provide a REST API like the following example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;curl -X GET \
  -H 'Accept: application/json' \
  http://localhost:9080/jakarta-nosql-game/api/playoffs/ranking&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The winner ranking response is similar to the following JSON output:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;{
  &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; : {
    &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Max&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;2&lt;/span&gt;,
    &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Fabio&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;1&lt;/span&gt;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As I said, it&amp;#8217;ll be interesting!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;implementing-the-winner-ranking&quot;&gt;Implementing the winner ranking&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The winner ranking requires a set of game matches results. To get that, we need to add a persistence layer to JNopo that captures and stores the game match results.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;setting-up-the-persistence-layer&quot;&gt;Setting up the persistence layer&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let&amp;#8217;s add the dependencies to create the persistence layer. Our persistence layer will be implemented using Jakarta NoSQL and Jakarta Data. To implement these Jakarta EE specifications, we&amp;#8217;ll use &lt;a href=&quot;https://projects.eclipse.org/projects/technology.jnosql&quot;&gt;Eclipse JNoSQL&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Eclipse JNoSQL offers a database API collection that covers document, key-value, column and graph NoSQL databases. For now, Eclipse JNoSQL supports about &lt;a href=&quot;https://www.jnosql.org/docs/supported_dbs.html&quot;&gt;30 NoSQL databases&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For this challenge, let&amp;#8217;s develop the persistence layer to integrate with document NoSQL databases type. Eclipse JNoSQL supports various document NoSQL databases. You can find a list of supported databases, along with their configurations and dependencies, on the &lt;a href=&quot;https://github.com/eclipse/jnosql-databases&quot;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;configuring-project-dependencies&quot;&gt;Configuring project dependencies&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let&amp;#8217;s use MongoDB as the default document database. Add the following Maven dependency into the &lt;code&gt;pom.xml&lt;/code&gt; file of the project:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jnosql.databases&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jnosql-mongodb&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Once you add the appropriate dependency, you need to configure the credentials for your document database. These credentials typically include details such as the database name, host, port, and any required authentication credentials. To configure MongoDB, you can find the supported credentials properties at the &lt;a href=&quot;https://github.com/eclipse/jnosql-databases#mongodb&quot;&gt;Eclipse JNoSQL MongoDB Database API Configuration&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;setting-up-local-nosql-databases&quot;&gt;Setting up local NoSQL databases&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Installing and managing databases locally requires additional efforts that we will not cover it in this blog post. We chose to use Docker Compose as the tooling for managing containers locally. Take a look at the &lt;a href=&quot;https://docs.docker.com/compose/&quot;&gt;Docker Compose Overview&lt;/a&gt; to learn more about this tool.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let&amp;#8217;s create a &lt;code&gt;docker-compose.yml&lt;/code&gt; file into the project root directory and add the following content:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;key&quot;&gt;services&lt;/span&gt;:

  &lt;span class=&quot;key&quot;&gt;mongo&lt;/span&gt;:
    &lt;span class=&quot;key&quot;&gt;image&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;mongo&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;key&quot;&gt;restart&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;always&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;key&quot;&gt;environment&lt;/span&gt;:
      &lt;span class=&quot;key&quot;&gt;MONGO_INITDB_ROOT_USERNAME&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;root&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;key&quot;&gt;MONGO_INITDB_ROOT_PASSWORD&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;example&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;key&quot;&gt;ports&lt;/span&gt;:
      - &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;27017:27017&lt;/span&gt;&lt;/span&gt;

  &lt;span class=&quot;key&quot;&gt;mongo-express&lt;/span&gt;:
    &lt;span class=&quot;key&quot;&gt;image&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;mongo-express:1.0.0-alpha&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;key&quot;&gt;restart&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;always&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;key&quot;&gt;ports&lt;/span&gt;:
      - &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;8081:8081&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;key&quot;&gt;environment&lt;/span&gt;:
      &lt;span class=&quot;key&quot;&gt;ME_CONFIG_MONGODB_ADMINUSERNAME&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;root&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;key&quot;&gt;ME_CONFIG_MONGODB_ADMINPASSWORD&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;example&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;key&quot;&gt;ME_CONFIG_MONGODB_URL&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;mongodb://root:example@mongo:27017/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For convenience, the previous example added a &lt;code&gt;mongo-express&lt;/code&gt; service that allows us to navigate and manage MongoDB data through a friendly web interface.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonitionblock note&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;icon&quot;&gt;
&lt;i class=&quot;fa icon-note&quot; title=&quot;Note&quot;&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class=&quot;content&quot;&gt;
Feel free to customize the declaration of the containers in the &lt;code&gt;docker-compose.yml&lt;/code&gt; file. For example, the database data is saved inside the container image, which means that the data will be lost if the containers are deleted.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now, to start up the databases we just need to run the following command:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;docker-compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You should now be able to access the mongo-express UI at &lt;a href=&quot;http://localhost:8081/&quot; class=&quot;bare&quot;&gt;http://localhost:8081/&lt;/a&gt; :&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/mongo-express.png&quot; alt=&quot;Mongo Express&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;defining-database-credentials&quot;&gt;Defining database credentials&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now that we defined the MongoDB database instance, we can set up the Eclipse JNoSQL framework correctly.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Eclipse JNoSQL uses &lt;a href=&quot;https://microprofile.io/specifications/microprofile-config/&quot;&gt;MicroProfile Config&lt;/a&gt; to get the required configurations to establish the connection to the databases. We can define these properties in the &lt;code&gt;resources/META-INF/microprofile-config.properties&lt;/code&gt; file by using environment variables. For more information about MicroProfile Config, take a look at &lt;a href=&quot;/docs/latest/external-configuration.html/&quot;&gt;External configuration of microservices&lt;/a&gt; in the Open Liberty docs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;According to the &lt;code&gt;docker-compose.yml&lt;/code&gt; file that we have created previously, we can define the following properties:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;properties&quot;&gt;jnosql.mongodb.host=localhost:27017
jnosql.mongodb.user=root
jnosql.mongodb.password=example
jnosql.mongodb.authentication.source=admin&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;modeling-data-with-jakarta-nosql&quot;&gt;Modeling data with Jakarta NoSQL&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Once we add the Eclipse JNoSQL dependencies, the Jakarta NoSQL api comes together as a transient dependency to the project, allowing us to create the NoSQL entities we want.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let&amp;#8217;s model the &lt;code&gt;GameMatch&lt;/code&gt; entity, which represents each game match result.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As we said before, Eclipse JNoSQL allows us to use Java Records as entities, so, let&amp;#8217;s use this feature:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;org.jakartaee.sample.model&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.nosql.Column&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.nosql.Entity&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.nosql.Id&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; record GameMatch (
        &lt;span class=&quot;annotation&quot;&gt;@Id&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; id,

        &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;
        PlayerInfo playerA,

        &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;
        PlayerInfo playerB,

        &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;
        PlayerInfo winner,

        &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;
        PlayerInfo loser,

        &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;Boolean&lt;/span&gt; tied
){
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To represent each player name and movement, let&amp;#8217;s model such data as a &lt;code&gt;PlayerInfo&lt;/code&gt; record class:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;org.jakartaee.sample.model&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.nosql.Column&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.nosql.Entity&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; record PlayerInfo (

        &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name,

        &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; movement
){
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;data-store-and-retrieval-with-jakarta-data&quot;&gt;Data store and retrieval with Jakarta Data&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now, we&amp;#8217;ll create a component to store and retrieve such entities from the MongoDB database. It&amp;#8217;s common to see developers using patterns like data access object (DAO) to implement these components. That&amp;#8217;s not a problem at all, but we use to see them making the components closer to a specific vendor database semantics, raising a vendor lock-in situation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Nowadays, in the cloud era where we pay as we go, switching between NoSQL solutions can save resources and costs. But vendor lock-in would probably compromise this strategy. Also, other considerations come to the table when there&amp;#8217;s a need to switch databases, such as time spent on the change, the learning curve of a new API, the code that will be lost, the persistence layer that needs to be replaced, etc. This is where the flexibility of Jakarta NoSQL shines.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Another interesting point is that DAO components tend to be closer to the database semantics than the business domain model language, requiring a high cognitive load for developers to connect the dots and fill the gaps between the technical codes and business necessities, once the code is not expressive enough, and doesn&amp;#8217;t fit with the ubiquitous language of the business. At this point, Jakarta Data comes into play!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Coming back to our challenge, let&amp;#8217;s create a repository component that will represents the play-offs:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;org.jakartaee.sample.model&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.DataRepository&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Query&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Repository&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Save&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Playoffs&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; DataRepository&amp;lt;GameMatch,&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt;&amp;gt; {

    &lt;span class=&quot;annotation&quot;&gt;@Save&lt;/span&gt;
    GameMatch add(GameMatch gameMatch);

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;capturing-and-persisting-game-matches&quot;&gt;Capturing and persisting game matches&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the entity and repository already created, we need to capture and persist the results of each game match. The next obvious question is: how could we capture the required game events?&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;It&amp;#8217;s a really good question! The answer is: &lt;a href=&quot;https://jakarta.ee/specifications/cdi/4.0/jakarta-cdi-spec-4.0#events&quot;&gt;the Events API provided by the Jakarta Context and Dependency Injection (CDI) specification&lt;/a&gt;!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;JNopo game uses &lt;a href=&quot;https://jakarta.ee/specifications/cdi/4.0/jakarta-cdi-spec-4.0#events&quot;&gt;CDI Events&lt;/a&gt; to promote extension points, based on event publishing, to be used as needed. With that, we can implement an &lt;code&gt;@Observable&lt;/code&gt; methods on any CDI bean to handle event objects.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See the following &lt;code&gt;GameState&lt;/code&gt; interface. Objects that implement this interface will act as event objects:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;org.jakartaee.sample.game&lt;/span&gt;;

&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; sealed &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;GameState&lt;/span&gt; permits
        WaitingPlayers,
        GameInvalid,
        GameAbandoned,
        GameReady,
        GameRunning,
        GameOver {
    &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; gameId();
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;GameState&lt;/code&gt; interface is a sealed interface that defines all the supported game states. According to the sealed implementation, the event that we&amp;#8217;re interested is the &lt;code&gt;GameOver&lt;/code&gt; state. Such class is a record class. But it&amp;#8217;s not just a simple record class that acts like a data transfer object (DTO), it has useful methods that return important info like:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The game identification&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A tied attribute, to know whether the game ended as a tied&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Player A and its moves&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Player B and its moves&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The winning player and its moves, if the game ended without a tie&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The losing player and its moves, if the game ended without a tie&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now let`s create the &lt;code&gt;GameMatchCapturer&lt;/code&gt; bean that captures the emitted &lt;code&gt;GameOver&lt;/code&gt; state and stores the game match results in the database:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;org.jakartaee.sample.model&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.enterprise.context.ApplicationScoped&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.enterprise.event.Observes&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.inject.Inject&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;org.jakartaee.sample.game.GameOver&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@ApplicationScoped&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;GameMatchCapturer&lt;/span&gt; {

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; captureAndPersist(&lt;span class=&quot;annotation&quot;&gt;@Observes&lt;/span&gt; GameOver gameOver){
        &lt;span class=&quot;comment&quot;&gt;// put the persistence logic here...&lt;/span&gt;
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;At this point, let&amp;#8217;s instantiate a new &lt;code&gt;GameMatch&lt;/code&gt; entity instance, populate it from &lt;code&gt;GameOver&lt;/code&gt; data and then store it into the database by using the &lt;code&gt;Playoffs&lt;/code&gt; component.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The required &lt;code&gt;Playoff&lt;/code&gt; component, which is a repository implementation provided Eclipse JNoSQL, will be injected by CDI using the &lt;code&gt;@Inject&lt;/code&gt; and &lt;code&gt;@Database(DOCUMENT)&lt;/code&gt; annotations:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;org.jakartaee.sample.model&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.enterprise.context.ApplicationScoped&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.enterprise.event.Observes&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.inject.Inject&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;org.eclipse.jnosql.mapping.Database&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;org.eclipse.jnosql.mapping.DatabaseType&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;org.jakartaee.sample.game.GameOver&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@ApplicationScoped&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;GameMatchCapturer&lt;/span&gt; {

    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Database&lt;/span&gt;(DatabaseType.DOCUMENT)
    Playoffs playoffs;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; captureAndPersist(&lt;span class=&quot;annotation&quot;&gt;@Observes&lt;/span&gt; GameOver gameOver){

            &lt;span class=&quot;type&quot;&gt;var&lt;/span&gt; gameMatch  = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; GameMatch(
                    gameOver.gameId(),
                    PlayerInfo.of(gameOver.playerAInfo()),
                    PlayerInfo.of(gameOver.playerBInfo()),
                    gameOver.winnerInfo().map(PlayerInfo::of).orElse(PlayerInfo.NOBODY),
                    gameOver.winnerInfo().map(PlayerInfo::of).orElse(PlayerInfo.NOBODY),
                    gameOver.isTied()
            );

            playoffs.add(gameMatch);
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now, let&amp;#8217;s start the Open Liberty runtime to figure out if the game match results are being stored on the MongoDB.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;On Linux/Mac machines, run the following command:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;./mvnw liberty:dev&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On Windows machines, run the following command:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;mvnw.cmd liberty:dev&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After some game matches, we can confirm the persistence of the game matches into the database by looking at Mongo Express running on &lt;a href=&quot;http://localhost:8081&quot; class=&quot;bare&quot;&gt;http://localhost:8081&lt;/a&gt; :&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/mongo-express-01.png&quot; alt=&quot;Mongo Express 01&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/mongo-express-02.png&quot; alt=&quot;Mongo Express 02&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/mongo-express-03.png&quot; alt=&quot;Mongo Express 03&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/mongo-express-04.png&quot; alt=&quot;Mongo Express 04&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or, if you&amp;#8217;re a command-line practitioner, you can check the data by using the &lt;code&gt;mongosh&lt;/code&gt; cli:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;docker exec -it finish-mongo-1 mongosh -u root -p example --authenticationDatabase admin jnopo&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Once connected, you can run &lt;code&gt;mongo&lt;/code&gt; commands:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Getting the number of stored documents:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;jnopo&amp;gt; db.GameMatch.countDocuments()
3&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Getting the stored documents list:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;jnopo&amp;gt; db.GameMatch.find()
[
  {
    _id: '2f42cf9e-f99c-44e5-bda8-7707da2579a3',
    tied: true,
    winner: { name: '', movement: '' },
    playerA: { name: 'Max', movement: 'ROCK' },
    playerB: { name: 'Ghost', movement: 'ROCK' },
    loser: { name: '', movement: '' }
  },
  {
    _id: 'c425815c-2aaf-4caa-a975-8e8089f0a0ce',
    tied: false,
    winner: { name: 'Max', movement: 'PAPER' },
    playerA: { name: 'Ghost', movement: 'ROCK' },
    playerB: { name: 'Max', movement: 'PAPER' },
    loser: { name: 'Max', movement: 'PAPER' }
  },
  {
    _id: 'bb7e7cd5-f8fe-4db1-9e90-44ecd433b4de',
    tied: false,
    winner: { name: 'Ghost', movement: 'ROCK' },
    playerA: { name: 'Ghost', movement: 'ROCK' },
    playerB: { name: 'Max', movement: 'SCISSORS' },
    loser: { name: 'Ghost', movement: 'ROCK' }
  }
]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Great! JNopo is storing the game match results as expected! It&amp;#8217;s time to create the winner ranking and then expose it though a restful endpoint: &lt;a href=&quot;http://localhost:9080/jakarta-nosql-game/api/playoffs/ranking&quot; class=&quot;bare&quot;&gt;http://localhost:9080/jakarta-nosql-game/api/playoffs/ranking&lt;/a&gt; .&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;exposing-the-winner-ranking&quot;&gt;Exposing the winner ranking&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Collecting and storing the game matches enables us to implement the winner ranking feature.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let&amp;#8217;s implement the &lt;code&gt;Ranking&lt;/code&gt; class to represent any ranking on the JNopo application.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;Ranking&lt;/code&gt; creation requires the data from the &lt;code&gt;Playoffs&lt;/code&gt; component. In order to avoid to create a new layer to keep the logic of the ranking creation, I decided to use a simple approach: a simple static factory method on the &lt;code&gt;Ranking&lt;/code&gt; class itself.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Firstly, &lt;code&gt;Playoffs&lt;/code&gt; needs to provide a method to retrieve the non-tied game results:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;org.jakartaee.sample.model&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.DataRepository&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Query&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Repository&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Save&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.stream.Stream&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Playoffs&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; DataRepository&amp;lt;GameMatch,&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt;&amp;gt; {

    &lt;span class=&quot;annotation&quot;&gt;@Save&lt;/span&gt;
    GameMatch add(GameMatch gameMatch);

    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;select * from GameMatch where tied=false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    Stream&amp;lt;GameMatch&amp;gt; nonTiedGameMatches();

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;admonitionblock note&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;icon&quot;&gt;
&lt;i class=&quot;fa icon-note&quot; title=&quot;Note&quot;&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class=&quot;content&quot;&gt;
JNoSQL offers a simple query language that is pretty similar to SQL. However, it&amp;#8217;s not a complete SQL implementation and some aggregation and functions are not available.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Regarding the aggregation process that evolves the ranking logic creation, we used to see developers delegating this aggregation logic to the DBMS and, depending on the persistence mechanism, it should be the best approach. For now, the grouping projection functions like we have with Jakarta Persistence is not available on the Jakarta NoSQL. However, in the future, such capabilities might be available.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In order to keep our implementation free of vendor lock-in, I decided to implement the aggregation process by using the Stream API. I added comments on the code to help you to understand the implemented logic.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;org.jakartaee.sample.model&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.Collection&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.Comparator&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.LinkedHashMap&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.Map&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.stream.Collectors&lt;/span&gt;;

&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; record Ranking(&lt;span class=&quot;predefined-type&quot;&gt;Map&lt;/span&gt;&amp;lt;&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt;, &lt;span class=&quot;predefined-type&quot;&gt;Integer&lt;/span&gt;&amp;gt; data) {
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; Ranking winnerRanking(Playoffs playoffs) {

        &lt;span class=&quot;type&quot;&gt;var&lt;/span&gt; data =
                &lt;span class=&quot;comment&quot;&gt;// getting the game matches that are not tied&lt;/span&gt;
                playoffs.nonTiedGameMatches()
                &lt;span class=&quot;comment&quot;&gt;// grouping by winner's name and summarize by game match&lt;/span&gt;
                .collect(Collectors.groupingBy(
                        g -&amp;gt; g.winner().name(),
                        Collectors.collectingAndThen(Collectors.toList(), &lt;span class=&quot;predefined-type&quot;&gt;Collection&lt;/span&gt;::size)))
                .entrySet()
                .stream()
                &lt;span class=&quot;comment&quot;&gt;// sorting the results by number of game match in descending order&lt;/span&gt;
                .sorted(&lt;span class=&quot;predefined-type&quot;&gt;Map&lt;/span&gt;.Entry.comparingByValue(&lt;span class=&quot;predefined-type&quot;&gt;Comparator&lt;/span&gt;.reverseOrder()))
                &lt;span class=&quot;comment&quot;&gt;// collecting as a LinkedHashMap to keep the sorted items&lt;/span&gt;
                .collect(Collectors.toMap(
                        &lt;span class=&quot;predefined-type&quot;&gt;Map&lt;/span&gt;.Entry::getKey,
                        &lt;span class=&quot;predefined-type&quot;&gt;Map&lt;/span&gt;.Entry::getValue,
                        (e1, e2) -&amp;gt; e1, &lt;span class=&quot;predefined-type&quot;&gt;LinkedHashMap&lt;/span&gt;::&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;));

        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; Ranking(data);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now, let make this ranking be accessible to our model. As the ranking needs the data from the &lt;code&gt;Playoffs&lt;/code&gt; component, why not to put the ranking creation on the &lt;code&gt;Playoffs&lt;/code&gt; interface? That&amp;#8217;s we&amp;#8217;re going to do! It is possible since the Java 8:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;org.jakartaee.sample.model&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.DataRepository&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Query&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Repository&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Save&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.stream.Stream&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Playoffs&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; DataRepository&amp;lt;GameMatch,&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt;&amp;gt; {

    &lt;span class=&quot;annotation&quot;&gt;@Save&lt;/span&gt;
    GameMatch add(GameMatch gameMatch);

    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;select * from GameMatch where tied=false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    Stream&amp;lt;GameMatch&amp;gt; nonTiedGameMatches();

    &lt;span class=&quot;keyword&quot;&gt;default&lt;/span&gt; Ranking winnerRanking(){
       &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; Ranking.winnerRanking(&lt;span class=&quot;local-variable&quot;&gt;this&lt;/span&gt;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;It looks like we&amp;#8217;re getting closer to our goal!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Following the challenge requirements, let&amp;#8217;s create the resource component that will expose the winner ranking.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Firstly, let&amp;#8217;s create the &lt;code&gt;RestApplication&lt;/code&gt; class to define the URL dedicated to restful endpoints:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;org.jakartaee.sample.resources&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.ws.rs.ApplicationPath&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.ws.rs.core.Application&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@ApplicationPath&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/api&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;RestApplication&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; Application {

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now, any URL under &lt;code&gt;/api&lt;/code&gt; will be handled by the Jakarta Restful Web Services implementation available in our runtime environment.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Next step: let&amp;#8217;s implement the &lt;code&gt;PlayoffsResource&lt;/code&gt; resource. This component will expose an HTTP GET endpoint for the &lt;code&gt;/api/playoffs/ranking&lt;/code&gt; URL:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;org.jakartaee.sample.resources&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.inject.Inject&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.ws.rs.Consumes&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.ws.rs.GET&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.ws.rs.Path&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.ws.rs.Produces&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.ws.rs.core.MediaType&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;org.eclipse.jnosql.mapping.Database&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;org.eclipse.jnosql.mapping.DatabaseType&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;org.jakartaee.sample.model.Playoffs&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;org.jakartaee.sample.model.Ranking&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@Path&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/playoffs&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;annotation&quot;&gt;@Consumes&lt;/span&gt;({MediaType.APPLICATION_JSON})
&lt;span class=&quot;annotation&quot;&gt;@Produces&lt;/span&gt;({MediaType.APPLICATION_JSON})
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;PlayoffsResource&lt;/span&gt; {

    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Database&lt;/span&gt;(DatabaseType.DOCUMENT)
    Playoffs playoffs;

    &lt;span class=&quot;annotation&quot;&gt;@GET&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Path&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/ranking&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; Ranking getRanking() {
        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; playoffs.winnerRanking();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;It&amp;#8217;s time to test everything! Let&amp;#8217;s restart the Open Liberty runtime:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;On Linux/Mac machines, run the following command:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;./mvnw liberty:dev&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On Windows machines, run the following command:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;mvnw.cmd liberty:dev&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty provides amazing tooling to help during develop Jakarta EE / MicroProfile applications. When &lt;a href=&quot;/docs/latest/development-mode.html&quot;&gt;dev mode&lt;/a&gt; is running, we can use some HTTP addresses to test and explore the capabilities offered by this amazing Jakarta EE/MicroProfile runtime:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;console&quot;&gt;[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/openapi/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/health/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/jwt/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/metrics/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/openapi/ui/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/ibm/api/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/jakarta-nosql-game/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let&amp;#8217;s focus on two of these URLs:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://localhost:9080/jakarta-nosql-game/&quot; class=&quot;bare&quot;&gt;http://localhost:9080/jakarta-nosql-game/&lt;/a&gt; is the URL of the application that we can use locally.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://localhost:9080/openapi/ui/&quot; class=&quot;bare&quot;&gt;http://localhost:9080/openapi/ui/&lt;/a&gt; is the Swagger UI interface that Open Liberty offers out-of-the-box, facilitating the rest endpoint testing via browser.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/swagger-ui-01.png&quot; alt=&quot;Swagger UI 01&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/swagger-ui-02.png&quot; alt=&quot;Swagger UI 02&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re a command-line practitioner, you can check the data by using the &lt;code&gt;curl&lt;/code&gt; command:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;curl -X 'GET' \
  'http://localhost:9080/jakarta-nosql-game/api/playoffs/ranking' \
  -H 'accept: application/json' | jq&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;{
  &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
    &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Max&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;3&lt;/span&gt;,
    &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Ghost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;1&lt;/span&gt;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Congratulations if you made it this far!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now, JNopo is providing a winner ranking!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re interested to take a look on the finished project code version developed during this challenge, clone this &lt;a href=&quot;https://github.com/OpenLiberty/sample-jakartaNoSQL-game&quot;&gt;Git repository&lt;/a&gt; and then navigate to the &lt;code&gt;winner-ranking-challenge&lt;/code&gt; directory.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;bash&quot;&gt;git clone https://github.com/OpenLiberty/sample-jakartaNoSQL-game.git
cd sample-jakartaNoSQL-game
cd winner-ranking-challenge&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;key-takeaways&quot;&gt;Key takeaways&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This challenge was an amazing opportunity to learn not just about Jakarta NoSQL and Jakarta Data to simplify the NoSQL integration with Java applications but also to explore new development approaches using interesting Java features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;What we got by doing these challenges:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A practical example that uses:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Sealed classes (final feature since Java 17)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pattern Matching for Instanceof (final feature since Java 16)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pattern Matching for Switch (final feature since Java 21)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;What we learned from them:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;How to configure Eclipse JNoSQL to allow us to work with Jakarta NoSQL and Jakarta Data in a Jakarta EE / MicroProfile project&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How to work with Jakarta NoSQL to create entities pretty similar to Jakarta Persistence approach&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How to create repositories with Jakarta Data, the newest Jakarta EE Specification that will be available in the Jakarta EE 11&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;next-steps-continuing-the-journey&quot;&gt;Next steps: continuing the journey&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Congratulations on getting this far!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the next blog post, a new challenge is introduced: &lt;strong&gt;Switching NoSQL Databases with Ease&lt;/strong&gt;! Stay tuned!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This blog post is the 2nd blog in a 3-part blog series. You can check out the other blogs in this series through the links below:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2024/05/10/simplifying-nosql-database-integration-with-jakarta-nosql.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Simplifying NoSQL Database Integration with Jakarta NoSQL&lt;/a&gt;;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To see more sample projects, take a look at the official Eclipse JNoSQL samples repositories:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jnosql/demos-se&quot; class=&quot;bare&quot;&gt;https://github.com/jnosql/demos-se&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/JNOSQL/demos-ee&quot; class=&quot;bare&quot;&gt;https://github.com/JNOSQL/demos-ee&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To learn more about Eclipse JNoSQL, take a look at these official repositories:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/jnosql&quot; class=&quot;bare&quot;&gt;https://github.com/eclipse/jnosql&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/jnosql-databases&quot; class=&quot;bare&quot;&gt;https://github.com/eclipse/jnosql-databases&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/jnosql-extensions&quot; class=&quot;bare&quot;&gt;https://github.com/eclipse/jnosql-extensions&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;if you&amp;#8217;re an expert on some NoSQL database that Eclipse JNoSQL doesn&amp;#8217;t support, feel free to open an issue or a PR on these project repositories.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Except for the NoSQL solutions like MongoDB and Couchbase, all the technology used in this blog post is open-source, so, what do you think about contributing to these projects? If you don&amp;#8217;t know how to get started to contribute, take a look at this &lt;a href=&quot;https://www.youtube.com/watch?v=7qhHOOoZEBU&amp;amp;list=PLOQgznExm9ivs8VZ1ub8-F-JS7GB-V7sC&quot;&gt;Coffee.withJava(&quot;Contribute to JNoSQL&quot;) Youtube Series&lt;/a&gt;, or if you prefer, feel free to contact me. Contributing to these projects is not just code, you could help a lot by promoting and speaking about them wherever you go! Contributing to open-source is a great way to boost your career and improve your skills to become an effective developer and relevant in the market! Think about that!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;special-thanks&quot;&gt;Special thanks&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;m bursting with gratitude and would love to give a big shout-out to my incredible Java community friends for their unwavering support throughout my journey. A special round of applause for:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/otaviojava/&quot;&gt;Otavio Santana&lt;/a&gt;, you&amp;#8217;re not just a mentor but a guiding star in my open-source journey. Your mentorship have opened doors for me to become an active open-source contributor and a proud Eclipse Foundation committer. Thank you for being such a monumental part of my journey. Also, thanks for your insightful reviews of the codes featured in this blog post.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/kvarel4/&quot;&gt;Karina Varela&lt;/a&gt;, your keen eye for detail and your generosity in sharing your knowledge have enriched this content beyond measure. Your thoughtful reviews have made this content not just better, but truly curated and relevant. I&amp;#8217;m so grateful for your contribution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/gabrieljava/&quot;&gt;Gabriel Silva Andrade&lt;/a&gt;, your support and encouragement have been a constant source of inspiration for me. Your partnership at the SouJava JUG and Java community initiatives around this subject have been invaluable in shaping this content. Thank you for your unwavering support.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/fabio-franco-8401055/&quot;&gt;Fabio Franco&lt;/a&gt;, you were the catalyst for this wonderful opportunity, connecting me with the fantastic OpenLiberty team and offering your support throughout the publishing process of this blog post. Your belief in me and your encouragement have been invaluable. Thank you for making this possible.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;And to the OpenLiberty team, thank you for opening your doors and allowing me the privilege to share and post this content that I&amp;#8217;ve thoroughly enjoyed working on. Thanks for this opportunity.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To each of you, your support means a lot to me, and I&amp;#8217;m deeply thankful.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;references-and-further-reading&quot;&gt;References and further reading&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Official documentation:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jnosql.org&quot;&gt;Eclipse JNoSQL website&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/&quot;&gt;Jakarta EE Specifications&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Articles:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/jakarta-nosql-100-b5-how-to-make-your-life-easier&quot;&gt;Jakarta NoSQL 1.0.0-b5: How To Make Your Life Easier Around Enterprise Java and NoSQL Databases by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/eclipse-jnosql-100-streamlining-java-and-nosql-int&quot;&gt;Eclipse JNoSQL 1.0.0: Streamlining Java and NoSQL Integration With New Features and Bug Fixes by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/mastering-java-persistence-best-practices-for-clou&quot;&gt;Mastering Java Persistence: Best Practices for Cloud-Native Applications and Modernization by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/eclipse-jnosql-102-empowering-java-with-nosql-data&quot;&gt;Eclipse JNoSQL 1.0.2: Empowering Java With NoSQL Database Flexibility by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blogs.oracle.com/nosql/post/getting-started-accessing-oracle-nosql-database-using-jakarta-nosql&quot;&gt;Getting Started - Accessing Oracle NoSQL Database using Jakarta NoSQL by Dario VEGA&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/exploring-the-new-eclipse-jnosql-version-110-a-div&quot;&gt;Exploring the New Eclipse JNoSQL Version 1.1.0: A Dive Into Oracle NoSQL by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://eldermoraes.com/how-to-create-cdi-events/&quot;&gt;How to create CDI Events by Elder Moraes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blogs.oracle.com/javamagazine/post/jakarta-data-mysql&quot;&gt;Simplifying data access with MySQL and Jakarta Data by Ivar Grimstad&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/introduction-to-nosql-database-1&quot;&gt;Introduction to NoSQL Database by Rama Krishna Panguluri&lt;/a&gt;;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Books:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.com/Persistence-Best-Practices-Java-Applications/dp/1837631271/&quot;&gt;Persistence Best Practices for Java Applications by Otavio Santana and Karina Varela&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://bpbonline.com/products/java-persistence-with-nosql&quot;&gt;Java Persistence with NoSQL by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://a.co/d/4dlvHQj&quot;&gt;NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence by Pramod Sadalage and Martin Fowler&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Mon, 13 May 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/05/13/jakarta-nosql-in-action-meet-jnopo-game.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/05/13/jakarta-nosql-in-action-meet-jnopo-game
          
        </guid>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Simplifying NoSQL database integration with Jakarta NoSQL</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the data-driven age of AI and cloud computing, choosing the right data storage strategy directly impacts the success of a solution. We currently rely on two major data storage approaches: relational and NoSQL databases. When it comes to working with relational databases, the Java Persistence API (JPA) specification is a robust and widely adopted API. In contrast, the crowded landscape of NoSQL databases opens a large set of integration options for developers, who often find themselves learning at the mercy of vendor-specific solutions instead of relying on standards.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Most importantly, how we define data storage and code design either facilitates or hinders the project&amp;#8217;s maintainability, performance, scalability, and ability to change databases later on.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Fortunately, Java developers who embrace NoSQL solutions no longer need to worry about many of these concerns. The Jakarta NoSQL specification offers a well-defined, standards-based implementation with a low learning curve and familiar coding APIs, thanks to its similarities with the widely-adopted JPA specification.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Join us in this comprehensive article, as we explore Jakarta NoSQL and how this specification can simplify developers' lives, no matter which NoSQL database their applications use!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;toc&quot; class=&quot;toc&quot;&gt;
&lt;div id=&quot;toctitle&quot;&gt;Table of Contents&lt;/div&gt;
&lt;ul class=&quot;sectlevel1&quot;&gt;
&lt;li&gt;&lt;a href=&quot;#understanding-nosql-databases&quot;&gt;Understanding NoSQL databases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#key-differences-sql-vs-nosql&quot;&gt;Key differences: SQL vs NoSQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#exploring-nosql-database-types&quot;&gt;Exploring NoSQL database types&lt;/a&gt;
&lt;ul class=&quot;sectlevel2&quot;&gt;
&lt;li&gt;&lt;a href=&quot;#key-value-databases&quot;&gt;Key-value databases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#document-databases&quot;&gt;Document databases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#column-databases&quot;&gt;Column Databases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#graph-databases&quot;&gt;Graph databases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#challenges-of-nosql-integration&quot;&gt;Challenges of NoSQL integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#introducing-jakarta-nosql-and-jakarta-data&quot;&gt;Introducing Jakarta NoSQL and Jakarta Data&lt;/a&gt;
&lt;ul class=&quot;sectlevel2&quot;&gt;
&lt;li&gt;&lt;a href=&quot;#jakarta-nosql&quot;&gt;Jakarta NoSQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#jakarta-data&quot;&gt;Jakarta Data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#eclipse-jnosql-a-reference-implementation&quot;&gt;Eclipse JNoSQL: A reference implementation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#why-eclipse-jnosql&quot;&gt;Why Eclipse JNoSQL?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#what-to-expect-from-eclipse-jnosql&quot;&gt;What to expect from Eclipse JNoSQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#next-steps-continuing-the-journey&quot;&gt;Next steps: continuing the journey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#special-thanks&quot;&gt;Special Thanks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#references-and-further-reading&quot;&gt;References and Further Reading&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;understanding-nosql-databases&quot;&gt;Understanding NoSQL databases&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The market has different views on the meaning of the name &quot;NoSQL&quot;; while some believe it is an acronym for &quot;Not Only SQL&quot;, others understand it as &quot;Non-SQL&quot; or &quot;Not relational&quot;. Regardless of these different interpretations, there&amp;#8217;s an undeniable aspect of this solution: &lt;strong&gt;NoSQL databases are fundamentally different in terms of data storage and management when compared to SQL&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;key-differences-sql-vs-nosql&quot;&gt;Key differences: SQL vs NoSQL&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;So what are the differences between these two?
In the following table, we can see the key differences between SQL and NoSQL:&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 33.3333%;&quot;&gt;
&lt;col style=&quot;width: 33.3333%;&quot;&gt;
&lt;col style=&quot;width: 33.3334%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Description&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;SQL Databases&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;NoSQL Databases&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;em&gt;Data Storage&lt;/em&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Use tabular relations to store and retrieve data&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Provide mechanisms for retrieving and storing unstructured and semi-structured data (non-relational)&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;em&gt;Schema&lt;/em&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Predefined schemas&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;No predefined schemas&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;em&gt;Scalability&lt;/em&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Vertical scalability (scale up)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Horizontal scalability (scale out)&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;em&gt;Data Distribution&lt;/em&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Data distributed across fewer servers&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Data distributed across many servers&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;em&gt;Suitability&lt;/em&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Better suited for smaller, structured datasets&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Well-suited for handling large and growing datasets&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;em&gt;Industry Adoption&lt;/em&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Traditionally used in many industries&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Gaining popularity in industries like finance and streaming&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now that we&amp;#8217;ve explored the fundamental differences between SQL and NoSQL databases, let&amp;#8217;s focus more on NoSQL databases. The next section looks at the different types of NoSQL databases, each designed to solve specific problems with unique data models and architectures.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;exploring-nosql-database-types&quot;&gt;Exploring NoSQL database types&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the NoSQL space, each database type solves different needs. The following overview examines  the most popular non-relational storage approaches: &lt;strong&gt;key-value&lt;/strong&gt;, &lt;strong&gt;document&lt;/strong&gt;, &lt;strong&gt;column&lt;/strong&gt;, and &lt;strong&gt;graph&lt;/strong&gt; databases .&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;key-value-databases&quot;&gt;Key-value databases&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Key-value databases are the simplest of the NoSQL database types. Data is stored as a collection of key-value pairs. It&amp;#8217;s ideal for getting information when you know the specific key, like finding a contact in your phone by their name. The structure resembles the Java &lt;code&gt;java.util.Map&lt;/code&gt; API, where values are mapped to keys.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Key-value databases are often used for caching, session management, and message queues.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/key-value-nosql.png&quot; alt=&quot;Key-value database type&quot; width=&quot;25%&quot; height=&quot;25%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Examples of vendors currently offering key-value solutions include Amazon DynamoDB, Redis, Hazelcast, and Memcached. The last three are open source technologies.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;document-databases&quot;&gt;Document databases&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Document databases are designed to store, retrieve, and manage documents with minimally defined structures, such as XML and JSON formats. A document without a predefined structure is a data model that can be composed of multiple fields to hold different data types.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Since it&amp;#8217;s possible to design models that hold documents inside other documents, Domain-Driven Design (DDD) practitioners can leverage document aggregates to manage their derived entities in a hierarchical structure.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Document databases are well-suited for managing unstructured data, such as user profiles, product catalogs, or content management systems.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/document-nosql.png&quot; alt=&quot;Document database type&quot; width=&quot;25%&quot; height=&quot;25%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Key vendors providing document database solutions include MongoDB, Couchbase, Elastic,  and Oracle NoSQL Database.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;column-databases&quot;&gt;Column Databases&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Column databases, also known as column-oriented or wide-column databases, store data as columns instead of rows, in contrast to traditional relational databases. This approach is a differentiator across other types, as it&amp;#8217;s an efficient way to handle large amounts of data and run performant complex queries.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This type is designed and optimized for storing large amounts of structured, semi-structured, and unstructured data with a flexible schema, and supports high levels of concurrency and scalability.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Wide-column databases are often used for analytics, content management, and data warehousing.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/column-nosql.png&quot; alt=&quot;Column database type&quot; width=&quot;25%&quot; height=&quot;25%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Examples of column databases include Apache HBase, Apache Cassandra, Scylla, Azure Cosmos DB, and many others. The first two mentioned here are open source technologies.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;graph-databases&quot;&gt;Graph databases&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The graph NoSQL database is optimized for storing and querying data with complex relationships. In this approach, data is managed as a graph, where entities can be represented as nodes and edges, resulting in performant management of complex relationship and hierarchies.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The graph data resembles the graph of objects in the object-oriented programming (OOP) paradigm. Graph NoSQL database solutions are a good fit for scenarios that require fast querying of highly interconnected data, such as social networks, recommendation engines, and fraud detection systems.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/graph-nosql.png&quot; alt=&quot;Graph database type&quot; width=&quot;25%&quot; height=&quot;25%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Graph databases available today are Neo4J, Arango DB, OrientDB, and JanusGraph, among others. The last one mentioned is an open source technology.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;challenges-of-nosql-integration&quot;&gt;Challenges of NoSQL integration&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Modern solutions frequently require the capabilities and benefits of different types of NoSQL databases, therefore, we should be able to work with multiple NoSQL solutions, coming from different vendors. Having said that, we can expect to face challenges such as:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A high cognitive load when choosing a NoSQL database solutions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A significant learning curve derived from usage of different database APIs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Extra time invested on changing and maintaining the existing codebase&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Potential increase in complexity when onboarding new developers to the team&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Furthermore, in the cloud era of consumption-based pricing models, we must consider ways to deliver solutions with efficient resource consumption for costs reduction. This is how potential discussions arise, opening the possibility to consider changes of the underlying database used by existing applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In addition to these challenges, a solution based on NoSQL must be flexible and designed with a concise isolation between business logic and the underlying persistence layer, given the high probability of changes being made to both.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonitionblock note&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;icon&quot;&gt;
&lt;i class=&quot;fa icon-note&quot; title=&quot;Note&quot;&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class=&quot;content&quot;&gt;
As of February 2024, the &lt;a href=&quot;https://db-engines.com/en/ranking&quot;&gt;DB-Engines Ranking&lt;/a&gt;, an initiative that aims to list and rank DBMS by popularity, there are over &lt;strong&gt;180 non-relational/NoSQL databases available in the market&lt;/strong&gt;.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To solve these challenges, we can refer to a not-so-distant past, when we faced a similar challenge with relational databases and Java integration. The Java Database connectivity (JDBC) specification standardized the way Java integrates with relational databases. To better align it with the OOP paradigm, the ORM pattern was popularized and the Jakarta Persistence specification was created to facilitate working with different relational databases engines and vendors.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;So, based on this background context about solutions with Jakarta Persistence, wouldn&amp;#8217;t it be interesting to have a similar solution and APIs to work with NoSQL?&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Say hello to &lt;a href=&quot;https://jakarta.ee/specifications/nosql/&quot;&gt;Jakarta NoSQL&lt;/a&gt; and &lt;a href=&quot;https://jakarta.ee/specifications/data/&quot;&gt;Jakarta Data&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;introducing-jakarta-nosql-and-jakarta-data&quot;&gt;Introducing Jakarta NoSQL and Jakarta Data&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These are specifications proposing a simpler NoSQL integration and abstract aspects of database vendors, allowing for developers to manipulate data with intuitive and developer-friendly APIs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;jakarta-nosql&quot;&gt;Jakarta NoSQL&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/nosql/&quot;&gt;Jakarta NoSQL&lt;/a&gt; is a &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Jakarta EE&lt;/a&gt; specification designed to easily integrate Java and NoSQL databases. It uses common annotations and specific APIs for key-value, column, and document databases.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;jakarta-data&quot;&gt;Jakarta Data&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;https://jakarta.ee/specifications/data/&quot;&gt;Jakarta Data&lt;/a&gt; specification, part of &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Jakarta EE&lt;/a&gt;, proposes a unified API for simplified data access across different types of databases, from relational to NoSQL databases.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data achieves its goal by introducing concepts like repositories and custom query methods, improving the developer experience when using data retrieval and manipulation APIs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonitionblock note&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;icon&quot;&gt;
&lt;i class=&quot;fa icon-note&quot; title=&quot;Note&quot;&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class=&quot;content&quot;&gt;
Jakarta Data is planned for inclusion in &lt;a href=&quot;https://jakarta.ee/specifications/data/1.0/&quot;&gt;Jakarta EE 11&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;eclipse-jnosql-a-reference-implementation&quot;&gt;Eclipse JNoSQL: A reference implementation&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A Jakarta EE specification can&amp;#8217;t solve the problem by itself - it becomes consumable through an &lt;em&gt;implementation&lt;/em&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Each Jakarta EE specification has at least one implementation. The existence of an implementation proves the proposed specification is achievable and can be developed by interested third-parties. This is when companies and communities actively start providing their own implementations, empowering the Jakarta EE developers and ecosystem with a diverse and powerful toolset.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonitionblock note&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;icon&quot;&gt;
&lt;i class=&quot;fa icon-note&quot; title=&quot;Note&quot;&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class=&quot;content&quot;&gt;
    Example of reference implementations (RI) are Hibernate for Jakarta Persistence 3.1 specification; Jersey for Jakarta RESTFul Web Services 3.1 specification; Glassfish for Jakarta Servlet 6.0 specification; Weld for Jakarta Context And Dependency Injection (CDI) 4.0 specification; and so on&amp;#8230;&amp;#8203;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://projects.eclipse.org/projects/technology.jnosql&quot;&gt;&lt;strong&gt;Eclipse JNoSQL&lt;/strong&gt;&lt;/a&gt; is a compatible implementation of the Jakarta NoSQL and Jakarta Data specifications, a framework that streamlines the integration of Java applications with relational and NoSQL databases. Powered by the Jakarta Contexts and Dependency Injection (CDI) specification, it is compatible with Jakarta EE and MicroProfile compatible solutions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Eclipse JNoSQL covers four NoSQL database types: &lt;strong&gt;key-value&lt;/strong&gt;, &lt;strong&gt;column&lt;/strong&gt;, &lt;strong&gt;document&lt;/strong&gt; and &lt;strong&gt;graph&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonitionblock note&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;icon&quot;&gt;
&lt;i class=&quot;fa icon-note&quot; title=&quot;Note&quot;&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class=&quot;content&quot;&gt;
Currently, the Jakarta NoSQL doesn&amp;#8217;t define an API for Graph database types but Eclipse JNoSQL provides a Graph template to explore the specific behavior of this database type by using &lt;a href=&quot;https://tinkerpop.apache.org/&quot;&gt;Apache TinkerPop&lt;/a&gt; as a communication layer.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As of March 2024, Eclipse JNoSQL supports about &lt;a href=&quot;https://www.jnosql.org/docs/supported_dbs.html&quot;&gt;30 NoSQL databases&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;why-eclipse-jnosql&quot;&gt;Why Eclipse JNoSQL?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the following code samples, note the APIs similarities and differences across different vendors. All samples demonstrate a commonly used functionality for document databases: a document creation and the addition of a property to that document:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sidebarblock img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;div class=&quot;imageblock text-left&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/mongodb.png&quot; alt=&quot;MongoDB&quot; width=&quot;25%&quot; height=&quot;25%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;type&quot;&gt;var&lt;/span&gt; document = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;Document&lt;/span&gt;();
document.append(name, value);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sidebarblock img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;div class=&quot;imageblock text-left&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/arangodb.png&quot; alt=&quot;Arango DB&quot; width=&quot;25%&quot; height=&quot;25%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;type&quot;&gt;var&lt;/span&gt; baseDocument = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; BaseDocument();
baseDocument.addAttribute(name, value);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sidebarblock img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;div class=&quot;imageblock text-left&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/couchbase.png&quot; alt=&quot;Couchbase&quot; width=&quot;25%&quot; height=&quot;25%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;type&quot;&gt;var&lt;/span&gt; jsonObject = JsonObject.create();
jsonObject.put(name, value);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sidebarblock img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;div class=&quot;imageblock text-left&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/orientdb.png&quot; alt=&quot;Orient Project&quot; width=&quot;25%&quot; height=&quot;25%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;type&quot;&gt;var&lt;/span&gt; document = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; ODocument(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;collection&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
document.field(name, value);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With Eclipse JNoSQL, developers can use a common API to integrate with different database types, free of vendor lock-in and with a low cognitive load during learning phases. For example, using the Document API, it&amp;#8217;s possible to switch between MongoDB and ArangoDB as needed, based on convention over configuration (CoC).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sidebarblock img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;div class=&quot;imageblock text-left&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/jnosql.png&quot; alt=&quot;Eclipse JNoSQL Project&quot; width=&quot;25%&quot; height=&quot;25%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;type&quot;&gt;var&lt;/span&gt; entity = CommunicationEntity.of(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;collection&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
entity.add(name, value);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out some of the Jakarta NoSQL annotations:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.nosql.Entity&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.nosql.Id&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.nosql.Column&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Book&lt;/span&gt; {

    &lt;span class=&quot;annotation&quot;&gt;@Id&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; isbn;

    &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; title;

    &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; author;

    &lt;span class=&quot;annotation&quot;&gt;@Convert&lt;/span&gt;(YearConverter.class)
    &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; Year year;

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When using Java 17+, Eclipse JNoSQL allows the usage of Java Records as entities:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.nosql.Entity&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.nosql.Id&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.nosql.Column&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; record &lt;span class=&quot;predefined-type&quot;&gt;Book&lt;/span&gt;(&lt;span class=&quot;annotation&quot;&gt;@Id&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; isbn,
                   &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; title,
                   &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;author&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; author,
                   &lt;span class=&quot;annotation&quot;&gt;@Convert&lt;/span&gt;(YearConverter.class) &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) Year year,
                   &lt;span class=&quot;annotation&quot;&gt;@Column&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;edition&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; edition) {

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Last but not least, Eclipse JNoSQL, as a Jakarta Data implementation, allows us to create repositories, enabling domain-driven development (DDD) capabilities through the usage of the repository pattern. This approach helps developers bring the code closer to the business (domain-centric) instead of working with database semantics.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.page.Page&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.page.PageRequest&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Delete&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Repository&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.DataRepository&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Query&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Param&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.data.repository.Save&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Garage&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; DataRepository&amp;lt;Car,&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt;&amp;gt;{

    &lt;span class=&quot;annotation&quot;&gt;@Save&lt;/span&gt;
    Car park(Car car);

    &lt;span class=&quot;annotation&quot;&gt;@Delete&lt;/span&gt;
    Car unPark(Car car);

    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;select * from Car where driver.name = @name&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;predefined-type&quot;&gt;Set&lt;/span&gt;&amp;lt;Car&amp;gt; findByDriver(&lt;span class=&quot;annotation&quot;&gt;@Param&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name);

    Page&amp;lt;Car&amp;gt; findByColor(&lt;span class=&quot;predefined-type&quot;&gt;Color&lt;/span&gt; color, PageRequest pageRequest);

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;what-to-expect-from-eclipse-jnosql&quot;&gt;What to expect from Eclipse JNoSQL&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Beyond being a Jakarta NoSQL and Jakarta Data implementation, Eclipse JNoSQL supports the following goals:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Increase productivity performing common NoSQL operations&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use of convention over configuration&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rich object mapping integrated with contexts and dependency injection (CDI)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Java-based query and fluent API&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Persistent lifecycle events&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Low-level mapping using standard NoSQL APIs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Specific template API to each NoSQL category&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Annotation-oriented using JPA-like naming when it makes sense&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Extensible to explore the particular behavior of a NoSQL database&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Explore the popularity of Apache TinkerPop in Graph API&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;next-steps-continuing-the-journey&quot;&gt;Next steps: continuing the journey&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Congratulations on getting this far!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After getting an overview of Jakarta NoSQL, Jakarta Data, and the Eclipse JNoSQL, I invite you to explore a hands-on approach to these tools, managing and querying data from NoSQL databases and switching between NoSQL databases as needed.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This blog post is the 1st part of a set of blog posts, keep you eyes out for these follow-ups coming soon:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jakarta NoSQL in Action: JNopo Game;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta NoSQL in Action: Switching NoSQL Databases with Ease&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To see some sample projects, take a look at the official Eclipse JNoSQL samples repositories:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jnosql/demos-se&quot; class=&quot;bare&quot;&gt;https://github.com/jnosql/demos-se&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/JNOSQL/demos-ee&quot; class=&quot;bare&quot;&gt;https://github.com/JNOSQL/demos-ee&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To learn more about Eclipse JNoSQL, take a look at these official repositories:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/jnosql&quot; class=&quot;bare&quot;&gt;https://github.com/eclipse/jnosql&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/jnosql-databases&quot; class=&quot;bare&quot;&gt;https://github.com/eclipse/jnosql-databases&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/jnosql-extensions&quot; class=&quot;bare&quot;&gt;https://github.com/eclipse/jnosql-extensions&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re an expert on some NoSQL database that Eclipse JNoSQL doesn&amp;#8217;t support, feel free to open an issue or a PR in these project repositories.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Except for previously mentioned NoSQL solutions like MongoDB and Couchbase, all the technology used in this blog post is open-source. So, what do you think about contributing to these projects? If you don&amp;#8217;t know how to get started, take a look at this &lt;a href=&quot;https://www.youtube.com/watch?v=7qhHOOoZEBU&amp;amp;list=PLOQgznExm9ivs8VZ1ub8-F-JS7GB-V7sC&quot;&gt;Coffee.withJava(&quot;Contribute to JNoSQL&quot;) Youtube Series&lt;/a&gt;, or if you prefer, feel free to contact me! Contributing to these projects is not just code, you could help a lot by promoting and speaking about them wherever you go! Contributing to open-source is a great way to boost your career, and improve your skills to become an effective developer and relevant in the market! Think about that!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;special-thanks&quot;&gt;Special Thanks&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;m bursting with gratitude and would love to give a big shout-out to my incredible Java community friends for their unwavering support throughout my journey. A special round of applause for:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/otaviojava/&quot;&gt;Otavio Santana&lt;/a&gt;, you&amp;#8217;re not just a mentor but a guiding star in my open-source journey. Your mentorship have opened doors for me to become an active open-source contributor and a proud Eclipse Foundation committer. Thank you for being such a monumental part of my journey. Also, thanks for your insightful reviews of the codes featured in this blog post.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/kvarel4/&quot;&gt;Karina Varela&lt;/a&gt;, your keen eye for detail and your generosity in sharing your knowledge have enriched this content beyond measure. Your thoughtful reviews have made this content not just better, but truly curated and relevant. I&amp;#8217;m so grateful for your contribution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/gabrieljava/&quot;&gt;Gabriel Silva Andrade&lt;/a&gt;, your support and encouragement have been a constant source of inspiration for me. Your partnership at the SouJava JUG and Java community initiatives around this subject have been invaluable in shaping this content. Thank you for your unwavering support.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/fabio-franco-8401055/&quot;&gt;Fabio Franco&lt;/a&gt;, you were the catalyst for this wonderful opportunity, connecting me with the fantastic OpenLiberty team and offering your support throughout the publishing process of this blog post. Your belief in me and your encouragement have been invaluable. Thank you for making this possible.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;And to the OpenLiberty team, thank you for opening your doors and allowing me the privilege to share and post this content that I&amp;#8217;ve thoroughly enjoyed working on. Thanks for this opportunity.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To each of you, your support means a lot to me, and I&amp;#8217;m deeply thankful.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;references-and-further-reading&quot;&gt;References and Further Reading&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Official documentation:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jnosql.org&quot;&gt;Eclipse JNoSQL website&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/&quot;&gt;Jakarta EE Specifications&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Articles:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/jakarta-nosql-100-b5-how-to-make-your-life-easier&quot;&gt;Jakarta NoSQL 1.0.0-b5: How To Make Your Life Easier Around Enterprise Java and NoSQL Databases by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/eclipse-jnosql-100-streamlining-java-and-nosql-int&quot;&gt;Eclipse JNoSQL 1.0.0: Streamlining Java and NoSQL Integration With New Features and Bug Fixes by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/mastering-java-persistence-best-practices-for-clou&quot;&gt;Mastering Java Persistence: Best Practices for Cloud-Native Applications and Modernization by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/eclipse-jnosql-102-empowering-java-with-nosql-data&quot;&gt;Eclipse JNoSQL 1.0.2: Empowering Java With NoSQL Database Flexibility by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blogs.oracle.com/nosql/post/getting-started-accessing-oracle-nosql-database-using-jakarta-nosql&quot;&gt;Getting Started - Accessing Oracle NoSQL Database using Jakarta NoSQL by Dario VEGA&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/exploring-the-new-eclipse-jnosql-version-110-a-div&quot;&gt;Exploring the New Eclipse JNoSQL Version 1.1.0: A Dive Into Oracle NoSQL by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://eldermoraes.com/how-to-create-cdi-events/&quot;&gt;How to create CDI Events by Elder Moraes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blogs.oracle.com/javamagazine/post/jakarta-data-mysql&quot;&gt;Simplifying data access with MySQL and Jakarta Data by Ivar Grimstad&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/introduction-to-nosql-database-1&quot;&gt;Introduction to NoSQL Database by Rama Krishna Panguluri&lt;/a&gt;;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Books:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.com/Persistence-Best-Practices-Java-Applications/dp/1837631271/&quot;&gt;Persistence Best Practices for Java Applications by Otavio Santana and Karina Varela&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://bpbonline.com/products/java-persistence-with-nosql&quot;&gt;Java Persistence with NoSQL by Otavio Santana&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://a.co/d/4dlvHQj&quot;&gt;NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence by Pramod Sadalage and Martin Fowler&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 10 May 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/05/10/simplifying-nosql-database-integration-with-jakarta-nosql.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/05/10/simplifying-nosql-database-integration-with-jakarta-nosql
          
        </guid>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta EE 11 previews and InstantOn support for IBM MQ in 24.0.0.5-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 24.0.0.5-beta release introduces previews for several Jakarta EE 11 features, including Jakarta Contexts and Dependency Injection 4.1, Jakarta Concurrency 3.1, Jakarta Data 1.0, Jakarta Expression Language 6.0, Jakarta Pages 4.0, and Jakarta Servlet 6.1. This release also includes support for using InstantOn with IBM MQ messaging.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 24.0.0.5-beta includes the following beta Jakarta EE 11 features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#cdi&quot;&gt;Jakarta CDI 4.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#concurrent&quot;&gt;Jakarta Concurrency 3.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#data&quot;&gt;Jakarta Data 1.0 (Milestone 4)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#el&quot;&gt;Jakarta Expression Language 6.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#pages&quot;&gt;Jakarta Pages 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#servlet&quot;&gt;Jakarta Servlet 6.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In 24.0.0.5-beta, you can also &lt;a href=&quot;#mq&quot;&gt;use IBM® MQ messaging with InstantOn support&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;cdi&quot;&gt;Jakarta CDI 4.1&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;CDI allows objects to be bound to lifecycle contexts, to be injected, to be associated with interceptors and decorators, and to interact in a loosely coupled fashion by firing and observing events. Highlights of CDI 4.1 include the ability for interceptors to inspect the annotations that are used to bind them. This update also brings in new Jakarta EE 11 versions of the Jakarta Annotations and Jakarta Interceptors APIs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;retrieve-interceptor-binding-information&quot;&gt;Retrieve interceptor binding information&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Support is added to allow interceptors to retrieve and inspect the annotations that are used to bind them. Interceptors can now call &lt;a href=&quot;https://jakarta.ee/specifications/interceptors/2.2/apidocs/jakarta.interceptor/jakarta/interceptor/invocationcontext#getInterceptorBindings()&quot;&gt;InvocationContext.getInterceptorBindings()&lt;/a&gt; or one of the related methods to retrieve the annotations so that they can read values from them. This capability is particularly useful when some of the fields of an interceptor binding annotation are annotated with &lt;code&gt;@Nonbinding&lt;/code&gt;. These fields are not used to restrict which interceptor is bound and can now be read by the interceptor when the interceptor method is called.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For example, a binding annotation for a logging interceptor might look like this:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@InterceptorBinding&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;annotation&quot;&gt;@interface&lt;/span&gt; Logged {
    &lt;span class=&quot;annotation&quot;&gt;@Nonbinding&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; value();
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This annotation might be applied to a method on a managed bean like this:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Logged&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myName&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; myMethod() {
   &lt;span class=&quot;comment&quot;&gt;// ....&lt;/span&gt;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Then, an interceptor like this can read the &lt;code&gt;myName&lt;/code&gt; value from the annotation and include it in the log message:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Interceptor&lt;/span&gt;
&lt;span class=&quot;annotation&quot;&gt;@Logged&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;LoggedInterceptor&lt;/span&gt; {

    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;Logger&lt;/span&gt; LOG = &lt;span class=&quot;predefined-type&quot;&gt;Logger&lt;/span&gt;.getLogger(LoggedInterceptor.class.getName());

    &lt;span class=&quot;annotation&quot;&gt;@AroundInvoke&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;Object&lt;/span&gt; intercept(InvocationContext ctx) &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;exception&quot;&gt;Exception&lt;/span&gt; {
        Logged binding = ctx.getInterceptorBinding(Logged.class);
        LOG.info(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Method called: &lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; + binding.value());
        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; ctx.proceed();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new methods added to &lt;a href=&quot;https://jakarta.ee/specifications/interceptors/2.2/apidocs/jakarta.interceptor/jakarta/interceptor/invocationcontext&quot;&gt;InvocationContext&lt;/a&gt; make it easier to retrieve the annotations. These methods return the correct binding annotations whether they&amp;#8217;re applied to the class or the method and reflect any changes that are made to the annotations by a CDI extension.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;method-invoker-support&quot;&gt;Method invoker support&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Support is added for extensions to create method invokers, which are used to call a method on a CDI-managed bean indirectly and can support looking up the object instance and the method arguments from CDI. This feature is intended for people who want to build frameworks that build on or integrate with CDI.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on how to create and use an &lt;code&gt;Invoker&lt;/code&gt;, see the &lt;a href=&quot;https://jakartaee.github.io/cdi/2024/02/27/whats-new-in-cdi41.html&quot;&gt;CDI specification blog&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;deprecated-methods-in-beanmanager&quot;&gt;Deprecated methods in BeanManager&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;BeanManager.getELResolver&lt;/code&gt; and &lt;code&gt;BeanManager.wrapExpressionFactory&lt;/code&gt; methods are deprecated and will be removed in the next major version so that the CDI API won&amp;#8217;t need to depend on the Expression Language (EL) API. The same methods are added to &lt;code&gt;ELAwareBeanManager&lt;/code&gt;, which extends &lt;code&gt;BeanManager&lt;/code&gt; and lives in a new API jar.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These methods were mostly used by EL implementations, but any users who want to continue using these methods must switch to using &lt;code&gt;ELAwareBeanManager&lt;/code&gt; and include the new API artifact in their dependencies. For example, by adding it to their maven &lt;code&gt;pom.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.enterprise&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta.enterprise.cdi-el-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/provided&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;4.1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;admonitionblock note&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;icon&quot;&gt;
&lt;i class=&quot;fa icon-note&quot; title=&quot;Note&quot;&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class=&quot;content&quot;&gt;
in this beta, &lt;code&gt;ELAwareBeanManager&lt;/code&gt; cannot be injected directly, but a &lt;code&gt;BeanManager&lt;/code&gt; can be injected and then cast to an &lt;code&gt;ELAwareBeanManager&lt;/code&gt;. This limitation will be fixed before release.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;remove-references-to-managed-beans-specification&quot;&gt;Remove references to Managed Beans specification&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta EE 11 does not include the Managed Beans specification, which was separate from the CDI specification but did many of the same things. As a result, the associated &lt;code&gt;@ManagedBean&lt;/code&gt; annotation is removed from the Jakarta Annotations API.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;changes-to-ee-integration&quot;&gt;Changes to EE integration&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The parts of the CDI specification that define how CDI integrates with other Jakarta EE technologies moved into the Jakarta EE 11 Platform, Web Profile, and Core Profile specifications. This has no effect on users, but if you use the &lt;a href=&quot;https://jakarta.ee/specifications/cdi/4.1/jakarta-cdi-spec-4.1&quot;&gt;CDI specification&lt;/a&gt; as a documentation reference, you will find that some parts of it are now in the &lt;a href=&quot;https://jakarta.ee/specifications/platform/11/&quot;&gt;Plaform&lt;/a&gt;, &lt;a href=&quot;https://jakarta.ee/specifications/webprofile/11/&quot;&gt;Web Profile&lt;/a&gt; and &lt;a href=&quot;https://jakarta.ee/specifications/coreprofile/11/&quot;&gt;Core Profile&lt;/a&gt; specifications instead.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use the CDI 4.1 feature, add &lt;code&gt;cdi-4.1&lt;/code&gt; to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;cdi-4.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Further references:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/cdi/4.1/apidocs/&quot;&gt;CDI API&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/interceptors/2.2/apidocs/&quot;&gt;Interceptors API&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/annotations/3.0/apidocs/jakarta.annotation/module-summary.html&quot;&gt;Jakarta Annotations API&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/cdi/4.1/jakarta-cdi-spec-4.1&quot;&gt;CDI Specification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/interceptors/2.2/jakarta-interceptors-spec-2.2&quot;&gt;Interceptors Specification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/annotations/3.0/annotations-spec-3.0&quot;&gt;Jakarta Annotations Specification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;concurrent&quot;&gt;Jakarta Concurrency 3.1&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Concurrency allows applications to use concurrency while maintaining the benefits of running on a Jakarta EE runtime. Jakarta Concurrency 3.1 is the new version for the upcoming Jakarta EE 11 release, and it adds support for new features of the latest Java SE releases as well as some usability improvements.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new features in Jakarta Concurrency 3.1 are improved support for the Java Flow (Reactive Streams) APIs and the use of virtual threads in managed executors and managed thread factories. Support is also included for using &lt;code&gt;@Inject&lt;/code&gt; in place of &lt;code&gt;@Resource&lt;/code&gt; and the option to run asynchronous methods on a schedule by using the new &lt;code&gt;@Schedule&lt;/code&gt; annotation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To support the Flow APIs, &lt;code&gt;ContextService&lt;/code&gt; has two new methods, &lt;code&gt;contextualSubscriber&lt;/code&gt;, which provides context in a &lt;code&gt;Flow.Subscriber&lt;/code&gt;, and &lt;code&gt;contextualProcessor&lt;/code&gt;, which provides context in a &lt;code&gt;Flow.Processor&lt;/code&gt;. These new methods allow for context in a flow when using a &lt;code&gt;Flow.Publisher&lt;/code&gt;, which does not allow configuring a &lt;code&gt;ManagedExecutor&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;publisher.subscribe(contextService.contextualSubscriber(subscriber));&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Virtual threads are available in Jakarta Concurrency 3.1 by specifying &lt;code&gt;virtual = true&lt;/code&gt; on a &lt;code&gt;ManagedExecutorDefinition&lt;/code&gt;, &lt;code&gt;ManagedScheduledExecutorDefinition&lt;/code&gt;, or &lt;code&gt;ManagedThreadFactory&lt;/code&gt; instance. Virtual threads are a new feature of Java 21, so when running on Java 17 and ‘virtual = true’ is specified, platform threads are provided instead of virtual threads.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@ManagedExecutorDefinition&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:module/concurrent/virtual-executor&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                           virtual = &lt;span class=&quot;predefined-constant&quot;&gt;true&lt;/span&gt;)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new &lt;code&gt;@Schedule&lt;/code&gt; annotation allows asynchronous methods to run on a schedule. In this example, after the method is called, it runs asynchronously at 10 AM on every day of every month where the day of the week is a Monday, Wednesday, or Friday, according to the provided cron string.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Asynchronous&lt;/span&gt;(runAt = &lt;span class=&quot;annotation&quot;&gt;@Schedule&lt;/span&gt;(cron = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;0 10 * * MON,WED,FRI&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, zone = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;America/Chicago&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;))
&lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; runAt10MWF() {
    ...
    if (neverRunAgain)
        Asynchronous.Result.complete(&lt;span class=&quot;predefined-constant&quot;&gt;null&lt;/span&gt;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out Jakarta Concurrency 3.1, check out the &lt;a href=&quot;https://github.com/OpenLiberty/sample-concurrency&quot;&gt;sample application&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use this feature, add the following code to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
     &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;concurrent-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;data&quot;&gt;Jakarta Data (Milestone 4)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data is a new Jakarta EE specification being developed in the open that aims to standardize the popular Data Repository pattern across various providers. Open Liberty includes the Jakarta Data 1.0 Milestone 4 release, which adds the Jakarta Data Query Language (JDQL) and enhances the Static Metamodel.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty beta includes a test implementation of Jakarta Data that we are using to experiment with proposed specification features. You can try out these features and provide feedback to influence the Jakarta Data 1.0 specification as it continues to be developed. The test implementation currently works with relational databases and operates by redirecting repository operations to the built-in Jakarta Persistence provider.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data 1.0 Milestone 4 introduces Jakarta Data Query Language (JDQL), which is a subset of Jakarta Persistence Query Language (JPQL). JDQL allows basic comparison and update operations on a single entity (an entity identifier variable is not used), as well as the ability to perform deletion. Find operations in JDQL consist of SELECT, FROM, WHERE, and ORDER BY clauses, all of which are optional. The static metamodel, which allows for more type-safe usage, is simplified in Milestone 4 to allow all fields to be pre-initialized. To use these capabilities, you need an Entity and a Repository.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Start by defining an entity class that corresponds to your data. With relational databases, the entity class corresponds to a database table and the entity properties (public methods and fields of the entity class) generally correspond to the columns of the table. An entity class can be:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;annotated with &lt;code&gt;jakarta.persistence.Entity&lt;/code&gt; and related annotations from Jakarta Persistence&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;a Java class without entity annotations, in which case the primary key is inferred from an entity property that is named &lt;code&gt;id&lt;/code&gt; or ending with &lt;code&gt;Id&lt;/code&gt; and an entity property that is named &lt;code&gt;version&lt;/code&gt; designates an automatically incremented version column.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You define one or more repository interfaces for an entity, annotate those interfaces as &lt;code&gt;@Repository&lt;/code&gt;, and inject them into components by using &lt;code&gt;@Inject&lt;/code&gt;. The Jakarta Data provider supplies the implementation of the repository interface for you.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows a simple entity:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Product&lt;/span&gt; {
    &lt;span class=&quot;annotation&quot;&gt;@Id&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; id;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; isDiscounted;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; price;

    &lt;span class=&quot;annotation&quot;&gt;@Version&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; version;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows a repository that defines operations that relate to the entity. Your repository interface can inherit from built-in interfaces such as &lt;code&gt;BasicRepository&lt;/code&gt; and &lt;code&gt;CrudRepository&lt;/code&gt; to gain various general-purpose repository methods for inserting, updating, deleting, and querying for entities. You can add methods to further customize it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;(dataStore = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/jdbc/my-example-data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Products&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; BasicRepository&amp;lt;Product, &lt;span class=&quot;predefined-type&quot;&gt;Long&lt;/span&gt;&amp;gt; {
    &lt;span class=&quot;annotation&quot;&gt;@Insert&lt;/span&gt;
    Product add(Product newProduct);

    &lt;span class=&quot;comment&quot;&gt;// query-by-method name pattern:&lt;/span&gt;
    &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; findByNameIgnoreCaseContains(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; searchFor, Order&amp;lt;Product&amp;gt; orderBy);

    &lt;span class=&quot;comment&quot;&gt;// parameter based query that does not require -parameters because it explicitly specifies the name&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Find&lt;/span&gt;
    Page&amp;lt;Product&amp;gt; find(&lt;span class=&quot;annotation&quot;&gt;@By&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;isDiscounted&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; onSale,
                       PageRequest&amp;lt;Product&amp;gt; pageRequest);

    &lt;span class=&quot;comment&quot;&gt;// find query in JDQL that requires compilation with -parameters to preserve parameter names&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SELECT price FROM Product WHERE id=:productId&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    Optional&amp;lt;&lt;span class=&quot;predefined-type&quot;&gt;Float&lt;/span&gt;&amp;gt; getPrice(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId);

    &lt;span class=&quot;comment&quot;&gt;// update query in JDQL:&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;UPDATE Product SET price = price - (?2 * price), isDiscounted = true WHERE id = ?1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; discount(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; discountRate);

    &lt;span class=&quot;comment&quot;&gt;// delete query in JDQL:&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DELETE FROM Product WHERE name = ?1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; discontinue(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Observe that the repository interface includes type parameters in &lt;code&gt;PageRequest&amp;lt;Product&amp;gt;&lt;/code&gt; and &lt;code&gt;Order&amp;lt;Product&amp;gt;&lt;/code&gt;. These parameters help ensure that the page request and sort criteria are for a &lt;code&gt;Product&lt;/code&gt; entity rather than some other entity. To accomplish this, you can optionally define a static metamodel class for the entity (or various IDEs might generate one for you after the 1.0 specification is actually released). Here is one that can be used with the &lt;code&gt;Product&lt;/code&gt; entity:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@StaticMetamodel&lt;/span&gt;(Product.class)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;_Product&lt;/span&gt; {
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; ID = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; IS_DISCOUNTED = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;isDiscounted&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; NAME = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; PRICE = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; VERSION = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;final&lt;/span&gt; SortableAttribute&amp;lt;Product&amp;gt; id = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; SortableAttributeRecord(ID);
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;final&lt;/span&gt; SortableAttribute&amp;lt;Product&amp;gt; isDiscounted = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; SortableAttributeRecord(IS_DISCOUNTED);
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;TextAttribute&lt;/span&gt;&amp;lt;Product&amp;gt; name = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; TextAttributeRecord(NAME);
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;final&lt;/span&gt; SortableAttribute&amp;lt;Product&amp;gt; price = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; SortableAttributeRecord(PRICE);
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;final&lt;/span&gt; SortableAttribute&amp;lt;Product&amp;gt; version = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; SortableAttributeRecord(VERSION);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows the repository and static metamodel being used,&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@DataSourceDefinition&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/jdbc/my-example-data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      className = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;org.postgresql.xa.PGXADataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      databaseName = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ExampleDB&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      serverName = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      portNumber = &lt;span class=&quot;integer&quot;&gt;5432&lt;/span&gt;,
                      user = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${example.database.user}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      password = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${example.database.password}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;MyServlet&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; HttpServlet {
    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    Products products;

    &lt;span class=&quot;directive&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doGet(HttpServletRequest req, HttpServletResponse resp)
            &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt; {
        &lt;span class=&quot;comment&quot;&gt;// Insert:&lt;/span&gt;
        Product prod = ...
        prod = products.add(prod);

        &lt;span class=&quot;comment&quot;&gt;// Find the price of one product:&lt;/span&gt;
        price = products.getPrice(productId).orElseThrow();

        &lt;span class=&quot;comment&quot;&gt;// Find all, sorted:&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; all = products.findByNameIgnoreCaseContains(searchFor, Order.by(
                                     _Product.price.desc(),
                                     _Product.name.asc(),
                                     _Product.id.asc()));

        &lt;span class=&quot;comment&quot;&gt;// Find the first 20 most expensive products on sale:&lt;/span&gt;
        Page&amp;lt;Product&amp;gt; page1 = products.find(onSale, Order.by(_Product.price.desc(),
                                                             _Product.name.asc(),
                                                             _Product.id.asc())
                                                         .pageSize(&lt;span class=&quot;integer&quot;&gt;20&lt;/span&gt;));
        ...
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use this feature, add the following code to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
     &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;data-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;el&quot;&gt;Jakarta Expression Language 6.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;expressionLanguage-6.0&lt;/code&gt; feature is an implementation of the Expression Language 6.0 Specification for Jakarta EE 11. The Expression Language 6.0 specification includes a number of new features and specification clarifications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Support for &lt;code&gt;java.util.Optional&lt;/code&gt; (not enabled by default) and &lt;code&gt;java.lang.Record&lt;/code&gt; is added. Another new feature is the addition of the length property for Arrays. For more information and the change history of the specification between Expression Language 5.0 and Expression Language 6.0, see &lt;a href=&quot;https://jakarta.ee/specifications/expression-language/6.0/jakarta-expression-language-spec-6.0#changes-between-6-0-and-5-0&quot;&gt;Changes between 6.0 and 5.0&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use this feature, add the following code to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
     &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;expressionLanguage-6.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, see the &lt;a href=&quot;https://jakarta.ee/specifications/expression-language/6.0&quot;&gt;Jakarta Expression Language 6.0 specification and Javadocs&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;pages&quot;&gt;Jakarta Pages 4.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The pages-4.0 feature is an implementation of the Pages 4.0 Specification for Jakarta EE 11. The Pages 4.0 specification includes a couple of new features and the removal of previously deprecated functions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;jakarta.servlet.jsp.ErrorData&lt;/code&gt; class was updated to add support for the new &lt;code&gt;jakarta.servlet.error.method&lt;/code&gt; and &lt;code&gt;jakarta.servlet.error.query_string&lt;/code&gt; attributes.  The following deprecated classes, methods, and actions were removed:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;jakarta.servlet.jsp.JspException.getRootCause()&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Classes in &lt;code&gt;jakarta.servlet.jsp.el&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;isThreadSafe&lt;/code&gt; page directive&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;jsp:plugin&lt;/code&gt; action and related actions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;jakarta.servet.jsp.tagext.BodyTag.EVAL_BODY_TAG&lt;/code&gt; constant&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Any methods that implemented &lt;code&gt;jakarta.el.ELResolver.getFeatureDescriptors()&lt;/code&gt; were removed as the &lt;code&gt;getFeatureDescriptors()&lt;/code&gt; method was removed in Expression Language 6.0.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information and the change history of the specification between Pages 3.1 and Pages 4.0, see &lt;a href=&quot;https://github.com/jakartaee/pages/blob/master/spec/src/main/asciidoc/ServerPages.adoc#c1-changes-between-jsp-40-and-jsp-31&quot;&gt;Changes between 3.1 and 4.0&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use this feature, add the following code to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
     &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;pages-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, see the &lt;a href=&quot;https://jakarta.ee/specifications/pages/4.0/&quot;&gt;Jakarta Pages 4.0 Specification&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;servlet&quot;&gt;Jakarta Servlet 6.1&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty &lt;code&gt;servlet-6.1&lt;/code&gt; feature is an implementation of the Servlet 6.1 specification for Jakarta EE 11 . It includes a number of new features, specification clarifications, and deprecates some existing servlet features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Before Servlet 6.1, there was no way for an application to control the response data when doing a send redirect, as well as the response status code, which was always set to 302. An application could not easily retrieve the initial request&amp;#8217;s query string or request HTTP method during an error handling dispatch. It also could not set the character encoding for a request or a response using the &lt;code&gt;java.nio.charset.Charset&lt;/code&gt;; the only available option was using a String. During the read or write of servlet data, the &lt;code&gt;jakarta.servlet.ServletInputStream&lt;/code&gt; or &lt;code&gt;jakarta.servlet.ServletOutputStream&lt;/code&gt; only supports a byte array.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Servlet 6.1 provides servlet APIs that allow the send redirect to include an optional response data or set a compliant status code, instead of the default 302. Additional request attributes are available during the error handling process to easily retrieve the initial request’s query string or method. Furthermore, international applications can now set the character encoding using a Charset instead of a String.  The &lt;code&gt;ServletInputStream&lt;/code&gt; or &lt;code&gt;ServletOutputStream&lt;/code&gt; can use &lt;code&gt;java.nio.ByteBuffer&lt;/code&gt; to read or write the data.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Several clarifications are added to the behavior of the existing servlet APIs. For example, the &lt;code&gt;getParameter&lt;/code&gt; family from the &lt;code&gt;jakarta.servlet.ServletRequest&lt;/code&gt; is now throwing the runtime &lt;code&gt;java.lang.IllegalStateException&lt;/code&gt; when an error occurs during the parsing of the request’s parameters.  While processing an error-handling dispatch, the HTTP GET method is always used instead of the original request’s HTTP method.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use this feature, add the following code to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-6.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, see the &lt;a href=&quot;https://jakarta.ee/specifications/servlet/6.1/&quot;&gt;Jakarta Servlet 6.1 specification&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;mq&quot;&gt;Use InstantOn with IBM® MQ in Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 24.0.0.5-beta release introduces InstantOn feature support for &lt;a href=&quot;/docs/latest/reference/feature/messaging-3.0.html&quot;&gt;Jakarta Messaging&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/connectors-2.1.html&quot;&gt;Jakarta Connectors&lt;/a&gt;, and &lt;a href=&quot;/docs/latest/reference/feature/mdb-4.0.html&quot;&gt;Jakarta Enterprise Beans Message-Driven Beans (MDB)&lt;/a&gt;. InstantOn now provides blazing fast startup times for applications that use resource adapters to access external EIS resources, including applications that use the Jakarta Messaging API to access external messaging systems, like IBM® MQ. These &quot;messaging client&quot; applications can also manage message delivery to endpoints with message-driven bean listeners.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Here&amp;#8217;s a server configuration snippet to deploy applications that use the JakartaEE-10 Messaging API and require the &lt;a href=&quot;https://repo1.maven.org/maven2/com/ibm/mq/wmq.jakarta.jmsra/9.3.5.0/wmq.jakarta.jmsra-9.3.5.0.rar&quot;&gt;IBM® MQ resource adapter&lt;/a&gt; to access external messaging resources. This configuration automatically includes the &lt;code&gt;connectors-2.1&lt;/code&gt; feature, which supports the resource adapter configuration element.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;messaging-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mdb-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-6.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;resourceAdapter&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mqJms&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;location&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/wmq.jakarta.jmsra-9.3.5.0.rar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can use the &lt;a href=&quot;https://developer.ibm.com/tutorials/mq-connect-app-queue-manager-containers/&quot;&gt;MQ in Container image&lt;/a&gt; to stand up an MQ server that provides the following resources: queue manager &lt;code&gt;QM1&lt;/code&gt;, queue &lt;code&gt;DEV.QUEUE.1&lt;/code&gt;, channel &lt;code&gt;DEV.APP.SVRCONN&lt;/code&gt;, and listener &lt;code&gt;SYSTEM.LISTENER.TCP.1&lt;/code&gt; on port &lt;code&gt;1414&lt;/code&gt;.  These resources can support a simple point-to-point messaging scenario and are named within the messaging feature configuration elements shown in the following example.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;InstantOn can dynamically update the messaging and connectors configuration elements to enable connections to external resources that are made available in any environment where a server is restored from checkpoint.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the following example, the messaging configuration elements use Liberty variables named &lt;code&gt;MQ_HOSTNAME&lt;/code&gt; and &lt;code&gt;MQ_PORT&lt;/code&gt; to specify the hostname and IP port of the system that the MQ queue manager runs on. You can define these variables in the &lt;code&gt;server.env&lt;/code&gt; file of a checkpointed server. When the server is restored, the queue connection factory and message endpoint activation configurations update to the environment-specific hostname and port values for the MQ queue manager.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;   &lt;span class=&quot;tag&quot;&gt;&amp;lt;jmsQueue&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jms/queue1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;jndiName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jms/queue1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties.mqJms&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;baseQueueName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DEV.QUEUE.1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;baseQueueManagerName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;QM1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;/jmsQueue&amp;gt;&lt;/span&gt;

   &lt;span class=&quot;tag&quot;&gt;&amp;lt;variable&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;MQ_PORT&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;1414&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;variable&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;MQ_HOSTNAME&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

   &lt;span class=&quot;tag&quot;&gt;&amp;lt;jmsQueueConnectionFactory&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;jndiName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jms/qcf1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;connectionManagerRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ConMgr7&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties.mqJms&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;hostName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${MQ_HOSTNAME}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;port&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${MQ_PORT}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;attribute-name&quot;&gt;channel&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DEV.APP.SVRCONN&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;queueManager&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;QM1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;/jmsQueueConnectionFactory&amp;gt;&lt;/span&gt;

   &lt;span class=&quot;tag&quot;&gt;&amp;lt;jmsConnectionFactory&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;jndiName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jms/cf1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;connectionManagerRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ConMgr1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties.mqJms&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;hostName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${MQ_HOSTNAME}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;port&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${MQ_PORT}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;attribute-name&quot;&gt;channel&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DEV.APP.SVRCONN&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;queueManager&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;QM1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;/jmsConnectionFactory&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;connectionManager&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ConMgr1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;maxPoolSize&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

   &lt;span class=&quot;tag&quot;&gt;&amp;lt;jmsActivationSpec&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myapp/mymdb/FVTMessageDrivenBean&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties.mqJms&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;destinationRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jms/queue1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;destinationType&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jakarta.jms.Queue&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;attribute-name&quot;&gt;transportType&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CLIENT&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;hostName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${MQ_HOSTNAME}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;port&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${MQ_PORT}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;attribute-name&quot;&gt;channel&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DEV.APP.SVRCONN&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;queueManager&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;QM1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;/jmsActivationSpec&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enjoy the time savings and stay tuned for upcoming announcements regarding InstantOn support for Jakarta features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 22, Java SE 21, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.10.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;24.0.0.5-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try. For example, the following block adds dependencies for two example beta APIs:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.example.spec&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;exampleApi&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;7.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;example.platform&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;example.example-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;11.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.8.2'
    }
}
apply plugin: 'liberty'
dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[24.0.0.5-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;IntelliJ IDEA&lt;/a&gt;, &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Visual Studio Code&lt;/a&gt; or &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Eclipse IDE&lt;/a&gt;, you can also take advantage of our open source &lt;a href=&quot;/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty developer tools&lt;/a&gt; to enable effective development, testing, debugging, and application management all from within your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 07 May 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/05/07/24.0.0.5-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/05/07/24.0.0.5-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Java SE 22 support in 24.0.0.4</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 24.0.0.4 release introduces support for Java SE 22 and includes CVE fixes. We&amp;#8217;ve also updated several Open Liberty guides to use MicroProfile Reactive Messaging 3.0, MicroProfile 6.1, and Jakarta EE 10.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 24.0.0.4:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#java_22&quot;&gt;Support for Java 22 in Open Liberty&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#guides&quot;&gt;8 guides are updated to use MicroProfile Reactive Messaging 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#CVEs&quot;&gt;Security Vulnerability (CVE) Fixes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out &lt;a href=&quot;/blog/?search=release&amp;amp;search!=beta&quot;&gt;previous Open Liberty GA release blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Develop and run your apps using 24.0.0.4&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, include the following in your &lt;code&gt;pom.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.10.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;, include the following in your &lt;code&gt;build.gradle&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.8.2'
    }
}
apply plugin: 'liberty'&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/start/&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;IntelliJ IDEA&lt;/a&gt;, &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Visual Studio Code&lt;/a&gt; or &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Eclipse IDE&lt;/a&gt;, you can also take advantage of our open source &lt;a href=&quot;https://openliberty.io/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty developer tools&lt;/a&gt; to enable effective development, testing, debugging and application management all from within your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://stackoverflow.com/tags/open-liberty&quot;&gt;&lt;img src=&quot;/img/blog/blog_btn_stack.svg&quot; alt=&quot;Ask a question on Stack Overflow&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;java_22&quot;&gt;Support for Java SE 22 in Open Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Java 22 is the latest release of Java SE, released in March 2024. It contains new features and enhancements over previous versions of Java. However, Java 22 is not a long-term support (LTS) release and support for it will be dropped when the next version of Java is supported. It offers some new functions and changes that you are going to want to check out for yourself.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out the following &lt;a href=&quot;https://openjdk.org/projects/jdk/22/&quot;&gt;feature changes in Java 22&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;423: &lt;a href=&quot;https://openjdk.org/jeps/423&quot;&gt;Region Pinning for G1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;447: &lt;a href=&quot;https://openjdk.org/jeps/447&quot;&gt;Statements before super(&amp;#8230;&amp;#8203;) (Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;454: &lt;a href=&quot;https://openjdk.org/jeps/454&quot;&gt;Foreign Function &amp;amp; Memory API&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;456: &lt;a href=&quot;https://openjdk.org/jeps/456&quot;&gt;Unnamed Variables &amp;amp; Patterns&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;457: &lt;a href=&quot;https://openjdk.org/jeps/457&quot;&gt;Class-File API (Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;458: &lt;a href=&quot;https://openjdk.org/jeps/458&quot;&gt;Launch Multi-File Source-Code Programs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;459: &lt;a href=&quot;https://openjdk.org/jeps/459&quot;&gt;String Templates (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;460: &lt;a href=&quot;https://openjdk.org/jeps/460&quot;&gt;Vector API (Seventh Incubator)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;461: &lt;a href=&quot;https://openjdk.org/jeps/461&quot;&gt;Stream Gatherers (Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;462: &lt;a href=&quot;https://openjdk.org/jeps/462&quot;&gt;Structured Concurrency (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;463: &lt;a href=&quot;https://openjdk.org/jeps/463&quot;&gt;Implicitly Declared Classes and Instance Main Methods (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;464: &lt;a href=&quot;https://openjdk.org/jeps/464&quot;&gt;Scoped Values (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Take advantage of the new changes in Java 22 in Open Liberty now and get more time to review your applications, microservices, and runtime environments on your favorite server runtime!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use Java 22 with Open Liberty, just &lt;a href=&quot;https://adoptium.net/temurin/releases/?version=22&quot;&gt;download the latest release of Java 22&lt;/a&gt; and install the &lt;a href=&quot;/downloads/#runtime_releases&quot;&gt;24.0.0.4&lt;/a&gt; version of Open Liberty. Then, edit your Liberty &lt;a href=&quot;/docs/latest/reference/config/server-configuration-overview.html#server-env&quot;&gt;server.env file&lt;/a&gt; to point the &lt;code&gt;JAVA_HOME&lt;/code&gt; environment variable to your Java 22 installation and start testing today.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about Java 22, see the following resources:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jdk.java.net/22/release-notes&quot;&gt;Release notes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/22/docs/api/index.html&quot;&gt;Javadocs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/22/migrate/index.html&quot;&gt;Migration guide&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://adoptium.net/temurin/releases/?version=22&quot;&gt;Download page&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;guides&quot;&gt;8 guides are updated to use MicroProfile Reactive Messaging 3.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following 8 guides are updated to use the MicroProfile Reactive Messaging 3.0, MicroProfile 6.1 and Jakarta EE 10 specifications:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-reactive-messaging.html&quot;&gt;Creating reactive Java microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-reactive-messaging-acknowledgment.html&quot;&gt;Acknowledging messages using MicroProfile Reactive Messaging&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-reactive-messaging-rest-integration.html&quot;&gt;Integrating RESTful services with a reactive system&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-rest-client-async.html&quot;&gt;Consuming RESTful services asynchronously with template interfaces&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/reactive-messaging-sse.html&quot;&gt;Streaming updates to a client using Server-Sent Events&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/reactive-rest-client.html&quot;&gt;Consuming RESTful services using the reactive JAX-RS client&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/reactive-service-testing.html&quot;&gt;Testing reactive Java microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/cloud-openshift-operator.html&quot;&gt;Deploying microservices to OpenShift 4 using Kubernetes Operators&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Also, the integration tests in these guides are updated to use &lt;a href=&quot;https://testcontainers.com&quot;&gt;Testcontainers&lt;/a&gt;. To learn how to test reactive Java microservices in true-to-production environments using Testcontainers, try out the &lt;a href=&quot;https://openliberty.io/guides/reactive-service-testing.html&quot;&gt;Testing reactive Java microservices&lt;/a&gt; guide.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;CVEs&quot;&gt;Security vulnerability (CVE) fixes in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 16.6666%;&quot;&gt;
&lt;col style=&quot;width: 16.6666%;&quot;&gt;
&lt;col style=&quot;width: 16.6666%;&quot;&gt;
&lt;col style=&quot;width: 16.6666%;&quot;&gt;
&lt;col style=&quot;width: 16.6666%;&quot;&gt;
&lt;col style=&quot;width: 16.667%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;CVE&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;CVSS score by X-Force®&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Vulnerability assessment&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Versions affected&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Version fixed&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-51775&quot;&gt;CVE-2023-51775&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;7.5&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Denial of service&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;21.0.0.3 - 24.0.0.3&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;24.0.0.4&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Affects the &lt;a href=&quot;/docs/latest/reference/feature/openidConnectClient-1.0.html&quot;&gt;openidConnectClient-1.0&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/socialLogin-1.0.html&quot;&gt;socialLogin-1.0&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/mpJwt-1.2.html&quot;&gt;mpJwt-1.2&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/mpJwt-2.0.html&quot;&gt;mpJwt-2.0&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/mpJwt-2.1.html&quot;&gt;mpJwt-2.1&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/jwt-1.0.html&quot;&gt;jwt-1.0&lt;/a&gt; features&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27270&quot;&gt;CVE-2024-27270&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;4.7&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Cross-site scripting&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;23.0.0.3 - 24.0.0.3&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;24.0.0.4&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Affects the &lt;a href=&quot;/docs/latest/reference/feature/servlet-6.0.html&quot;&gt;servlet-6.0&lt;/a&gt; feature&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For a list of past security vulnerability fixes, reference the &lt;a href=&quot;/docs/latest/security-vulnerabilities.html&quot;&gt;Security vulnerability (CVE) list&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-open-liberty-24-0-0-4-now&quot;&gt;Get Open Liberty 24.0.0.4 now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Available through &lt;a href=&quot;#run&quot;&gt;Maven, Gradle, Docker, and as a downloadable archive&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 23 Apr 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/04/23/24.0.0.4.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/04/23/24.0.0.4
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>java-se</category>
        
        <category>release</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Support for Java 22 and an updated preview of Jakarta Data in 24.0.0.4-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 24.0.0.4-beta release introduces support for Java SE 22 and updates for the Jakarta Data 1.0 preview, including improvements for type safety and a new &lt;code&gt;@Find&lt;/code&gt; annotation to define repository find methods.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 24.0.0.4-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#java_22&quot;&gt;Run your Open Liberty apps with Java 22&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta_data&quot;&gt;Try out new functions for Jakarta Data 1.0 at milestone 3&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;java_22&quot;&gt;Run your Open Liberty apps with Java 22&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Java 22 is the latest release of Java, released in March 2024. It contains new features and enhancements over previous versions of Java. However, Java 22 is not a long-term support (LTS) release and support for it will be dropped when the next version of Java is supported. It offers some new functions and changes that you are going to want to check out for yourself.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out the following &lt;a href=&quot;https://openjdk.org/projects/jdk/22/&quot;&gt;feature changes in Java 22&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;423: &lt;a href=&quot;https://openjdk.org/jeps/423&quot;&gt;Region Pinning for G1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;447: &lt;a href=&quot;https://openjdk.org/jeps/447&quot;&gt;Statements before super(&amp;#8230;&amp;#8203;) (Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;454: &lt;a href=&quot;https://openjdk.org/jeps/454&quot;&gt;Foreign Function &amp;amp; Memory API&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;456: &lt;a href=&quot;https://openjdk.org/jeps/456&quot;&gt;Unnamed Variables &amp;amp; Patterns&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;457: &lt;a href=&quot;https://openjdk.org/jeps/457&quot;&gt;Class-File API (Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;458: &lt;a href=&quot;https://openjdk.org/jeps/458&quot;&gt;Launch Multi-File Source-Code Programs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;459: &lt;a href=&quot;https://openjdk.org/jeps/459&quot;&gt;String Templates (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;460: &lt;a href=&quot;https://openjdk.org/jeps/460&quot;&gt;Vector API (Seventh Incubator)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;461: &lt;a href=&quot;https://openjdk.org/jeps/461&quot;&gt;Stream Gatherers (Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;462: &lt;a href=&quot;https://openjdk.org/jeps/462&quot;&gt;Structured Concurrency (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;463: &lt;a href=&quot;https://openjdk.org/jeps/463&quot;&gt;Implicitly Declared Classes and Instance Main Methods (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;464: &lt;a href=&quot;https://openjdk.org/jeps/464&quot;&gt;Scoped Values (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Take advantage of the new changes in Java 22 in Open Liberty now and get more time to review your applications, microservices, and runtime environments on your favorite server runtime!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use Java 22 with Open Liberty, just &lt;a href=&quot;https://adoptium.net/temurin/releases/?version=22&quot;&gt;download the latest release of Java 22&lt;/a&gt; and install the &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;24.0.0.4-beta&lt;/a&gt; version of Open Liberty. Then, edit your Liberty &lt;a href=&quot;/docs/latest/reference/config/server-configuration-overview.html#server-env&quot;&gt;server.env file&lt;/a&gt; to point the &lt;code&gt;JAVA_HOME&lt;/code&gt; environment variable to your Java 22 installation and start testing today. The 24.0.0.4-beta release introduces beta support for Java 22. As we work toward full Java 22 support, please bear with any of our implementations of these functions that might not be ready yet.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about Java 22, see the following resources:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jdk.java.net/22/release-notes&quot;&gt;Release notes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/22/docs/api/index.html&quot;&gt;Javadocs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/22/migrate/index.html&quot;&gt;Migration guide&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://adoptium.net/temurin/releases/?version=22&quot;&gt;Download page&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta_data&quot;&gt;Try out new functions for Jakarta Data 1.0 at milestone 3&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data is a new Jakarta EE open source specification that standardizes the popular Data Repository pattern across various providers. Open Liberty 24.0.0.4-beta includes the Jakarta Data 1.0 Milestone 3 release, which introduces the static metamodel and the ability to annotatively compose &lt;code&gt;Find&lt;/code&gt; methods.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty beta includes a test implementation of Jakarta Data that we are using to experiment with proposed specification features. You can try out these features and provide feedback to influence the Jakarta Data 1.0 specification as it continues to be developed. The test implementation currently works with relational databases and operates by redirecting repository operations to the built-in Jakarta Persistence provider.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data 1.0 milestone 3 introduces the concept of a static metamodel, which allows for more type-safe usage, and the ability to define repository find methods with the &lt;code&gt;@Find&lt;/code&gt; annotation. To use these capabilities, you need an Entity and a Repository.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Start by defining an entity class that corresponds to your data. With relational databases, the entity class corresponds to a database table and the entity properties (public methods and fields of the entity class) generally correspond to the columns of the table. An entity class can be:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;annotated with &lt;code&gt;jakarta.persistence.Entity&lt;/code&gt; and related annotations from Jakarta Persistence.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;a Java class without entity annotations, in which case the primary key is inferred from an entity property that is named &lt;code&gt;id&lt;/code&gt; or ending with &lt;code&gt;Id&lt;/code&gt; and an entity property that is named &lt;code&gt;version&lt;/code&gt; designates an automatically incremented version column.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You define one or more repository interfaces for an entity, annotate those interfaces as &lt;code&gt;@Repository&lt;/code&gt;, and inject them into components by using &lt;code&gt;@Inject&lt;/code&gt;. The Jakarta Data provider supplies the implementation of the repository interface for you.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows a simple entity:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Product&lt;/span&gt; {
    &lt;span class=&quot;annotation&quot;&gt;@Id&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; id;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; isDiscounted;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; price;

    &lt;span class=&quot;annotation&quot;&gt;@Version&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; version;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows a repository that defines operations that relate to the entity. Your repository interface can inherit from built-in interfaces such as &lt;code&gt;BasicRepository&lt;/code&gt; and &lt;code&gt;CrudRepository&lt;/code&gt; to gain various general-purpose repository methods for inserting, updating, deleting, and querying for entities. However, in this case, we define all of the methods ourselves by using the new life-cycle annotations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;(dataStore = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/jdbc/my-example-data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Products&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; BasicRepository&amp;lt;Product, &lt;span class=&quot;predefined-type&quot;&gt;Long&lt;/span&gt;&amp;gt; {
    &lt;span class=&quot;annotation&quot;&gt;@Insert&lt;/span&gt;
    Product add(Product newProduct);

    &lt;span class=&quot;comment&quot;&gt;// parameter based query that requires compilation with -parameters to preserve parameter names&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Find&lt;/span&gt;
    Optional&amp;lt;Product&amp;gt; find(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; id);

    &lt;span class=&quot;comment&quot;&gt;// parameter based query that does not require -parameters because it explicitly specifies the name&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Find&lt;/span&gt;
    Page&amp;lt;Product&amp;gt; find(&lt;span class=&quot;annotation&quot;&gt;@By&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;isDiscounted&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; onSale,
                       PageRequest&amp;lt;Product&amp;gt; pageRequest);

    &lt;span class=&quot;comment&quot;&gt;// query-by-method name pattern:&lt;/span&gt;
    &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; findByNameIgnoreCaseContains(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; searchFor, Order&amp;lt;Product&amp;gt; orderBy);

    &lt;span class=&quot;comment&quot;&gt;// query via JPQL:&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;UPDATE Product o SET o.price = o.price - (?2 * o.price), o.isDiscounted = true WHERE o.id = ?1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; discount(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; discountRate);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Observe that the repository interface includes type parameters in &lt;code&gt;PageRequest&amp;lt;Product&amp;gt;&lt;/code&gt; and &lt;code&gt;Order&amp;lt;Product&amp;gt;&lt;/code&gt;.  These parameters help ensure that the page request and sort criteria are for a &lt;code&gt;Product&lt;/code&gt; entity, rather than some other entity.  To enable this function, you can optionally define a static metamodel class for the entity (or various IDEs might generate one for you after the 1.0 specification is released). The following example shows that you can use with the &lt;code&gt;Product&lt;/code&gt; entity,&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@StaticMetamodel&lt;/span&gt;(Product.class)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;_Product&lt;/span&gt; {
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;volatile&lt;/span&gt; SortableAttribute&amp;lt;Product&amp;gt; id;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;volatile&lt;/span&gt; SortableAttribute&amp;lt;Product&amp;gt; isDiscounted;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;volatile&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;TextAttribute&lt;/span&gt;&amp;lt;Product&amp;gt; name;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;volatile&lt;/span&gt; SortableAttribute&amp;lt;Product&amp;gt; price;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;volatile&lt;/span&gt; SortableAttribute&amp;lt;Product&amp;gt; version;

    &lt;span class=&quot;comment&quot;&gt;// The static metamodel can also have String constants for attribute names,&lt;/span&gt;
    &lt;span class=&quot;comment&quot;&gt;// but those are omitted from this example&lt;/span&gt;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows the repository and static metamodel being used:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@DataSourceDefinition&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/jdbc/my-example-data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      className = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;org.postgresql.xa.PGXADataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      databaseName = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ExampleDB&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      serverName = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      portNumber = &lt;span class=&quot;integer&quot;&gt;5432&lt;/span&gt;,
                      user = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${example.database.user}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      password = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${example.database.password}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;MyServlet&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; HttpServlet {
    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    Products products;

    &lt;span class=&quot;directive&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doGet(HttpServletRequest req, HttpServletResponse resp)
            &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt; {
        &lt;span class=&quot;comment&quot;&gt;// Insert:&lt;/span&gt;
        Product prod = ...
        prod = products.add(prod);

        &lt;span class=&quot;comment&quot;&gt;// Find one entity:&lt;/span&gt;
        prod = products.find(productId).orElseThrow();

        &lt;span class=&quot;comment&quot;&gt;// Find all, sorted:&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; all = products.findByNameIgnoreCaseContains(searchFor, Order.by(
                                     _Product.price.desc(),
                                     _Product.name.asc(),
                                     _Product.id.asc()));

        &lt;span class=&quot;comment&quot;&gt;// Find the first 20 most expensive products on sale:&lt;/span&gt;
        Page&amp;lt;Product&amp;gt; page1 = products.find(onSale, Order.by(_Product.price.desc(),
                                                             _Product.name.asc(),
                                                             _Product.id.asc())
                                                         .pageSize(&lt;span class=&quot;integer&quot;&gt;20&lt;/span&gt;));
        ...
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the new beta feature in your app, add it to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;data-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    ...
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;
  ...
&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 22, Java SE 21, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package by using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.10.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;24.0.0.4-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try. For example, the following block adds dependencies for two example beta APIs:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.example.spec&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;exampleApi&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;7.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;example.platform&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;example.example-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;11.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.8.2'
    }
}
apply plugin: 'liberty'
dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[24.0.0.4-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;IntelliJ IDEA&lt;/a&gt;, &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Visual Studio Code&lt;/a&gt; or &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Eclipse IDE&lt;/a&gt;, you can also take advantage of our open source &lt;a href=&quot;/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty developer tools&lt;/a&gt; to enable effective development, testing, debugging, and application management all from within your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 09 Apr 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/04/09/24.0.0.4-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/04/09/24.0.0.4-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>java-se</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Run AI-enabled Jakarta EE and MicroProfile applications on Open Liberty</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Artificial Intelligence (AI) is an exciting and disruptive field that is already transforming businesses, and even entire industries, by enabling automation, improving decision-making and unlocking new insights from data. With the rise in large language models (LLMs) such as ChatGPT, there is a significant shift in the performance of AI and its potential to drive enterprise value. So, how will this impact on software development and the creation of cloud-native Java applications for enterprises?&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this post, we&amp;#8217;ll explore what LLMs are and how to use them in Java applications. We&amp;#8217;ll also get started using them in an example Jakarta EE/MicroProfile app.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#what_Are_LLMs&quot;&gt;Find out what LLMs are&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#Java_LLMs&quot;&gt;Explore app frameworks that simplify the use of LLMs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#using_Langchain4j&quot;&gt;Discover how to use LangChain in Java applications&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#tryout&quot;&gt;Try out the jakartaee-microprofile-example application&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#how_app_work&quot;&gt;Learn how this sample application works&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;what_Are_LLMs&quot;&gt;What are LLMs?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A language model is a model of natural language based on probabilities. They are able to generate probabilities of a series of words together. &lt;a href=&quot;https://www.ibm.com/topics/large-language-models&quot;&gt;Large language models (LLMs)&lt;/a&gt; are simply language models that are categorized by their large size. They are trained on immense amounts of data, possibly billions of parameters, by using self-supervised and semi-supervised learning techniques. This training enables them to generate natural language and other types of content to perform a wide range of tasks.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://www.youtube.com/watch?v=5sLYAQS9sWQ&quot;&gt;introductory video&lt;/a&gt; for more information on LLMs, including what they are, how they work, and their business applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can find LLMs in the service offerings of almost all of the major cloud service providers. For example, IBM offers models through its &lt;a href=&quot;https://www.ibm.com/watsonx&quot;&gt;watsonx&lt;/a&gt; services, &lt;a href=&quot;https://azure.microsoft.com/en-us/solutions/ai&quot;&gt;Microsoft Azure&lt;/a&gt; offers LLMs like Llama 2 and OpenAI GPT-4, and  &lt;a href=&quot;https://aws.amazon.com/bedrock/&quot;&gt;Amazon Bedrock&lt;/a&gt; offers models from a range of AI companies.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;Java_LLMs&quot;&gt;How can we take advantage of LLMs in Java applications?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Integrating AI/LLM capabilities into an application can be challenging. The open source LangChain framework was developed in 2022 to help streamline the process of creating generative AI apps.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;LangChain provides tools and abstractions to improve the customization, accuracy, and relevancy of the information the models generate. For example, developers can use LangChain components to build new prompt chains or customize existing templates. LangChain also includes components that allow LLMs to access new data sets without retraining and organizes the large quantities of data these models require so that they can be accessed with ease.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Although LangChain is primarily available in Python and JavaScript/TypeScript versions, options are available to use LangChain in Java applications through community projects like &lt;a href=&quot;https://github.com/langchain4j/langchain4j&quot;&gt;LangChain4j&lt;/a&gt;. LangChain4j APIs can help integrate LLMs into your Java application for different AI platforms, such as OpenAI and Hugging Face.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/langchain4j.png&quot; alt=&quot;langchain4j GitHub README image&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;using_Langchain4j&quot;&gt;How to use LangChain4j in a Jakarta EE and MicroProfile application&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Langchain4j has a useful open source &lt;a href=&quot;https://github.com/langchain4j/langchain4j-examples&quot;&gt;langchain4j-examples&lt;/a&gt; GitHub repository where it stores example applications. However, we could not find any examples showcasing how you could experience these AI technologies in a Jakarta EE or MicroProfile based application. So, we decided to build one ourselves called &lt;code&gt;jakartaee-microprofile-example&lt;/code&gt;, which can now be found in this &lt;a href=&quot;https://github.com/langchain4j/langchain4j-examples/tree/main/jakartaee-microprofile-example&quot;&gt;langchain4j-examples&lt;/a&gt; GitHub repository. This demo application highlights how to use LangChain4j APIs in an application by using Jakarta EE and MicroProfile on Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;tryout&quot;&gt;Try out the jakartaee-microprofile-example application&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To see how you can apply LangChain4j to your own Jakarta EE and MicroProfile applications, check out this example project for yourself.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;pre-reqs&quot;&gt;Prerequisites&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Before you clone the application to your machine, install JDK 17, and ensure that your &lt;code&gt;JAVA_HOME&lt;/code&gt; environment variable is set.  You can use the &lt;a href=&quot;https://developer.ibm.com/languages/java/semeru-runtimes/downloads&quot;&gt;IBM Semeru Runtime&lt;/a&gt; as your chosen Java runtime. This runtime offers performance benefits from deep technology investment in projects such as Eclipse OpenJ9 and is available across a wide variety of hardware and software platforms. To find out more about IBM Semeru Runtime, see &lt;a href=&quot;https://openliberty.io/blog/2022/08/19/open-liberty-semeru-performance.html&quot;&gt;Open Liberty and Semeru Runtimes, cloud-native performance that matters&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The application uses Hugging Face. You need to get a Hugging Face API Key:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Sign up and log in to &lt;a href=&quot;https://huggingface.co&quot; class=&quot;bare&quot;&gt;https://huggingface.co&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go to the &lt;a href=&quot;https://huggingface.co/settings/tokens&quot;&gt;Access Tokens page&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create an access token with &lt;code&gt;read&lt;/code&gt; role&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To access the repository remotely, install &lt;a href=&quot;https://git-scm.com/book/en/v2/Getting-Started-Installing-Git&quot;&gt;Git&lt;/a&gt; if you haven&amp;#8217;t already. You can clone the &lt;code&gt;langchain4j-examples&lt;/code&gt; GitHub repository to your local machine by running the following command:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;git clone https://github.com/langchain4j/langchain4j-examples.git&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;env_setup&quot;&gt;Environment setup&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To run the application, navigate to the &lt;code&gt;jakartaee-microprofile-example&lt;/code&gt; directory:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;cd langchain4j-examples/jakartaee-microprofile-example&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Set the following environment variables:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;export JAVA_HOME=&amp;lt;your Java 17 home path&amp;gt;
export HUGGING_FACE_API_KEY=&amp;lt;your Hugging Face read token&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;start_app&quot;&gt;Start the application&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To start the application, use the provided Maven wrapper to run Open Liberty in &lt;a href=&quot;https://openliberty.io/docs/latest/development-mode.html&quot;&gt;dev mode&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;./mvnw liberty:dev&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After you see the following message, the application is ready:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;************************************************************************
*    Liberty is running in dev mode.
*        Automatic generation of features: [ Off ]
*        h - see the help menu for available actions, type 'h' and press Enter.
*        q - stop the server and quit dev mode, press Ctrl-C or type 'q' and press Enter.
*
*    Liberty server port information:
*        Liberty server HTTP port: [ 9080 ]
*        Liberty server HTTPS port: [ 9443 ]
*        Liberty debug port: [ 7777 ]
************************************************************************&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To ensure that the application started successfully, you can run the tests by pressing the &lt;code&gt;enter/return&lt;/code&gt; key from the command-line session. If the tests pass, you can see output similar to the following example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running it.dev.langchan4j.example.ChatServiceIT
[INFO] ...
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.439 s...
[INFO] ...
[INFO] Running it.dev.langchan4j.example.ModelResourceIT
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.733 s...
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;access_app&quot;&gt;Access the application&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After the application is running, you can access it through a browser of your choice at &lt;a href=&quot;http://localhost:9080/&quot; class=&quot;bare&quot;&gt;http://localhost:9080/&lt;/a&gt; and start experimenting with it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/langchain4j-example-chat-room.png&quot; alt=&quot;Chat Room of LangChain4j Jakarta EE and MicroProfile example&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can type in any text that you want to chat with the AI agent. Here are some suggested messages:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;What is MicroProfile?&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Which top 10 companies contribute MicroProfile?&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Any documentation?&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;how_app_work&quot;&gt;How does the application work?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The application demonstrates how to use the LangChain4j APIs, &lt;a href=&quot;https://openliberty.io/docs/ref/feature/#cdi-4.0.html&quot;&gt;Jakarta Contexts and Dependency Injection&lt;/a&gt;, &lt;a href=&quot;https://openliberty.io/docs/latest/reference/feature/websocket-2.1.html&quot;&gt;Jakarta WebSocket&lt;/a&gt;, &lt;a href=&quot;https://openliberty.io/docs/ref/feature/#mpConfig-3.0.html&quot;&gt;MicroProfile Config&lt;/a&gt;, and &lt;a href=&quot;https://openliberty.io/docs/latest/reference/feature/mpMetrics-5.1.html&quot;&gt;MicroProfile Metrics&lt;/a&gt; features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;create_service&quot;&gt;Creating the LangChain4j AI service&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The application uses the &lt;code&gt;HuggingFaceChatModel&lt;/code&gt; class to provide the model for building the AI service.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See the &lt;a href=&quot;https://github.com/langchain4j/langchain4j-examples/tree/main/jakartaee-microprofile-example/src/main/java/dev/langchain4j/example/chat/ChatAgent.java&quot;&gt;src/main/java/dev/langchain4j/example/chat/ChatAgent.java&lt;/a&gt; file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock no_copy&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; Assistant getAssistant() {
        ...
            HuggingFaceChatModel model = HuggingFaceChatModel.builder()
                .accessToken(HUGGING_FACE_API_KEY)
                .modelId(CHAT_MODEL_ID)
                .timeout(ofSeconds(TIMEOUT))
                .temperature(TEMPERATURE)
                .maxNewTokens(MAX_NEW_TOKEN)
                .waitForModel(&lt;span class=&quot;predefined-constant&quot;&gt;true&lt;/span&gt;)
                .build();
            assistant = AiServices.builder(Assistant.class)
                .chatLanguageModel(model)
                .chatMemoryProvider(
                    sessionId -&amp;gt; MessageWindowChatMemory.withMaxMessages(MAX_MESSAGES))
                .build();
       ...
    }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Through the customized &lt;code&gt;Assistant&lt;/code&gt; interface, the application can send messages to the LLM by its &lt;code&gt;chat()&lt;/code&gt; method.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;    interface Assistant {
       String chat(@MemoryId String sessionId, @UserMessage String userMessage);
    }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;external_config&quot;&gt;Externalizing the configuration&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;An API key is required to access the model. For security purposes, the key is not hardcoded in the code. The application externalizes the API key and the LangChain4j model properties with the MicroProfile Config feature that helps the application to run in different environments without code changes. You can learn more from the &lt;a href=&quot;https://openliberty.io/docs/latest/external-configuration.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;External configuration of microservices&lt;/a&gt; document.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See the &lt;a href=&quot;https://github.com/langchain4j/langchain4j-examples/tree/main/jakartaee-microprofile-example/src/main/java/dev/langchain4j/example/chat/ChatAgent.java&quot;&gt;src/main/java/dev/langchain4j/example/chat/ChatAgent.java&lt;/a&gt; file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock no_copy&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@ConfigProperty&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;hugging.face.api.key&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; HUGGING_FACE_API_KEY;

    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@ConfigProperty&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;chat.model.id&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; CHAT_MODEL_ID;

    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@ConfigProperty&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;chat.model.timeout&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;Integer&lt;/span&gt; TIMEOUT;

    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@ConfigProperty&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;chat.model.max.token&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;Integer&lt;/span&gt; MAX_NEW_TOKEN;

    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@ConfigProperty&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;chat.model.temperature&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;Double&lt;/span&gt; TEMPERATURE;

    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@ConfigProperty&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;chat.memory.max.messages&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;Integer&lt;/span&gt; MAX_MESSAGES;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To fine tune the LangChain4j model or even try out another LLM, you simply update the values in the &lt;a href=&quot;https://github.com/langchain4j/langchain4j-examples/tree/main/jakartaee-microprofile-example/src/main/resources/META-INF/microprofile-config.properties&quot;&gt;langchain4j-examples/jakartaee-microprofile-example/src/main/resources/META-INF/microprofile-config.properties&lt;/a&gt; file or provide them through the environment variables.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;hugging.face.api.key=set it by env variable
chat.model.id=NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO
chat.model.timeout=120
chat.model.max.token=200
chat.model.temperature=1.0
chat.memory.max.messages=20&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;communicate&quot;&gt;Communicating between the client and LLM&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The application provides the interactive UI client for users to communicate with the LLM. Jakarta WebSocket enables two-way communication between the client and the &lt;code&gt;ChatService&lt;/code&gt; service. Each client makes an HTTP connection to the service and send out the messages by the &lt;code&gt;send()&lt;/code&gt; method.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See the &lt;a href=&quot;https://github.com/langchain4j/langchain4j-examples/tree/main/jakartaee-microprofile-example/src/main/webapp/chatroom.js&quot;&gt;src/main/webapp/chatroom.js&lt;/a&gt; file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock no_copy&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;    &lt;span class=&quot;reserved&quot;&gt;const&lt;/span&gt; webSocket = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; WebSocket(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ws://localhost:9080/chat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;);
    ...
    function sendMessage() {
        ...
        var myMessage = document.getElementById(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myMessage&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;).value;
        ...
        webSocket.send(myMessage);
        ...
    }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The service receives the user messages through the WebSocket &lt;code&gt;onMessage()&lt;/code&gt; method, forwards them to the LLM by calling the &lt;code&gt;ChatAgent.chat()&lt;/code&gt; method, and then broadcasts the LLM answers back to the client session through the &lt;code&gt;sendObect()&lt;/code&gt; method.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See the &lt;a href=&quot;https://github.com/langchain4j/langchain4j-examples/tree/main/jakartaee-microprofile-example/src/main/java/dev/langchain4j/example/chat/ChatService.java&quot;&gt;src/main/java/dev/langchain4j/example/chat/ChatService.java&lt;/a&gt; file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock no_copy&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;    &lt;span class=&quot;annotation&quot;&gt;@OnMessage&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; onMessage(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; message, Session session) {
        ...
        try {
            ...
            answer = agent.chat(sessionId, message);
        } &lt;span class=&quot;keyword&quot;&gt;catch&lt;/span&gt; (&lt;span class=&quot;exception&quot;&gt;Exception&lt;/span&gt; e) {
            ...
        }

        &lt;span class=&quot;keyword&quot;&gt;try&lt;/span&gt; {
            session.getBasicRemote().sendObject(answer);
        } &lt;span class=&quot;keyword&quot;&gt;catch&lt;/span&gt; (&lt;span class=&quot;exception&quot;&gt;Exception&lt;/span&gt; e) {
            e.printStackTrace();
        }

    }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;enable_metrics&quot;&gt;Enabling metrics&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To determine the performance and health of the application, it uses the MicroProfile Metrics feature to collect how much processing time is needed for a chat by applying the &lt;code&gt;@Timed&lt;/code&gt; annotation to the &lt;code&gt;onMessage()&lt;/code&gt; method.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See the &lt;a href=&quot;https://github.com/langchain4j/langchain4j-examples/tree/main/jakartaee-microprofile-example/src/main/java/dev/langchain4j/example/chat/ChatService.java&quot;&gt;src/main/java/dev/langchain4j/example/chat/ChatService.java&lt;/a&gt; file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock no_copy&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;    &lt;span class=&quot;annotation&quot;&gt;@OnMessage&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Timed&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;chatProcessingTime&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
           absolute = &lt;span class=&quot;predefined-constant&quot;&gt;true&lt;/span&gt;,
           description = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Time needed chatting to the agent.&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; onMessage(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; message, Session session) {
        ...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Visit the &lt;a href=&quot;http://localhost:9080/metrics?scope=application&quot; class=&quot;bare&quot;&gt;http://localhost:9080/metrics?scope=application&lt;/a&gt; URL to check out the metrics.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;# HELP chatProcessingTime_seconds Time needed chatting to the agent.
# TYPE chatProcessingTime_seconds summary
chatProcessingTime_seconds{mp_scope=&quot;application&quot;,quantile=&quot;0.5&quot;,} 0.0
chatProcessingTime_seconds{mp_scope=&quot;application&quot;,quantile=&quot;0.75&quot;,} 0.0
chatProcessingTime_seconds{mp_scope=&quot;application&quot;,quantile=&quot;0.95&quot;,} 0.0
chatProcessingTime_seconds{mp_scope=&quot;application&quot;,quantile=&quot;0.98&quot;,} 0.0
chatProcessingTime_seconds{mp_scope=&quot;application&quot;,quantile=&quot;0.99&quot;,} 0.0
chatProcessingTime_seconds{mp_scope=&quot;application&quot;,quantile=&quot;0.999&quot;,} 0.0
chatProcessingTime_seconds_count{mp_scope=&quot;application&quot;,} 6.0
chatProcessingTime_seconds_sum{mp_scope=&quot;application&quot;,} 31.674357666
# HELP chatProcessingTime_seconds_max Time needed chatting to the agent.
# TYPE chatProcessingTime_seconds_max gauge
chatProcessingTime_seconds_max{mp_scope=&quot;application&quot;,} 13.191547042&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you are interested in other ways to use the LangChain4j APIs, you can study the REST APIs that are provided by the &lt;a href=&quot;https://github.com/langchain4j/langchain4j-examples/tree/main/jakartaee-microprofile-example/src/main/java/dev/langchain4j/example/rest/ModelResource.java&quot;&gt;src/main/java/dev/langchain4j/example/rest/ModelResource.java&lt;/a&gt; file.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;where_to_next&quot;&gt;Where to next?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://openliberty.io/guides/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Open Liberty guides&lt;/a&gt; for more information and interactive tutorials that walk you through using more Jakarta EE and MicroProfile APIs with Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;help_links&quot;&gt;Helpful links&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/langchain4j&quot;&gt;LangChain4j&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://huggingface.co/models&quot;&gt;Hugging Face LLMs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/jakarta-websocket.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Bidirectional communication between services using Jakarta WebSocket&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/cdi-intro.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Injecting dependencies into microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-config.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Configuring microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-metrics.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Providing metrics from a microservice&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Mon, 01 Apr 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/04/01/open-liberty-with-langchain4j-example.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/04/01/open-liberty-with-langchain4j-example
          
        </guid>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Our guide to open source cloud native Java at DevNexus 2024</title>
        <description>&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;what-is-devnexus&quot;&gt;What is DevNexus?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://devnexus.com/&quot;&gt;DevNexus&lt;/a&gt; is the longest-running and largest Java Conference in the US. It’s organised by a vibrant Java community who are passionate about enabling education for all and empowering the Java developer community. Last year&amp;#8217;s event brought more than 1400 developers together from all over the world, and more than 90 speakers shared their knowledge on exciting, trending topics like software architecture, core Java, Kubernetes, and security.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/DevNexus2024.jpg&quot; alt=&quot;DevNexus 2024 site&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can see more of the 2023 highlights in this promo &lt;a href=&quot;https://www.youtube.com/watch?v=x2pYHLx70rQ&quot;&gt;video&lt;/a&gt;. For those of you who are keen eyed, you might even spot our very own &lt;a href=&quot;https://github.com/OpenLiberty/space-rover-mission#readme&quot;&gt;Liberty Space Rover&lt;/a&gt;!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This year the event is being held in downtown Atlanta at the Georgia World Congress Center from April 9th-11th and tickets are already sold out! It&amp;#8217;s sure to be an awesome event, with 145 international speakers taking the stage.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;open-liberty-booth-at-devnexus&quot;&gt;Open Liberty Booth at DevNexus&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This year we are excited to have our very own Open Liberty booth as well as having members of the Open Liberty team on site hosting sessions, quick labs, workshops, and running demonstrations at the IBM, MicroProfile and Jakarta EE booths.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/DevNexusOLSponsor.png&quot; alt=&quot;DevNexus twitter post about Open Source Sponsors&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We&amp;#8217;re honoured to have a booth alongside other open source projects like MicroProfile, Jakarta EE, and PostgresSQL. Having our own booth gives attendees the opportunity to come and meet the people behind the technology and offers the chance to ask questions and learn more about these amazing open source projects!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;So, if you&amp;#8217;re coming to DevNexus, be sure to pop by our Open Liberty booth in the breaks and say hi. You may even get some cool Open Liberty swag!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;which-session-should-i-attend&quot;&gt;Which session should I attend?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The great part about attending a conference like DevNexus is the huge array of topics, sessions, and speakers presenting throughout the event. You have the chance to learn about everything from agile, architecture, and AI, through to cloud infrastructure, cloud technologies, and core Java/Jakarta EE. But with over 140 different sessions to choose from, and up to 13 sessions all occurring at the same time, how do you choose which sessions to attend?!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Deciding which sessions to see can be a real challenge! But to help make this easier, we’ve put together this guide of the sessions available on each day that focus on open source, cloud-native Java technologies, including Open Liberty, MicroProfile, Jakarta EE, and more. There&amp;#8217;s also a dedicated Jakarta EE track this year, so make sure to check out those sessions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/DevNexusJakartaEETrack.jpg&quot; alt=&quot;DevNexus Jakarta EE track&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;tuesday-9th-april-2024&quot;&gt;Tuesday 9th April 2024&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Workshop: &lt;a href=&quot;https://devnexus.com/presentations/the-ultimate-one-day-java-workshop-deploying-ai-enhanced-applications-with-security-scalability&quot;&gt;The Ultimate One-Day Java Workshop: Deploying AI-Enhanced Applications with Security &amp;amp; Scalability&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This all-day workshop, led by 5 internationally renowned speakers, is sure to be a great hands-on learning experience. It bridges the gap between traditional Java application deployment and modern cloud-based solutions, offering participants a deep dive into the latest technologies, methodologies, and best practices, including the exciting realm of AI.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;wednesday-10th-april-2024&quot;&gt;Wednesday 10th April 2024&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Time: 10:00-11:00&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/jakarta-ee-11-performance-and-developer-productivity&quot;&gt;Jakarta EE 11 - Performance and Developer Productivity&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta EE guru &lt;a href=&quot;https://twitter.com/ivar_grimstad&quot;&gt;Ivar Grimstad&lt;/a&gt; takes us on a journey to understand how the namespace change from &lt;code&gt;javax.&lt;strong&gt;&lt;/code&gt; to &lt;code&gt;jakarta.&lt;/strong&gt;&lt;/code&gt; in Jakarta EE 9 impacted the entire Java ecosystem, the cool new features introduced in Jakarta EE 10, and the renewed focus on performance and developer productivity introduced in Jakarta EE 11.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Time: 11:30-12:30&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/securing-your-enterprise-apps-jakarta-security-in-jakarta-ee-11-and-beyond&quot;&gt;Securing Your Enterprise Apps - Jakarta Security In Jakarta EE 11 And Beyond&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/luis_neto_java&quot;&gt;Luis Neto&lt;/a&gt; showcases how Jakarta EE can help our applications constantly evolve to stay safe and remain secure, by defining a standard for creating secure enterprise Java applications, and innovating with each release to provide the best measures possible.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Time: 16:00-17:00&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/optimize-your-applications-to-the-max-with-jakarta-ee-and-microprofile&quot;&gt;Optimize your applications to the max with Jakarta EE and MicroProfile&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Join Java Champion &lt;a href=&quot;https://twitter.com/edwinderks&quot;&gt;Edwin Derks&lt;/a&gt; as he explores Jakarta EE, MicroProfile and application server runtimes and how they can provide the perfect tools to achieve optimal value when developing and running enterprise software.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Time: 17:00-18:00&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/jakarta-ee-the-future-of-enterprise-application-behind-the-myths&quot;&gt;Jakarta EE! The future of enterprise application behind the myths.&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Concerned about moving your applications from JEE 5 &amp;amp; 7 to Jakarta EE 10? Join this session by &lt;a href=&quot;https://twitter.com/betoSalazar&quot;&gt;Alberto Salazar&lt;/a&gt; to understand the potential pitfalls and put away the concerns of updating and evolving your enterprise applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Time: 17:00-18:00&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/the-next-frontier-in-open-source-java-compilers-just-in-time-compilation-as-a-service&quot;&gt;The Next Frontier in Open Source Java Compilers: Just-In-Time Compilation as a Service&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this session, &lt;a href=&quot;https://twitter.com/rhagarty8&quot;&gt;Rich Hagarty&lt;/a&gt; will dig into JITServer technology, showing the challenges of implementation, detailing its strengths and weaknesses, and illustrating its performance characteristics. For those interested in cloud native deployment, he will also show how to deploy it in containers, demonstrate its advantages compared to a traditional JIT compilation technique, and offer practical recommendations about when to use this technology.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;thursday-12th-april-2024&quot;&gt;Thursday 12th April 2024&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Time: 10:00-11:00&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/making-the-best-of-jakarta-ee-kubernetes-websphere-and-the-cloud-with-ai&quot;&gt;Making the best of Jakarta EE, Kubernetes, WebSphere and the cloud with AI&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This hands-on session will show you how to enable deployments of Jakarta EE applications using Open Liberty or WebSphere Liberty to the cloud with AI. With two Java champions presenting (&lt;a href=&quot;https://twitter.com/emilyfhjiang&quot;&gt;Emily Jiang&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/bbenz&quot;&gt;Brian Benz&lt;/a&gt;), it&amp;#8217;s sure to be a great session!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Time: 11:30-12:30&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/exploring-the-data-universe-portability-with-jakarta-data-and-open-liberty&quot;&gt;Exploring the Data Universe: Portability with Jakarta Data and Open Liberty&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this session, Jakarta Data committer &lt;a href=&quot;https://www.linkedin.com/in/kyleaure/&quot;&gt;Kyle Aure&lt;/a&gt;, will showcase the domain-driven repository pattern of the Jakarta Data project and highlight the query mechanism to utilize sorting, streaming, and paging. Using a live demo application, Kyle will swap out a relational database for a non-relational database to showcase just how easy this can now be with Jakarta Data!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Time: 11:30-12:30&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/cache-me-if-you-can-speed-up-your-jvm-with-project-valhalla&quot;&gt;Cache Me If You Can: Speed Up Your JVM With Project Valhalla&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;OpenJDK’s Project Valhalla is set to revolutionize how the JVM handles data objects in memory. This talk offers an exploration of Valhalla&amp;#8217;s objectives, progress, and its potential impact on the Java ecosystem with examples throughout. Join &lt;a href=&quot;https://twitter.com/t_mammarella&quot;&gt;Theresa Mammarella&lt;/a&gt; in this session to discover how Project Valhalla is on the verge of reshaping the landscape of Java, paving the way for a more efficient and high-performing future.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Time: 13:30-14:30&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/databaseless-data-processing-with-eclipsestore-and-websphere-liberty-instanton&quot;&gt;Databaseless Data Processing with EclipseStore and WebSphere Liberty InstantOn&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Join &lt;a href=&quot;https://twitter.com/MarkusKett&quot;&gt;Markus Kett&lt;/a&gt; and Java Champion &lt;a href=&quot;https://twitter.com/emilyfhjiang&quot;&gt;Emily Jiang&lt;/a&gt; in this session to learn how the combinaton of Liberty InstantOn and EclipseStore enables Java applications to achieve the 3 most critical factors for cloud-native applicatons making use of AI, ML, VR, and big data in the cloud: high performance, low data storage costs, and simple, fast and cost-efficient implementation and maintenance.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Time: 13:30-14:30&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/thriving-in-the-cloud-going-beyond-the-12-factors&quot;&gt;Thriving in the cloud: Going beyond the 12 factors&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enabling applications to really thrive (and not just survive) in cloud environments can be challenging. The original 12 factor app methodology helped to lay out some of the key characteristics needed for cloud-native applications&amp;#8230;&amp;#8203; but&amp;#8230;&amp;#8203; as our cloud infrastructure and tooling has progressed, so too have these factors. In this session, Java Champion &lt;a href=&quot;https://twitter.com/gracejansen27&quot;&gt;Grace Jansen&lt;/a&gt; will dive into the extended and updated 15 factors and take a look at open source technologies and tools that can help us achieve this.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Time: 16:00-17:00&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/jakarta-ee-11-going-beyond-the-era-of-java-ee&quot;&gt;Jakarta EE 11: Going Beyond the Era of Java EE&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Java guru &lt;a href=&quot;https://twitter.com/mpredli&quot;&gt;Michael Redlich&lt;/a&gt; presents this session providing a history of JavaEE/Jakarta EE and a review of new and updated specifications with code examples.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;ibm-booth&quot;&gt;IBM Booth:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As well as the numerous sessions during the conference and our dedicated Open Liberty booth, the Open Liberty team will also be manning the IBM booth in the exhibition hall. Stop by to catch our in-booth theatre with a series of SmartTalks, grab some awesome swag, and have a chat about all things OSS Java. We’d love to see you there!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This year, we’ll also have our exciting intergalactic booth challenge…
&lt;a href=&quot;https://www.youtube.com/watch?v=bURqsxP5gEY&amp;amp;t=139s&quot;&gt;The Open Liberty Space Rover Challenge&lt;/a&gt;. In this challenge, you’ll need to navigate the planets and get your rover safely to your destination in the stars. Take control of a spaceship and use hand signals to direct it&amp;#8217;s flight from planet to planet. Climb the rankings on your way to become top cadet in Star Academy. While you&amp;#8217;re with us, ask our developers about the underlying technologies they&amp;#8217;ve used to create the demo, including OpenJ9, Jakarta EE, MicroProfile, and &quot;the most flexible runtime in the cosmos&quot;, Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We hope this guide helps you to plan your time at DevNexus. If you&amp;#8217;re interested in other sessions, check out the &lt;a href=&quot;https://devnexus.com/schedule&quot;&gt;full schedule&lt;/a&gt; on the DevNexus &lt;a href=&quot;https://devnexus.com/&quot;&gt;conference website&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Wed, 06 Mar 2024 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2024/03/06/DevNexus24.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2024/03/06/DevNexus24
          
        </guid>
        
        <category>microprofile</category>
        
        <category>security</category>
        
        <category>jakarta-ee</category>
        
        <category>kubernetes</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta Data 1.0 hits Milestone 2 in 24.0.0.1-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 24.0.0.1-beta includes a preview of the new Jakarta Data specification for Jakarta EE, as it currently stands at Milestone 2. Milestone 2 provides API updates to pagination and various improvements to the Javadoc and specification text. You can try it out and give feedback on the specification so far.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;milestone_2&quot;&gt;Preview of Jakarta Data (Milestone 2)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data is a new Jakarta EE specification being developed in the open that standardizes the popular Data Repository pattern across a variety of providers. Open Liberty 24.0.0.1-beta includes the Jakarta Data 1.0 Milestone 2 release, which provides API updates to pagination and various improvements to the Javadoc and specification text. The Open Liberty beta includes a test implementation of Jakarta Data that we are using to experiment with proposed specification features so that developers can try out these features and provide feedback to influence the development of the Jakarta Data 1.0 specification beyond Milestone 2. The test implementation currently works with relational databases and operates by redirecting repository operations to the built-in Jakarta Persistence provider.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use the pagination API to request pages of results in Jakarta Data, you need an Entity and a Repository.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Start by defining an entity class that corresponds to your data. With relational databases, the entity class corresponds to a database table and the entity properties (public methods and fields of the entity class) generally correspond to the columns of the table. An entity class can be:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;annotated with &lt;code&gt;jakarta.persistence.Entity&lt;/code&gt; and related annotations from Jakarta Persistence&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;a Java class without entity annotations, in which case the primary key is inferred from an entity property named &lt;code&gt;id&lt;/code&gt; or ending with &lt;code&gt;Id&lt;/code&gt; and an entity property named &lt;code&gt;version&lt;/code&gt; designates an automatically incremented version column.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You define one or more repository interfaces for an entity, annotate those interfaces as &lt;code&gt;@Repository&lt;/code&gt; and inject them into components via &lt;code&gt;@Inject&lt;/code&gt;. The Jakarta Data provider supplies the implementation of the repository interface for you.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows a simple entity:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;@Entity
public class Product {
    @Id
    public long id;

    public String name;

    public float price;

    @Version
    public long version;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows a repository that defines operations that relate to the entity. Your repository interface can inherit from built-in interfaces, such as &lt;code&gt;BasicRepository&lt;/code&gt; and &lt;code&gt;CrudRepository&lt;/code&gt;, to gain a variety of general purpose repository methods for inserting, updating, deleting, and querying for entities. However, in this case, we will define all of the methods ourselves by using the new lifecycle annotations:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;@Repository(dataStore = &amp;quot;java:app/jdbc/my-example-data&amp;quot;)
public interface Products {
    @Insert
    Product add(Product newProduct);

    @Update
    boolean modify(Product product);

    @Delete
    boolean remove(Product product);

    // parameter based query that requires compilation with -parameters to preserve parameter names
    Optional&amp;lt;Product&amp;gt; find(long id);

    // query-by-method name pattern:
    KeysetAwarePage&amp;lt;Product&amp;gt; findByNameIgnoreCaseContains(String searchFor, Pageable pageRequest);

    // query via JPQL:
    @Query(&amp;quot;UPDATE Product o SET o.price = o.price - (?2 * o.price) WHERE o.id = ?1&amp;quot;)
    boolean discount(long productId, float discountRate);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows the repository being used:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;@DataSourceDefinition(name = &amp;quot;java:app/jdbc/my-example-data&amp;quot;,
                      className = &amp;quot;org.postgresql.xa.PGXADataSource&amp;quot;,
                      databaseName = &amp;quot;ExampleDB&amp;quot;,
                      serverName = &amp;quot;localhost&amp;quot;,
                      portNumber = 5432,
                      user = &amp;quot;${example.database.user}&amp;quot;,
                      password = &amp;quot;${example.database.password}&amp;quot;)
public class MyServlet extends HttpServlet {
    @Inject
    Products products;

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // Insert:
        Product prod = ...
        prod = products.add(prod);

        // Update:
        prod.price = prod.price + 1.00;
        if (products.update(prod))
            System.out.println(&amp;quot;Successfully increased the price.&amp;quot;);
        else {
            // someone else either removed the product or updated its version before we could
            prod = products.find(productId).orElseThrow();
            ...
        }

        // Request only the first 10 results on a page, ordered by price, then name, then id:
        Pageable pageRequest = Pageable.size(10).sortBy(Sort.desc(&amp;quot;price&amp;quot;), Sort.asc(&amp;quot;name&amp;quot;), Sort.asc(&amp;quot;id&amp;quot;));
        KeysetAwarePage&amp;lt;Product&amp;gt; page = products.findByNameIgnoreCaseContains(searchFor, pageRequest);
        ...
        // Request the next page relative to the end of the current page
        page = products.findByNameIgnoreCaseContains(searchFor, page.nextPageable());
        ...
        // Request the prior page relative to the start of the current page
        page = products.findByNameIgnoreCaseContains(searchFor, page.previousPageable());
        ...
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 21, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.10&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;24.0.0.1-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try.  For example, for Jakarta EE 10 and MicroProfile 6, you would include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.microprofile&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;microprofile&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;6.0-RC3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.platform&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta.jakartaee-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;10.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.8'
    }
}
apply plugin: 'liberty'
dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[24.0.0.1-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;IntelliJ IDEA&lt;/a&gt;, &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Visual Studio Code&lt;/a&gt; or &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Eclipse IDE&lt;/a&gt;, you can also take advantage of our open source &lt;a href=&quot;https://openliberty.io/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty developer tools&lt;/a&gt; to enable effective development, testing, debugging and application management all from within your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 19 Dec 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/12/19/24.0.0.1-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/12/19/24.0.0.1-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Preview of Jakarta Data Milestone 1 in Open Liberty 23.0.0.12-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 23.0.0.12-beta contains a preview of the new Jakarta Data specification for Jakarta EE, as it currently stands at Milestone 1. Milestone 1 provides the capability to annotate lifecycle methods such as &lt;code&gt;Insert&lt;/code&gt;, &lt;code&gt;Delete&lt;/code&gt;, and more. You can try it out and give feedback on the specification so far.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Also in this beta, you can configure the &lt;em&gt;quiesce&lt;/em&gt; stage when the Liberty runtime shuts down to be longer than the default 30 seconds. This update is useful for services that need more time to finish processing requests.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 23.0.0.12-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jdata&quot;&gt;Preview of Jakarta Data (Milestone 1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#timeout&quot;&gt;Configurable Quiesce Timeout&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jdata&quot;&gt;Preview of Jakarta Data (Milestone 1)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data is a new &lt;a href=&quot;https://jakarta.ee/specifications/data/1.0/&quot;&gt;Jakarta EE specification&lt;/a&gt; being developed in the open that aims to standardize the popular data repository pattern across a variety of providers. Open Liberty includes the Jakarta Data 1.0 Milestone 1 release, which adds the ability to annotatively compose custom lifecycle methods, covering &lt;code&gt;Insert&lt;/code&gt;, &lt;code&gt;Update&lt;/code&gt;, &lt;code&gt;Save&lt;/code&gt;, and &lt;code&gt;Delete&lt;/code&gt; operations. The Open Liberty beta includes a test implementation of Jakarta Data that we are using to experiment with proposed specification features so that developers can try out these features and provide feedback to influence the Jakarta Data 1.0 specification as it continues to be developed after Milestone 1. The test implementation currently works with relational databases and operates by redirecting repository operations to the built-in Jakarta Persistence provider.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data 1.0 Milestone 1 introduces the concept of annotated lifecycle methods. To use these methods, you need an entity and a repository.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Start by defining an entity class that corresponds to your data. With relational databases, the entity class corresponds to a database table and the entity properties (public methods and fields of the entity class) generally correspond to the columns of the table. An entity class can be:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;annotated with &lt;code&gt;jakarta.persistence.Entity&lt;/code&gt; and related annotations from Jakarta Persistence&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;a Java class without entity annotations, in which case the primary key is inferred from an entity property named &lt;code&gt;id&lt;/code&gt; or ending with &lt;code&gt;Id&lt;/code&gt; and an entity property named &lt;code&gt;version&lt;/code&gt; designates an automatically incremented version column.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You define one or more repository interfaces for an entity, annotate those interfaces as &lt;code&gt;@Repository&lt;/code&gt; and inject them into components via &lt;code&gt;@Inject&lt;/code&gt;. The Jakarta Data provider supplies the implementation of the repository interface for you.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows a simple entity:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Product&lt;/span&gt; {
    &lt;span class=&quot;annotation&quot;&gt;@Id&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; id;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; price;

    &lt;span class=&quot;annotation&quot;&gt;@Version&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; version;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows a repository that defines operations that relate to the entity. Your repository interface can inherit from built-in interfaces, such as &lt;code&gt;BasicRepository&lt;/code&gt; and &lt;code&gt;CrudRepository&lt;/code&gt;, to gain a variety of general purpose repository methods for inserting, updating, deleting, and querying for entities. However, in this case, we will define all of the methods ourselves by using the new lifecycle annotations:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;(dataStore = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/jdbc/my-example-data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Products&lt;/span&gt; {
    &lt;span class=&quot;annotation&quot;&gt;@Insert&lt;/span&gt;
    Product add(Product newProduct);

    &lt;span class=&quot;annotation&quot;&gt;@Update&lt;/span&gt;
    &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; modify(Product product);

    &lt;span class=&quot;annotation&quot;&gt;@Delete&lt;/span&gt;
    &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; remove(Product product);

    &lt;span class=&quot;comment&quot;&gt;// parameter based query that requires compilation with -parameters to preserve parameter names&lt;/span&gt;
    Optional&amp;lt;Product&amp;gt; find(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; id);

    &lt;span class=&quot;comment&quot;&gt;// query-by-method name pattern:&lt;/span&gt;
    Page&amp;lt;Product&amp;gt; findByNameIgnoreCaseContains(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; searchFor, &lt;span class=&quot;predefined-type&quot;&gt;Pageable&lt;/span&gt; pageRequest);

    &lt;span class=&quot;comment&quot;&gt;// query via JPQL:&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;UPDATE Product o SET o.price = o.price - (?2 * o.price) WHERE o.id = ?1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; discount(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; discountRate);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows the repository being used:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@DataSourceDefinition&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/jdbc/my-example-data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      className = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;org.postgresql.xa.PGXADataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      databaseName = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ExampleDB&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      serverName = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      portNumber = &lt;span class=&quot;integer&quot;&gt;5432&lt;/span&gt;,
                      user = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${example.database.user}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      password = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${example.database.password}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;MyServlet&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; HttpServlet {
    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    Products products;

    &lt;span class=&quot;directive&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doGet(HttpServletRequest req, HttpServletResponse resp)
            &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt; {
        &lt;span class=&quot;comment&quot;&gt;// Insert:&lt;/span&gt;
        Product prod = ...
        prod = products.add(prod);

        &lt;span class=&quot;comment&quot;&gt;// Update:&lt;/span&gt;
        prod.price = prod.price + &lt;span class=&quot;float&quot;&gt;1.00&lt;/span&gt;;
        &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (products.update(prod))
            &lt;span class=&quot;predefined-type&quot;&gt;System&lt;/span&gt;.out.println(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Successfully increased the price.&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
        &lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; {
            &lt;span class=&quot;comment&quot;&gt;// someone else either removed the product or updated its version before we could&lt;/span&gt;
            prod = products.find(productId).orElseThrow();
            ...
        }

        &lt;span class=&quot;comment&quot;&gt;// Request only the first 20 results on a page, ordered by price, then name, then id:&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;Pageable&lt;/span&gt; pageRequest = &lt;span class=&quot;predefined-type&quot;&gt;Pageable&lt;/span&gt;.size(&lt;span class=&quot;integer&quot;&gt;20&lt;/span&gt;).sortBy(Sort.desc(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;), Sort.asc(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;), Sort.asc(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;));
        Page&amp;lt;Product&amp;gt; page1 = products.findByNameIgnoreCaseContains(searchFor, pageRequest);
        ...
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;timeout&quot;&gt;Configurable quiesce timeout for the Liberty runtime&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty has a &lt;em&gt;quiesce&lt;/em&gt; stage when shutting down the Liberty runtime, which prevents services from accepting new requests and allows time for services to process existing requests. The quiesce stage has always been a fixed 30 seconds time period. This quiesce time period is now configurable.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, in some cases, the 30-seconds quiesce period was not long enough time for services to finish processing existing requests. So you can now increase the quiesce timeout if necessary.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To configure the quiesce timeout, add the new &lt;code&gt;quiesceTimeout&lt;/code&gt; attribute to the &lt;code&gt;executor&lt;/code&gt; element in the &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;executor&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;quiesceTimeout&lt;/span&gt;=&lt;span class=&quot;error&quot;&gt;“&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;1m30s&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;”&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The timeout value is a positive integer followed by a unit of time, which can be hours (&lt;code&gt;h&lt;/code&gt;), minutes (&lt;code&gt;m&lt;/code&gt;), or seconds (&lt;code&gt;s&lt;/code&gt;). For example, specify 30 seconds as &lt;code&gt;30s&lt;/code&gt;. You can include multiple units in a single entry. For example, &lt;code&gt;1m30s&lt;/code&gt; is equivalent to 90 seconds. The minimum &lt;code&gt;quiesceTimeout&lt;/code&gt; value is 30 seconds. If you specify a shorter length of time, the value &lt;code&gt;30s&lt;/code&gt; is used.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 21, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;23.0.0.12-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your &lt;code&gt;pom.xml&lt;/code&gt; file for the beta version of the APIs that are associated with the beta features that you want to try.  For example, for Jakarta EE 10 and MicroProfile 6, you would include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.microprofile&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;microprofile&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;6.0-RC3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.platform&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta.jakartaee-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;10.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.7'
    }
}
apply plugin: 'liberty'
dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[23.0.0.12-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;IntelliJ IDEA&lt;/a&gt;, &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Visual Studio Code&lt;/a&gt; or &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Eclipse IDE&lt;/a&gt;, you can also take advantage of our open source &lt;a href=&quot;/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty developer tools&lt;/a&gt; to enable effective development, testing, debugging and application management all from within your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;/docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 28 Nov 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/11/28/23.0.0.12-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/11/28/23.0.0.12-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>MicroProfile 6.1, Java 21, and fast startup times for Spring Boot apps on Open Liberty 23.0.0.10-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This Open Liberty beta is packed full of the team&amp;#8217;s latest standards implementation work with previews of MicroProfile 6.1 (Metrics, Telemetry, and OpenAPI), Java 21, and Jakarta Data (Beta 3) on Open Liberty. It also introduces faster startup times for your Spring Boot applications with little or no extra effort by using Liberty InstantOn; if you have any Spring apps to hand, give it a try. And there are a couple of updates that make it easier to manage security configurations in containerized environments.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 23.0.0.10-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#sbcrac&quot;&gt;Faster startup of Spring Boot apps (Spring Boot 3.0 InstantOn with CRaC)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#java21&quot;&gt;Java 21 support&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp61&quot;&gt;MicroProfile 6.1 support&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mpmetrics&quot;&gt;MicroProfile Metrics 5.1: configure statistics tracked by Histogram and Timer metrics&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mptel&quot;&gt;MicroProfile Telemetry 1.1: updated OpenTelemetry implementation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mpapi&quot;&gt;MicroProfile OpenAPI 3.1: OpenAPI doc endpoint path configuration&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#data&quot;&gt;Jakarta Data beta 3: configure the data source used to query and persist data&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#ltpa&quot;&gt;Support LTPA keys rotation without a planned outage&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#include&quot;&gt;Include all files in a specified directory in your server configuration&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;sbcrac&quot;&gt;Faster startup of Spring Boot apps (Spring Boot 3.0 InstantOn with CRaC)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty InstantOn provides fast startup times for MicroProfile and Jakarta EE applications. With &lt;a href=&quot;/blog/2023/06/29/rapid-startup-instanton.html&quot;&gt;InstantOn&lt;/a&gt;, your applications can start in milliseconds, without compromising on throughput, memory, development-production parity, or Java language features. InstantOn uses the Checkpoint/Restore In Userspace (&lt;a href=&quot;https://criu.org/&quot;&gt;CRIU&lt;/a&gt;) feature of the Linux kernel to take a checkpoint of the JVM that can be restored later.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Spring Framework (version 6.1) is adding &lt;a href=&quot;https://docs.spring.io/spring-framework/reference/6.1/integration/checkpoint-restore.html&quot;&gt;support for Coordinated Restore at Checkpoint (CRaC)&lt;/a&gt;, which also uses CRIU to provide Checkpoint and Restore for Java applications.  The Spring Boot version 3.2 will use Spring Framework version 6.1, enabling Spring Boot applications to also use CRaC to achieve rapid startup times.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/blog/2023/09/19/23.0.0.9.html#sb3&quot;&gt;recent addition of the Open Liberty &lt;code&gt;springBoot-3.0&lt;/code&gt; feature&lt;/a&gt; allows Spring Boot 3.x-based applications to be deployed with Open Liberty.  And now, with the new Open Liberty &lt;code&gt;crac-1.3&lt;/code&gt; beta feature, a Spring Boot 3.2-based application can be deployed with Liberty InstantOn to achieve rapid startup times for your Spring Boot application.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use the CRaC 1.3 functionality with the &lt;code&gt;springBoot-3.0&lt;/code&gt; feature, you must be running with Java 17 or higher and use the &lt;code&gt;crac-1.3&lt;/code&gt; feature.  Additionally, if your application uses Servlet, it  needs to use the &lt;code&gt;servlet-6.0&lt;/code&gt; feature.  These features are configured in the &lt;code&gt;server.xml&lt;/code&gt; file as follows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;features&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;springBoot-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-6.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;crac-1.3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/features&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With these features enabled you can containerize your Spring Boot 3.2 application with Liberty InstantOn support by following the &lt;a href=&quot;/docs/latest/instanton.html&quot;&gt;Liberty InstantOn documentation&lt;/a&gt; along with following the Liberty recommendations for containerizing Spring Boot applications with the &lt;a href=&quot;/guides/spring-boot.html&quot;&gt;Liberty Spring Boot guide&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information and an example Spring Boot application using the Liberty InstantOn &lt;code&gt;crac-1.3&lt;/code&gt; feature, see the &lt;a href=&quot;/blog/2023/09/26/spring-boot-3-instant-on.html&quot;&gt;How to containerize your Spring Boot application for rapid startup&lt;/a&gt; blog post.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can also use the &lt;code&gt;crac-1.3&lt;/code&gt; feature with other applications, such as applications using Jakarta EE or MicroProfile. Such applications can register resources with CRaC to get notifications for checkpoint and restore. This allows applications to perform actions necessary to prepare for a checkpoint as well as perform necessary actions when the application is restored.  For more information on the &lt;code&gt;org.crac&lt;/code&gt; APIs, see the &lt;a href=&quot;https://javadoc.io/doc/org.crac/crac/latest/index.html&quot;&gt;org.crac&lt;/a&gt; Javadoc.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;java21&quot;&gt;Java 21 support&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Java 21 is finally here, the first long term support (LTS) release since Java 17 was released two years ago. It offers some new functionality and changes that you&amp;#8217;ll want to check out for yourself.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As it is a milestone release of Java, we thought you might like to try it out a little early (we have been testing against Java 21 build 35 ourselves).  Take advantage of trying out the new changes in Java 21 now and get more time to review your applications, microservices, and runtime environments.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Just:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jdk.java.net/21/&quot;&gt;Download the latest release of Java 21&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get the &lt;a href=&quot;https://openliberty.io/downloads/#runtime_betas&quot;&gt;23.0.0.10-beta&lt;/a&gt; version of Open Liberty.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit your Liberty server&amp;#8217;s &lt;a href=&quot;https://openliberty.io/docs/latest/reference/config/server-configuration-overview.html#server-env&quot;&gt;server.env file&lt;/a&gt; to point JAVA_HOME to your Java 21 installation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start testing!&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Here are some highlights from new JEP changes in Java 18-21:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;400: &lt;a href=&quot;https://openjdk.java.net/jeps/400&quot;&gt;UTF-8 by Default&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;408: &lt;a href=&quot;https://openjdk.java.net/jeps/408&quot;&gt;Simple Web Server&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;413: &lt;a href=&quot;https://openjdk.java.net/jeps/413&quot;&gt;Code Snippets in Java API Documentation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;416: &lt;a href=&quot;https://openjdk.java.net/jeps/416&quot;&gt;Reimplement Core Reflection with Method Handles&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;418: &lt;a href=&quot;https://openjdk.java.net/jeps/418&quot;&gt;Internet-Address Resolution SPI&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;421: &lt;a href=&quot;https://openjdk.java.net/jeps/421&quot;&gt;Deprecate Finalization for Removal&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;422: &lt;a href=&quot;https://openjdk.org/jeps/422&quot;&gt;Linux/RISC-V Port&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;431: &lt;a href=&quot;https://openjdk.org/jeps/431&quot;&gt;Sequenced Collections&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;439: &lt;a href=&quot;https://openjdk.org/jeps/439&quot;&gt;Generational ZGC&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;440: &lt;a href=&quot;https://openjdk.org/jeps/440&quot;&gt;Record Patterns&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;441: &lt;a href=&quot;https://openjdk.org/jeps/441&quot;&gt;Pattern Matching for switch&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;449: &lt;a href=&quot;https://openjdk.org/jeps/449&quot;&gt;Deprecate the Windows 32-bit x86 Port for Removal&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;451: &lt;a href=&quot;https://openjdk.org/jeps/451&quot;&gt;Prepare to Disallow the Dynamic Loading of Agents&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;452: &lt;a href=&quot;https://openjdk.org/jeps/452&quot;&gt;Key Encapsulation Mechanism API&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;But perhaps the most anticipated one of all is the introduction of Virtual Threads in Java 21:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;444: &lt;a href=&quot;https://openjdk.org/jeps/444&quot;&gt;Virtual Threads&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Will the impact of Virtual Threads live up to the anticipation?  Find out for yourself by experimenting with them, or with any of the other new features in Java 21, by trying them out in your applications run on the best Java runtime, Open Liberty!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on Java 21, see:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jdk.java.net/21/release-notes&quot;&gt;Java 21 release notes page&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://download.java.net/java/early_access/jdk21/docs/api/&quot;&gt;API Javadoc page&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jdk.java.net/21/&quot;&gt;Java 21 download page&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As we work toward full Java 21 support, please bear with any of our functionality that might not be 100% ready yet.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;mp61&quot;&gt;MicroProfile 6.1 support&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile 6.1 is a minor release and is backwards-compatible with MicroProfile 6.0. It brings in Jakarta EE 10 Core Profile APIs and the following MicroProfile component specifications:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/coreprofile/10/&quot;&gt;Jakarta EE 10 Core Profile&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-config/releases/tag/3.1-RC1&quot;&gt;MicroProfile Config 3.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-fault-tolerance/releases/tag/4.0.2&quot;&gt;MicroProfile Fault Tolerance 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-metrics/releases/tag/5.1.0-RC1&quot;&gt;MicroProfile Metrics 5.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-health/releases/tag/4.0.1&quot;&gt;MicroProfile Health 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-telemetry/releases/tag/1.1-RC1&quot;&gt;MicroProfile Telemetry 1.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-open-api/releases/tag/3.1&quot;&gt;MicroProfile OpenAPI 3.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-jwt-auth/releases/tag/2.1&quot;&gt;MicroProfile JWT Authentication 2.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-rest-client/releases/tag/3.0.1&quot;&gt;MicroProfile Rest Client 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following three specifications have minor updates, while the other five specifications remain unchanged:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile Metrics 5.1&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile Telemetry 1.1&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile Config 3.1 (mainly some TCK updates to ensure the tests run against either CDI 3.x or CDI 4.0 Lite)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See the following sections for more details about each of these features and how to try them out.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mpmetrics&quot;&gt;MicroProfile Metrics 5.1: configure statistics tracked by Histogram and Timer metrics&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Metrics 5.1 includes new MicroProfile Config properties that are used for configuring the statistics that the Histogram and Timer metrics track and output. In MicroProfile Metrics 5.0, the Histogram and Timer metrics only track and output the &lt;em&gt;max&lt;/em&gt; recorded value, the &lt;em&gt;sum&lt;/em&gt; of all values, the &lt;em&gt;count&lt;/em&gt; of the recorded values, and a static set of percentiles for the 50th, 75th, 95th, 98th, 99th, and 99.9th percentile. These values are emitted to the &lt;code&gt;/metrics&lt;/code&gt; endpoint in Prometheus format.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new properties introduced in MicroProfile Metrics 5.1 allow you to define a custom set of percentiles as well as a custom set of histogram buckets for the Histogram and Timer metrics. There are also additional configuration properties for enabling a default set of histogram buckets, including properties for defining an upper and lower bound for the bucket set.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The properties in the following table allow you to define a semicolon-separated list of value definitions using the syntax:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;metric_name=value_1[,value_2…value_n]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 50%;&quot;&gt;
&lt;col style=&quot;width: 50%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Property&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.percentiles&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Defines a custom set of percentiles for matching Histogram and Timer metrics to track and output.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Accepts a set of integer and decimal values for a metric name pairing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Can be used to disable percentile output if no value is provided with a metric name pairing.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.histogram.buckets&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Defines a custom set of (cumulative) histogram buckets for matching Histogram metrics to track and output.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Accepts a set of integer and decimal values for a metric name pairing.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.timer.buckets&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Defines a custom set of (cumulative) histogram buckets for matching Timer metrics to track and output.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Accepts a set of decimal values with a time unit appended (i.e., ms, s, m, h) for a metric name pairing.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.percentiles-histogram.enabled&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Configures any matching Histogram or Timer metric to provide a large set of default histogram buckets to allow for percentile configuration with a monitoring tool.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Accepts a true/false value for a metric name pairing.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.histogram.max-value&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;When percentile-histogram is enabled for a Timer, this property defines a upper bound for the buckets reported.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Accepts a single integer or decimal value for a metric name pairing.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.histogram.min-value&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;When percentile-histogram is enabled for a Timer, this property defines a lower bound for the buckets reported.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Accepts a single integer or decimal value for a metric name pairing.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.timer.max-value&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;When percentile-histogram is enabled for a Histogram, this property defines a upper bound for the buckets reported.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Accepts a single decimal values with a time unit appended (i.e., ms, s, m, h) for a metric name pairing.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mp.metrics.distribution.timer.min-value&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;When percentile-histogram is enabled for a Histogram, this property defines a lower bound for the buckets reported.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Accepts a single decimal value with a time unit appended (i.e., ms, s, m, h) for a metric name pairing.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Some properties can accept multiple values for a given metric name while some can only accept a single value.
You can use an asterisk (i.e., *) as a wild card at the end of the metric name.
For example, the &lt;code&gt;mp.metrics.distribution.percentiles&lt;/code&gt; can be defined as:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;mp.metrics.distribution.percentiles=alpha.timer=0.5,0.7,0.75,0.8;alpha.histogram=0.8,0.85,0.9,0.99;delta.*=&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This example creates the &lt;code&gt;alpha.timer&lt;/code&gt; timer metric to track and output the 50th, 70th, 75th, and 80th percentile values. The &lt;code&gt;alpha.histogram&lt;/code&gt; histogram metric outputs the 80th, 85th, 90th, and 99th percentiles values. Percentiles are disabled for any Histogram or Timer metric that matches with &lt;code&gt;delta.*&lt;/code&gt; .&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We&amp;#8217;ll expand on the previous example and define histogram buckets for the &lt;code&gt;alpha.timer&lt;/code&gt; timer metric using the &lt;code&gt;mp.metrics.distribution.timer.buckets&lt;/code&gt; property:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;mp.metrics.distribution.timer.buckets=alpha.timer=100ms,200ms,1s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This configuration tells the metrics runtime to track and output the count of durations that fall within 0-100ms, 0-200ms, and 0-1 seconds. These values are ranges because the histogram buckets work &lt;em&gt;cumulatively&lt;/em&gt; .&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The corresponding Prometheus output for the &lt;code&gt;alpha.timer&lt;/code&gt; metric at the &lt;code&gt;/metrics&lt;/code&gt; REST endpoint is:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;# HELP alpha_timer_seconds_max
# TYPE alpha_timer_seconds_max gauge
alpha_timer_seconds_max{scope=&amp;quot;application&amp;quot;,} 5.633
# HELP alpha_timer_seconds
# TYPE alpha_timer_seconds histogram &lt;i class=&quot;conum&quot; data-value=&quot;1&quot;&gt;&lt;/i&gt;&lt;b&gt;(1)&lt;/b&gt;
alpha_timer_seconds{scope=&amp;quot;application&amp;quot;,quantile=&amp;quot;0.5&amp;quot;,} 0.67108864
alpha_timer_seconds{scope=&amp;quot;application&amp;quot;,quantile=&amp;quot;0.7&amp;quot;,} 5.603590144
alpha_timer_seconds{scope=&amp;quot;application&amp;quot;,quantile=&amp;quot;0.75&amp;quot;,} 5.603590144
alpha_timer_seconds{scope=&amp;quot;application&amp;quot;,quantile=&amp;quot;0.8&amp;quot;,} 5.603590144
alpha_timer_seconds_bucket{scope=&amp;quot;application&amp;quot;,le=&amp;quot;0.1&amp;quot;,} 0.0 &lt;i class=&quot;conum&quot; data-value=&quot;2&quot;&gt;&lt;/i&gt;&lt;b&gt;(2)&lt;/b&gt;
alpha_timer_seconds_bucket{scope=&amp;quot;application&amp;quot;,le=&amp;quot;0.2&amp;quot;,} 0.0 &lt;i class=&quot;conum&quot; data-value=&quot;2&quot;&gt;&lt;/i&gt;&lt;b&gt;(2)&lt;/b&gt;
alpha_timer_seconds_bucket{scope=&amp;quot;application&amp;quot;,le=&amp;quot;1.0&amp;quot;,} 1.0 &lt;i class=&quot;conum&quot; data-value=&quot;2&quot;&gt;&lt;/i&gt;&lt;b&gt;(2)&lt;/b&gt;
alpha_timer_seconds_bucket{scope=&amp;quot;application&amp;quot;,le=&amp;quot;+Inf&amp;quot;,} 2.0  &lt;i class=&quot;conum&quot; data-value=&quot;2&quot;&gt;&lt;/i&gt;&lt;b&gt;(2)&lt;/b&gt; &lt;i class=&quot;conum&quot; data-value=&quot;3&quot;&gt;&lt;/i&gt;&lt;b&gt;(3)&lt;/b&gt;
alpha_timer_seconds_count{scope=&amp;quot;application&amp;quot;,} 2.0
alpha_timer_seconds_sum{scope=&amp;quot;application&amp;quot;,} 6.333&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;colist arabic&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;conum&quot; data-value=&quot;1&quot;&gt;&lt;/i&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;The Prometheus metric type is &lt;code&gt;histogram&lt;/code&gt;. Both the quantiles or percentiles and buckets are represented under this type.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;conum&quot; data-value=&quot;2&quot;&gt;&lt;/i&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;The &lt;code&gt;le&lt;/code&gt; tag represents &lt;em&gt;less than&lt;/em&gt; and is for the defined buckets, which are converted to seconds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;conum&quot; data-value=&quot;3&quot;&gt;&lt;/i&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Prometheus requires a &lt;code&gt;+Inf&lt;/code&gt; bucket, which counts all hits.&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about MicroProfile Metrics, see:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-telemetry&quot;&gt;MicroProfile Metrics repo&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/introduction-monitoring-metrics.html&quot;&gt;Monitoring with metrics docs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mptel&quot;&gt;MicroProfile Telemetry 1.1: updated OpenTelemetry implementation&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Telemetry 1.1 provides developers with the latest Open Telemetry technology; the feature now consumes OpenTelemetry-1.29.0, updated from 1.19.0. Consequently, a lot of the dependencies are now stable.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the MicroProfile Telemetry 1.1 feature, add the following configuration to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;features&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpTelemetry-1.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/features&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Additionally, you must make third-party APIs visible for your application in the &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webApplication&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;location&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;demo-microprofile-telemetry-inventory.war&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;contextRoot&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- enable visibility to third party apis --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;classloader&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;apiTypeVisibility&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;+third-party&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/webApplication&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about MicroProfile Telemetry, see:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-telemetry&quot;&gt;MicroProfile Telemetry repo&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/open-telemetry/opentelemetry-specification/blob/v1.25.0/specification/trace/api.md&quot;&gt;OpenTelemetry spec&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/microprofile-telemetry.html&quot;&gt;Enable distributed tracing with MicroProfile Telemetry docs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;mpapi&quot;&gt;MicroProfile OpenAPI 3.1: OpenAPI doc endpoint path configuration&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile OpenAPI generates and serves OpenAPI documentation for JAX-RS applications that are deployed to the Open Liberty server. The OpenAPI documentation is served from &lt;code&gt;/openapi&lt;/code&gt; and a user interface for browsing this documentation is served from &lt;code&gt;/openapi/ui&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With MicroProfile OpenAPI 3.1, you can configure the paths for these endpoints by adding configuration to your &lt;code&gt;server.xml&lt;/code&gt;. For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;mpOpenAPI&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;docPath&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/my/openapi/doc/path&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;uiPath&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/docsUi&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When you set this configuration on a local test server, you can then access the OpenAPI document at &lt;code&gt;localhost:9080/my/openapi/doc/path&lt;/code&gt; and the UI at &lt;code&gt;localhost:9080/docsUi&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This is particularly useful if you want to expose the OpenAPI documentation through a Kubernetes ingress which routes requests to different services based on the path. For example, with this ingress configuration:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;key&quot;&gt;apiVersion&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;networking.k8s.io/v1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;key&quot;&gt;kind&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;Ingress&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;key&quot;&gt;metadata&lt;/span&gt;:
&lt;span class=&quot;key&quot;&gt;name&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;my-ingress&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;key&quot;&gt;spec&lt;/span&gt;:
&lt;span class=&quot;key&quot;&gt;rules&lt;/span&gt;:
- &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;http:&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;
    paths:
    - path: /appA
        pathType: Prefix
        backend:
        service:
            name: appA
            port:
            number: 9080&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You could use the following &lt;code&gt;server.xml&lt;/code&gt; configuration to ensure that the OpenAPI UI is available at &lt;code&gt;/appA/openapi/ui&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;mpOpenAPI&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;docPath&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/appA/openapi&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When &lt;code&gt;uiPath&lt;/code&gt; is not set,  it defaults to the value of &lt;code&gt;docPath&lt;/code&gt; with &lt;code&gt;/ui&lt;/code&gt; appended.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about MicroProfile OpenAPI, see:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-open-api&quot;&gt;MicroProfile OpenAPI repo&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/documentation-openapi.html&quot;&gt;API documentation with OpenAPI&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;data&quot;&gt;Jakarta Data beta 3: configure the data source used to query and persist data&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data is a new Jakarta EE specification being developed in the open that aims to standardize the popular data repository pattern across a variety of providers. Open Liberty includes the Jakarta Data 1.0 beta 3 release, which adds the ability to configure the data source that a Jakarta Data repository uses to query and persist data.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty beta includes a test implementation of Jakarta Data that we are using to experiment with proposed specification features so that developers can try out these features and provide feedback to influence the specification as it is being developed. The test implementation currently works with relational databases and operates by redirecting repository operations to the built-in Jakarta Persistence provider. In preparation for Jakarta EE 11, which will require a minimum of Java 21 (not yet generally available), it runs on Java 17 and simulates the entirety of the Jakarta Data beta 3 release, plus some additional proposed features that are under consideration.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data beta 3 allows the use of multiple data sources, with a specification-defined mechanism for choosing which data source a repository will use.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use Jakarta Data, you start by defining an entity class that corresponds to your data. With relational databases, the entity class corresponds to a database table and the entity properties (public methods and fields of the entity class) generally correspond to the columns of the table. You can define an entity class in one of the following ways:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Annotate the class with &lt;code&gt;jakarta.persistence.Entity&lt;/code&gt; and related annotations from Jakarta Persistence.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Define a Java class without entity annotations, in which case the primary key is inferred from an entity property named &lt;code&gt;id&lt;/code&gt; or ending with &lt;code&gt;Id&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You define one or more repository interfaces for an entity, annotate those interfaces as &lt;code&gt;@Repository&lt;/code&gt;, and inject them into components using &lt;code&gt;@Inject&lt;/code&gt;. The Jakarta Data provider supplies the implementation of the repository interface for you.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Here&amp;#8217;s a simple entity:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Product&lt;/span&gt; { &lt;span class=&quot;comment&quot;&gt;// entity&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; id;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; price;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows a repository that defines operations relating to the entity. It opts to specify the JNDI name of a data source where the entity data is to be stored and found:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;(dataStore = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/jdbc/my-example-data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Products&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; CrudRepository&amp;lt;Product, &lt;span class=&quot;predefined-type&quot;&gt;Long&lt;/span&gt;&amp;gt; {
    &lt;span class=&quot;comment&quot;&gt;// query-by-method name pattern:&lt;/span&gt;
    Page&amp;lt;Product&amp;gt; findByNameIgnoreCaseContains(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; searchFor, &lt;span class=&quot;predefined-type&quot;&gt;Pageable&lt;/span&gt; pageRequest);

    &lt;span class=&quot;comment&quot;&gt;// query via JPQL:&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;UPDATE Product o SET o.price = o.price - (?2 * o.price) WHERE o.id = ?1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; discount(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; discountRate);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the following example, we have chosen to define the data source with the &lt;code&gt;@DataSourceDefinition&lt;/code&gt; annotation, which we can place on a web component, such as the following example servlet.  We can then inject the repository and use it:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@DataSourceDefinition&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/jdbc/my-example-data&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      className = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;org.postgresql.xa.PGXADataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      databaseName = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ExampleDB&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      serverName = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      portNumber = &lt;span class=&quot;integer&quot;&gt;5432&lt;/span&gt;,
                      user = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${example.database.user}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                      password = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${example.database.password}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;MyServlet&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; HttpServlet {
    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    Products products;

    &lt;span class=&quot;directive&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doGet(HttpServletRequest req, HttpServletResponse resp)
            &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt; {
        &lt;span class=&quot;comment&quot;&gt;// Request only the first 20 results on a page, ordered by price, then name, then id:&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;Pageable&lt;/span&gt; pageRequest = &lt;span class=&quot;predefined-type&quot;&gt;Pageable&lt;/span&gt;.size(&lt;span class=&quot;integer&quot;&gt;20&lt;/span&gt;).sortBy(Sort.desc(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;), Sort.asc(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;), Sort.asc(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;));
        Page&amp;lt;Product&amp;gt; page1 = products.findByNameIgnoreCaseContains(searchFor, pageRequest);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;dataStore&lt;/code&gt; field of &lt;code&gt;@Repository&lt;/code&gt; can also point at the &lt;code&gt;id&lt;/code&gt; of a &lt;code&gt;databaseStore&lt;/code&gt; element or the &lt;code&gt;id&lt;/code&gt; or &lt;code&gt;jndiName&lt;/code&gt; of a &lt;code&gt;dataSource&lt;/code&gt; element from server configuration, or the name of a resource reference that is available to the application.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about Jakarta Data, see:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jakartaee/data/blob/main/spec/src/main/asciidoc/repository.asciidoc&quot;&gt;Jakarta Data specification draft&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://repo1.maven.org/maven2/jakarta/data/jakarta-data-api/1.0.0-b3/jakarta-data-api-1.0.0-b3-javadoc.jar&quot;&gt;Jakarta Data API 1.0.0-b3 Javadoc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Your feedback is welcome on all of the Jakarta Data features and will be helpful as the specification develops further. Let us know what you think and/or be involved directly in the specification on &lt;a href=&quot;https://github.com/jakartaee/data&quot;&gt;github&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;ltpa&quot;&gt;Support LTPA keys rotation without a planned outage&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty can now automatically generate new primary LTPA keys files while continuing to use validation keys files to validate LTPA tokens. This update enables you to rotate LTPA keys without any disruption to the application&amp;#8217;s user experience.  Previously, application users had to log in to their applications again after the Liberty server LTPA keys were rotated, which is no longer necessary.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Primary Keys are LTPA keys in the specified keys default &lt;code&gt;ltpa.keys&lt;/code&gt; file. Primary keys are used both for generating new LTPA tokens and for validating LTPA tokens. There can only be one primary keys file per Liberty runtime.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Validation keys are LTPA keys in any &lt;code&gt;.keys&lt;/code&gt; files other than the primary keys file. The validation keys are used only for validating LTPA tokens. They are &lt;em&gt;not&lt;/em&gt; used for generating new LTPA tokens. All validation keys must be located in the same directory as the primary keys file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;There are 2 ways to enable LTPA keys rotation without a planned outage: monitoring the primary keys file directory or specifying the validation keys file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;monitor-the-directory-of-the-primary-keys-file-for-any-new-validation-keys-files&quot;&gt;Monitor the directory of the primary keys file for any new validation keys files.&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the &lt;code&gt;monitorDirectory&lt;/code&gt; and &lt;code&gt;monitorInterval&lt;/code&gt; attributes. For example, add the following configurations to the &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;ltpa&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;monitorDirectory&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;monitorInterval&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;5m&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;monitorDirectory&lt;/code&gt; attribute monitors the &lt;code&gt;${server.config.dir}/resources/security/&lt;/code&gt; directory by default, but can monitor any directory the primary keys file is specified in. The directory monitor looks for any LTPA keys files with the &lt;code&gt;.keys&lt;/code&gt; extension. The Open Liberty server reads these LTPA keys and uses them as validation keys.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If the &lt;code&gt;monitorInterval&lt;/code&gt; is set to &lt;code&gt;0&lt;/code&gt;, the default value, the directory is not monitored.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;ltpa.keys&lt;/code&gt; file can be renamed, for example, &lt;code&gt;validation1.keys&lt;/code&gt; and then Liberty automatically regenerates a new &lt;code&gt;ltpa.keys&lt;/code&gt; file with new primary keys that are used for all new LTPA tokens created. The keys in &lt;code&gt;validation1.keys&lt;/code&gt; continue to be used for validating existing LTPA tokens.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When the &lt;code&gt;validation1.keys&lt;/code&gt; are no longer needed, remove them by deleting the file or by setting &lt;code&gt;monitorDirectory&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt;. It is recommended to remove unused validation keys as it can improve performance.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;specify-the-validation-keys-file-and-optionally-specify-a-date-time-to-stop-using-the-validation-keys&quot;&gt;Specify the validation keys file and optionally specify a date-time to stop using the validation keys.&lt;/h3&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;Copy the primary keys file (&lt;code&gt;ltpa.keys&lt;/code&gt;) to a validation keys file, for example &lt;code&gt;validation1.keys&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Modify the server configuration to use the validation keys file  by specifying a &lt;code&gt;validationKeys&lt;/code&gt; server configuration element inside the &lt;code&gt;ltpa&lt;/code&gt; element. For example, add the following configuration to the &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;ltpa&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;validationKeys&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;fileName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;validation1.keys&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;password&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;{xor}Lz4sLCgwLTs=&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;notUseAfterDate&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;2024-01-02T12:30:00Z&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;ltpa&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;validation1.keys&lt;/code&gt; file can be removed from use at a specified date-time in the future with the optional &lt;code&gt;notUseAfterDate&lt;/code&gt; attribute. It is recommended to use &lt;code&gt;notUseAfterDate&lt;/code&gt; to ignore validation keys after a given period as it can improve performance.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;fileName&lt;/code&gt; and &lt;code&gt;password&lt;/code&gt; attributes are required in the &lt;code&gt;validationKeys&lt;/code&gt; element, but &lt;code&gt;notUseAfterDate&lt;/code&gt; is optional.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After the validation keys file is loaded from the server configuration update, the original primary keys file (&lt;code&gt;ltpa.keys&lt;/code&gt;) can be deleted, which triggers new primary keys to be created while continuing to use &lt;code&gt;validation1.keys&lt;/code&gt; for validation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Specifying validation keys in this way can be combined with enabling monitor directory to also use validation keys that are not specified in the &lt;code&gt;server.xml&lt;/code&gt; configuration at the same time. For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;ltpa&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;monitorDirectory&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;monitorInterval&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;5m&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;validationKeys&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;fileName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;validation1.keys&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;password&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;{xor}Lz4sLCgwLTs=&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;notUseAfterDate&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;2024-01-02T12:30:00Z&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;ltpa&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To see all of the Liberty &lt;code&gt;&amp;lt;ltpa&amp;gt;&lt;/code&gt; server configuration options see &lt;a href=&quot;/docs/latest/reference/config/ltpa.html&quot;&gt;LTPA configuration docs&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;include&quot;&gt;Include all files in a specified directory in your server configuration&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can use the &lt;code&gt;include&lt;/code&gt; element in your &lt;code&gt;server.xml&lt;/code&gt; file to specify the location of files to include in your server configuration. In previous releases,  you had to specify the location for each include file individually. Now, you can place all the included files in a directory and just specify the directory location in the &lt;code&gt;include&lt;/code&gt; element.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This is important because when running on Kubernetes, mounting secrets as a whole folder is the only way to reflect the change from the secret dynamically in the running pod.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the &lt;code&gt;location&lt;/code&gt; attribute of the &lt;code&gt;include&lt;/code&gt; element of the &lt;code&gt;server.xml&lt;/code&gt; file, enter the directory that contains your configuration files. For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;include&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;location&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;./common/&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After you make the changes, you can see the following output in the log:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;[AUDIT   ] CWWKG0028A: Processing included configuration resource: /Users/rickyherget/libertyGit/open-liberty/dev/build.image/wlp/usr/servers/com.ibm.ws.config.include.directory/common/a.xml
[AUDIT   ] CWWKG0028A: Processing included configuration resource: /Users/rickyherget/libertyGit/open-liberty/dev/build.image/wlp/usr/servers/com.ibm.ws.config.include.directory/common/b.xml
[AUDIT   ] CWWKG0028A: Processing included configuration resource: /Users/rickyherget/libertyGit/open-liberty/dev/build.image/wlp/usr/servers/com.ibm.ws.config.include.directory/common/c.xml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The files in the directory are processed in alphabetical order and subdirectories are ignored.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about Liberty configuration includes, see &lt;a href=&quot;/docs/latest/reference/config/include.html&quot;&gt;Include configuration docs&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Try it now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 21, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.8.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;23.0.0.10-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try.  For example, for Jakarta Data Beta 3, you would include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.data&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta-data-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0.0-b3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.6.2'
    }
}
apply plugin: 'liberty'
dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[23.0.0.10-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;IntelliJ IDEA&lt;/a&gt;, &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Visual Studio Code&lt;/a&gt;, or &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Eclipse IDE&lt;/a&gt;, try our open source &lt;a href=&quot;https://openliberty.io/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty developer tools&lt;/a&gt; for efficient development, testing, debugging, and application management, all within your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 26 Sep 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/09/26/23.0.0.10-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/09/26/23.0.0.10-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>java-se</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>security</category>
        
        <category>spring</category>
        
        <category>metrics</category>
        
        <category>jakarta-ee</category>
        
        <category>performance-enhancements</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Simplifying data access with MySQL and Jakarta Data</title>
        <description>&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Many applications, especially in the enterprise domain, persist or access data in some form. Relational databases are still by far the most used persistence mechanism even though they are being challenged by technologies such as NoSQL databases. This article explores some concepts for data access and looks at how the new Jakarta Data specification makes data access simpler than ever for application developers.&lt;/p&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 22 Sep 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/redirected.html</link>
        <guid isPermaLink="true">
          
            https://blogs.oracle.com/javamagazine/post/jakarta-data-mysql
          
        </guid>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Spring Boot 3 support and Jakarta Data preview in Open Liberty 23.0.0.9-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty 23.0.0.9-beta release continues progress on two features that were introduced in previous betas: Spring Boot 3 support and the Jakarta Data preview.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Liberty Spring Boot Support 3.0 feature provides more complete support for running a Spring Boot 3.0 application on Liberty. It also provides the capability to &quot;thin&quot; the application when you create applications in containers. More information is available in the &lt;a href=&quot;/blog/2023/08/03/23.0.0.8-beta.html#sp3&quot;&gt;Spring Boot 3 support in Open Liberty 23.0.0.8-beta&lt;/a&gt; blog post.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data is a new Jakarta EE specification being developed that aims to standardize the popular Data Repository pattern across a variety of providers.  More information is available in the &lt;a href=&quot;/blog/2023/07/11/23.0.0.7-beta.html&quot;&gt;Jakarta Data beta 2 update in Open Liberty 23.0.0.7-beta&lt;/a&gt; blog post.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 23.0.0.9-beta release also includes &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 20, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;RELEASE&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;23.0.0.9-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try.  For example, for Jakarta Data Beta 2, you would include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.data&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta-data-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0.0-b2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[23.0.0.9-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 05 Sep 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/09/05/23.0.0.9-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/09/05/23.0.0.9-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>spring</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Spring Boot 3 support in Open Liberty 23.0.0.8-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 23.0.0.8-beta introduces support for Spring Boot 3, so you can use Spring Boot 3.x function in your Liberty applications.  This beta release also includes the very early preview of Jakarta Data.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 23.0.0.8-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#sp3&quot;&gt;Spring Boot 3.0 support&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#data&quot;&gt;Early preview of Jakarta Data&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;sp3&quot;&gt;Spring Boot 3.0 support&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Liberty Spring Boot Support 3.0 feature provides more complete support for running a Spring Boot 3.0 application on Liberty. It also provides the capability to &quot;thin&quot; the application when you create applications in containers.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Prior releases of Liberty provided support for Spring Boot 1.5 and Spring Boot 2.0 applications.  Liberty has also supported Spring Boot applications packaged as a WAR file, as demonstrated in &lt;a href=&quot;https://openliberty.io/blog/2023/06/15/running-spring-boot-3.html&quot;&gt;this recent blog post&lt;/a&gt;.  The Open Liberty 23.0.0.8-beta release enables you to deploy Spring Boot 3.x applications by enabling the &lt;code&gt;springboot-3.0&lt;/code&gt; feature, with support for both JAR and WAR file types.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To run a Spring Boot 3.x application on Liberty, you must be running with Java 17 or higher.  Additionally, if your application uses the &lt;a href=&quot;/docs/latest/reference/feature/servlet.html&quot;&gt;Jakarta Servlet&lt;/a&gt; feature, it must be Jakarta Servet 6.0. Configure these features in the &lt;code&gt;server.xml&lt;/code&gt; file, as shown in the following example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;features&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;springboot-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-6.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/features&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As with previous versions of the Spring Boot Support feature, Spring Boot application JAR files can be placed in the &lt;code&gt;/dropins/spring/&lt;/code&gt; directory.  Alternatively, specify the &lt;a href=&quot;/docs/latest/reference/config/springBootApplication.html&quot;&gt;Spring Boot configuration elements&lt;/a&gt; in the &lt;code&gt;server.xml&lt;/code&gt; file. For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt; &lt;span class=&quot;tag&quot;&gt;&amp;lt;springBootApplication&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;spring-boot-app&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;location&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;spring-boot-app-0.1.0.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;spring-boot-app&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you have used previous versions of the Spring Boot Support feature and are now migrating your application to use Spring Boot 3, note the following requirements:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/webProfile-10.0.html&quot;&gt;Jakarta EE 10 features&lt;/a&gt; must be used.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Security configuration requires in-application modifications. &lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter&quot;&gt;Spring Security without the WebSecurityConfigurerAdapter&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.spring.io/spring-security/reference/servlet/authorization/authorize-http-requests.html&quot;&gt;Authorize HttpServletRequests&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A new server template (&lt;code&gt;springBoot3&lt;/code&gt;) is available.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;data&quot;&gt;Early preview of Jakarta Data&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 23.0.0.8-beta release also includes a preview of Jakarta Data.  More information is available in the &lt;a href=&quot;/blog/2023/07/11/23.0.0.7-beta.html&quot;&gt;Jakarta Data beta 2 update in Open Liberty 23.0.0.7-beta&lt;/a&gt; blog post.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 20, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, add the All Beta Features package to your &lt;code&gt;pom.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;RELEASE&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;23.0.0.8-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try.  For example, for Jakarta Data Beta 2, you would include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.data&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta-data-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0.0-b2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[23.0.0.8-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 03 Aug 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/08/03/23.0.0.8-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/08/03/23.0.0.8-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>spring</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Liberty Tools, Maven plugin, and Gradle plugin updates for Java developers</title>
        <description>&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;fast-iterative-development-with-liberty-tools&quot;&gt;Fast iterative development with Liberty Tools&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty Tools 23.0.6 are now available for Java developers to write cloud-native applications with Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty Tools support popular integrated development environments (IDEs) such as Eclipse IDE, Visual Studio Code, and IntelliJ IDEA, allowing developers to focus on their code and rapidly iterate by using Liberty&amp;#8217;s &lt;a href=&quot;/docs/latest/development-mode.html&quot;&gt;dev mode&lt;/a&gt; in their preferred IDE. Moreover, Liberty Tools provide editing assistance for developers to easily make changes to the Liberty configuration files, and coding assistance for writing applications that use Jakarta EE (9.x and later) and MicroProfile (3.x and later) APIs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty Tools&lt;/a&gt; and download them from different IDE marketplaces:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Liberty Tools for Eclipse IDE&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Liberty Tools for Visual Studio Code&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;Liberty Tools for IntelliJ IDEA&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Please share your feedback and what you would like to see in future releases by opening issues in the GitHub repositories for &lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-eclipse/issues/new&quot;&gt;Liberty Tools for Eclipse IDE&lt;/a&gt;, &lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-vscode/issues/new&quot;&gt;Liberty Tools for Visual Studio Code&lt;/a&gt;, and &lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-intellij/issues/new&quot;&gt;Liberty Tools for IntelliJ IDEA&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;easily-build-package-and-run-applications-with-liberty-maven-gradle-plugins&quot;&gt;Easily build, package, and run applications with Liberty Maven &amp;amp; Gradle plugins&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty build plugins enable developers to easily build and package their applications to run on Liberty using the popular Java build tools, Maven and Gradle. It&amp;#8217;s always recommended to use the latest versions of these build plugins to ensure you have the most recent fixes and enhancements, Liberty Maven Plugin 3.8.2 and Liberty Gradle Plugin 3.6.2. For example, in Liberty Gradle Plugin 3.6, we added support for Gradle 8.x. For more information, see &lt;a href=&quot;https://github.com/OpenLiberty/ci.maven/releases&quot;&gt;Liberty Maven Plugin release notes&lt;/a&gt; and &lt;a href=&quot;https://github.com/OpenLiberty/ci.gradle/releases&quot;&gt;Liberty Gradle Plugin release notes&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use Liberty Maven Plugin 3.8.2, specify the following configuration in your Maven build file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.8.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use Liberty Gradle Plugin 3.6.2, specify the following configuration in your Gradle build file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;apply plugin: 'liberty'

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.6.2'
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you have requests or run into problems, create new issues in the GitHub repositories for &lt;a href=&quot;https://github.com/OpenLiberty/ci.maven/issues/new&quot;&gt;Liberty Maven Plugin&lt;/a&gt; and &lt;a href=&quot;https://github.com/OpenLiberty/ci.gradle/issues/new&quot;&gt;Liberty Gradle Plugin&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;contribute-to-open-liberty-and-leave-your-mark&quot;&gt;Contribute to Open Liberty and leave your mark&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Like the Open Liberty runtime itself, Liberty Tools, Liberty Maven Plugin, and Liberty Gradle Plugin are open source and are developed under the &lt;a href=&quot;https://github.com/OpenLiberty&quot;&gt;OpenLiberty organization on GitHub&lt;/a&gt;. You are welcome to contribute directly and make Liberty even better!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Take a look at the code, grab an issue, and send in a pull request:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-eclipse&quot;&gt;Liberty Tools for Eclipse IDE GitHub repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-vscode&quot;&gt;Liberty Tools for Visual Studio Code GitHub repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-intellij&quot;&gt;Liberty Tools for IntelliJ IDEA GitHub repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/ci.maven&quot;&gt;Liberty Maven Plugin GitHub repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/ci.gradle&quot;&gt;Liberty Gradle Plugin GitHub repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Wed, 12 Jul 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/07/12/liberty-ide-tools-maven-gradle-plugins-for-java-developers.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/07/12/liberty-ide-tools-maven-gradle-plugins-for-java-developers
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>maven</category>
        
        <category>gradle</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta Data beta 2 update in Open Liberty 23.0.0.7-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 23.0.0.7-beta updates the Jakarta Data preview by including the entirety of the Jakarta Data beta 2 release, as well as some additional proposed features that are being considered.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 23.0.0.7-beta includes the Jakarta Data feature, along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;SUB_TAG_0&quot;&gt;A Very Early Preview of Jakarta Data (23.0.0.7 beta)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In &lt;a href=&quot;/blog/2023/02/21/23.0.0.2-beta.html&quot;&gt;Open Liberty 23.0.0.2-beta&lt;/a&gt;, we introduced Jakarta Data, a new Jakarta EE specification being developed that aims to standardize the popular Data Repository pattern across a variety of providers. The &lt;a href=&quot;/blog/2023/04/18/23.0.0.4-beta.html&quot;&gt;23.0.0.4-beta release&lt;/a&gt; updated the preview to the beta 2 version, which this beta release expands on to include functionality such as query-by-method name, sorting and pagination, interoperability with entity classes from Jakarta Persistence, interoperability with Jakarta Transactions, and more.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty beta includes a test implementation of Jakarta Data that we are using to experiment with proposed specification features so that developers can try out these features and provide feedback to influence the specification as it is being developed. The test implementation currently works with relational databases and operates by redirecting repository operations to the built-in Jakarta Persistence provider. In preparation for Jakarta EE 11, which will require a minimum of Java 21 (not yet available), the feature runs on Java 17 and simulates the entirety of the Jakarta Data beta 2 release, plus some additional proposed features that are being considered.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use Jakarta Data, you start by defining an entity class that corresponds to your data. With relational databases, the entity class corresponds to a database table and the entity properties (public methods and fields of the entity class) generally correspond to the columns of the table. An entity class can be:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;annotated with &lt;code&gt;jakarta.persistence.Entity&lt;/code&gt; and related annotations from Jakarta Persistence&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;a Java class without entity annotations, in which case the primary key is inferred from an entity property named &lt;code&gt;id&lt;/code&gt; or ending with &lt;code&gt;Id&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You define one or more repository interfaces for an entity, annotate those interfaces as &lt;code&gt;@Repository&lt;/code&gt;, and inject them into components with CDI. The Jakarta Data provider supplies the implementation of the repository interface for you.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows a simple entity with a single repository interface.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Product&lt;/span&gt; { &lt;span class=&quot;comment&quot;&gt;// entity&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; id;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; price;
}

&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Products&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; CrudRepository&amp;lt;Product, &lt;span class=&quot;predefined-type&quot;&gt;Long&lt;/span&gt;&amp;gt; {
    &lt;span class=&quot;comment&quot;&gt;// query-by-method name pattern:&lt;/span&gt;
    Page&amp;lt;Product&amp;gt; findByNameIgnoreCaseContains(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; searchFor, &lt;span class=&quot;predefined-type&quot;&gt;Pageable&lt;/span&gt; pageRequest);

    &lt;span class=&quot;comment&quot;&gt;// query via JPQL:&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;UPDATE Product o SET o.price = o.price - (?2 * o.price) WHERE o.id = ?1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; discount(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; discountRate);

    &lt;span class=&quot;comment&quot;&gt;// experimental annotatively-defined query (not part of Jakarta Data 1.0)&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Filter&lt;/span&gt;(by = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;productId&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;annotation&quot;&gt;@Update&lt;/span&gt;(attr = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, op = &lt;span class=&quot;predefined-type&quot;&gt;Operation&lt;/span&gt;.Add)
    &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; increasePrice(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; prodId, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; amount);
}

&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;MyServlet&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; HttpServlet {
    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    Products products;

    &lt;span class=&quot;directive&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doGet(HttpServletRequest req, HttpServletResponse resp)
            &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt; {
        &lt;span class=&quot;comment&quot;&gt;// Request only the first 20 results on a page, ordered by price, then name, then id:&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;Pageable&lt;/span&gt; pageRequest = &lt;span class=&quot;predefined-type&quot;&gt;Pageable&lt;/span&gt;.size(&lt;span class=&quot;integer&quot;&gt;20&lt;/span&gt;).sortBy(Sort.desc(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;), Sort.asc(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;), Sort.asc(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;));
        Page&amp;lt;Product&amp;gt; page1 = products.findByNameIgnoreCaseContains(searchFor, pageRequest);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, refer to the the &lt;a href=&quot;https://github.com/jakartaee/data/blob/main/spec/src/main/asciidoc/repository.asciidoc&quot;&gt;draft of the Jakarta Data specification&lt;/a&gt; and the &lt;a href=&quot;https://search.maven.org/remotecontent?filepath=jakarta/data/jakarta-data-api/1.0.0-b2/jakarta-data-api-1.0.0-b2-javadoc.jar&quot;&gt;corresponding Javadoc&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We welcome your feedback on Jakarta Data and it will be helpful as the specification develops further. Let us know what you think, or get involved directly in the specification on &lt;a href=&quot;https://github.com/jakartaee/data&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out beta features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 20, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;RELEASE&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;23.0.0.7-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try.  For example, for Jakarta Data Beta 2, you would include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.data&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta-data-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0.0-b2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[23.0.0.7-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 11 Jul 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/07/11/23.0.0.7-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/07/11/23.0.0.7-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>How to package your cloud-native Java application for rapid startup</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Did you know you can repackage your cloud-native Java applications to start in milliseconds, without compromising throughput, memory, development-production parity, or Java language features? And with little to no refactoring of the application code? Here’s how…&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;the-need-for-speed-at-startup&quot;&gt;The need for speed at startup&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In serverless environments, scale-to-zero can help reduce the overall cloud costs for deployed applications by shutting down unneeded application instances when no ongoing requests exist. When activity picks up for the application, new instances can start quickly, without introducing noticeable delays for the application end user.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Despite improvements to JDK technology that make it start in less than 1 second, like class data sharing and dynamic AOT compilation, it still cannot start fast enough to support scale-to-zero. However, the JDK is important for optimizing throughput and memory, ensuring development-production parity, and enabling a full range of Java language features. So how do we improve startup time while also benefiting from running on the full JDK?&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The InstantOn capability in the Open Liberty runtime uses the IBM Semeru JDK and a Linux technology called &lt;a href=&quot;https://criu.org/Main_Page&quot;&gt;Checkpoint/Restore in Userspace&lt;/a&gt; (CRIU) to take a checkpoint, or a point-in-time snapshot, of the application process. This checkpoint can then be restored very quickly to bring the application process back into the state it was in when the checkpoint was taken. The application can be restored multiple times because Open Liberty and Semeru JDK preserve the uniqueness of each restored process in containers.  Each restored application process runs without first having to go through the whole startup sequence, saving up to 90% of startup time (depending on your application). InstantOn requires very little modification of your Java application to make this improvement happen.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following diagram demonstrates how the checkpoint that is taken during the container image build can be used to rapidly start multiple instances of an application in production by restoring them to the checkpointed phase of the application process.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/checkpoint4.jpg&quot; alt=&quot;diagram of the checkpoint and restore process&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;InstantOn cannot be used outside of a container image build. An application container image provides a consistent environment, which is required to ensure a reliable restore of an Open Liberty application process. Since the InstantOn checkpoint is included in the last layer of the application container image, the resources in the underlying layers of the image do not change from the time the checkpoint is taken to the time the image is restored.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following tutorial walks you through containerizing your application using the Open Liberty Java runtime, InstantOn, IBM Semeru JDK, and Podman container tools running on Linux. For general information about containerizing applications with Open Liberty, see the &lt;a href=&quot;/guides/containerize-podman.html&quot;&gt;Containerizing microservices with Podman&lt;/a&gt; guide.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;prerequisites-to-checkpointrestore-a-containerized-application&quot;&gt;Prerequisites to checkpoint/restore a containerized application&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Currently, &lt;a href=&quot;/blog/2023/06/27/23.0.0.6.html&quot;&gt;Open Liberty version 23.0.0.6&lt;/a&gt; or later supports running with InstantOn only on x86-64/amd64 architectures.
All our testing was done on RHEL 9.0 and Ubuntu 22.04 but it might also be possible to run on other Linux distributions and versions if they have the following prerequisites:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The kernel must support the Linux &lt;a href=&quot;https://man7.org/linux/man-pages/man7/capabilities.7.html&quot;&gt;CAP_CHECKPOINT_RESTORE&lt;/a&gt; capability. This capability was introduced in kernel version 5.9.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The latest available version of Podman for the Linux distribution must be installed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Linux distribution must allow the execution of privileged container builds by using Podman or Docker.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about the runtime and host build system prerequisites, see the &lt;a href=&quot;/docs/latest/instanton.html#prereq&quot;&gt;Open Liberty InstantOn documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;create-an-application-war-file&quot;&gt;Create an application WAR file&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you don’t have an application of your own handy, you can follow along with an example application from the &lt;a href=&quot;/guides/getting-started.html&quot;&gt;Getting started with Open Liberty guide&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;First, clone the &lt;a href=&quot;https://github.com/openliberty/guide-getting-started&quot;&gt;Git repository&lt;/a&gt; for the guide:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;console&quot;&gt;git clone https://github.com/openliberty/guide-getting-started.git
cd guide-getting-started&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Then, build the application, which is in the &lt;code&gt;finish/&lt;/code&gt; directory, and deploy it to Open Liberty:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;console&quot;&gt;cd finish
mvn liberty:run&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When you see the following message, your Open Liberty instance is ready:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;console&quot;&gt;The defaultServer server is ready to run a smarter planet.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out the service at the &lt;a href=&quot;http://localhost:9080/dev/system/properties&quot; class=&quot;bare&quot;&gt;http://localhost:9080/dev/system/properties&lt;/a&gt; URL.
Stop the running Open Liberty instance by pressing &lt;strong&gt;CTRL+C&lt;/strong&gt; in the command-line session where you started Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Lastly, build the WAR for the application:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;console&quot;&gt;mvn package&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This command builds a &lt;code&gt;target/guide-getting-started.war&lt;/code&gt; archive. We can now include this WAR in a container image that uses the InstantOn feature.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;testing-the-startup-time-of-your-application&quot;&gt;Testing the startup time of your application&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For comparison of how long it takes your Open Liberty application container image to start both with and without InstantOn, we describe how to build the container image without InstantOn first. Then, we describe how to build with InstantOn and run the resulting containers.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;containerizing-the-open-liberty-application-without-instanton&quot;&gt;Containerizing the Open Liberty application without InstantOn&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Build the application container image without InstantOn:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;console&quot;&gt;podman build -t getting-started .&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This command creates the getting-started container image without any checkpoint image.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Run this application container:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;console&quot;&gt;podman run --name getting-started --rm -p 9080:9080 getting-started&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Note the amount of time Open Liberty takes to report it is started and check out the service running in the container at the &lt;a href=&quot;http://localhost:9080/dev/system/properties&quot; class=&quot;bare&quot;&gt;http://localhost:9080/dev/system/properties&lt;/a&gt; URL. After you finish checking out the application, stop the running container by pressing &lt;strong&gt;CTRL+C&lt;/strong&gt; in the command-line session where you ran the &lt;code&gt;podman run&lt;/code&gt; command.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;containerizing-the-open-liberty-application-with-instanton&quot;&gt;Containerizing the Open Liberty application with InstantOn&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty container image contains the prerequisites for building an application container image with a checkpointed runtime process. Applications can use the Open Liberty image as a base to build their own application container images and from that, create their own application container image with a checkpointed process.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;build&quot;&gt;Build the application container image and checkpoint the application&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;An InstantOn checkpoint is created by starting the Open Liberty runtime during the application container image build step. During this startup, the runtime processes the configuration, loads all the enabled features, and starts processing the configured application. Depending on the needs of your application, you can choose one of two specific phases during Open Liberty startup at which to checkpoint the process. You must configure the Dockerfile to specify your chosen phase (as we show later).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The official &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;Open Liberty images from the IBM Container Registry&lt;/a&gt; (ICR) include all the prerequisites that are needed for InstantOn to checkpoint an application process. For this example, the &lt;code&gt;getting-started&lt;/code&gt; application container image is using the &lt;code&gt;icr.io/appcafe/open-liberty:full-java11-openj9-ubi&lt;/code&gt; image from ICR as the parent image. Currently, InstantOn is supported only with the Java 11 and Java 17-based UBI images of Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Update the application Dockerfile by adding a &lt;code&gt;RUN&lt;/code&gt; command for the &lt;code&gt;checkpoint.sh&lt;/code&gt; script to the end of the file, as shown in the following example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;console&quot;&gt;FROM icr.io/appcafe/open-liberty:full-java11-openj9-ubi
ARG VERSION=1.0
ARG REVISION=SNAPSHOT
LABEL \
  org.opencontainers.image.authors=&amp;quot;Your Name&amp;quot; \
  org.opencontainers.image.vendor=&amp;quot;IBM&amp;quot; \
  org.opencontainers.image.url=&amp;quot;local&amp;quot; \
  org.opencontainers.image.source=&amp;quot;https://github.com/OpenLiberty/guide-getting-started&amp;quot; \
  org.opencontainers.image.version=&amp;quot;$VERSION&amp;quot; \
  org.opencontainers.image.revision=&amp;quot;$REVISION&amp;quot; \
  vendor=&amp;quot;Open Liberty&amp;quot; \
  name=&amp;quot;system&amp;quot; \
  version=&amp;quot;$VERSION-$REVISION&amp;quot; \
  summary=&amp;quot;The system microservice from the Getting Started guide&amp;quot; \
  description=&amp;quot;This image contains the system microservice running with the Open Liberty runtime.&amp;quot;

COPY --chown=1001:0 src/main/liberty/config/ /config/
COPY --chown=1001:0 target/*.war /config/apps/

RUN configure.sh
RUN checkpoint.sh afterAppStart&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This configuration adds the application process checkpoint as the last layer of the application container image. The &lt;code&gt;checkpoint.sh&lt;/code&gt; script allows you to specify either &lt;code&gt;afterAppStart&lt;/code&gt; or &lt;code&gt;beforeAppStart&lt;/code&gt; to indicate which phase of the startup performs the process checkpoint.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Two options are available to determine whether the checkpoint occurs before or after the application itself starts:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;beforeAppStart&lt;/code&gt;: The checkpoint happens after processing the configured application metadata. If the application has any components that get run as part of the application starting, the checkpoint is taken before executing any code from the application. This option is the earliest checkpoint phase that is offered by InstantOn.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;afterAppStart&lt;/code&gt;: This option is the latest phase where a checkpoint can happen, so it has the potential to provide the fastest startup time when restoring the application instance. The checkpoint happens after all configured applications are reported as started. This phase happens before opening any ports for listening to incoming requests for the applications.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;afterAppStart&lt;/code&gt; phase typically provides the quickest startup time for an application, but it also might cause some application code to run before the server process checkpoint happens. Since the &lt;code&gt;getting-started&lt;/code&gt; application used in this tutorial does not do anything in its startup logic that would cause problems in restoring, we can use the &lt;code&gt;afterAppStart&lt;/code&gt; phase for it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For InstantOn to take a checkpoint of and restore a process, the CRIU binary requires additional &lt;a href=&quot;/docs/latest/instanton.html#linux-capabilities&quot;&gt;Linux capabilities&lt;/a&gt;. The Open Liberty container image includes the necessary capabilities already granted to the binary. However, the container must also have these capabilities granted when it is launched.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With podman, you can use the &lt;code&gt;-–cap-add&lt;/code&gt; and &lt;code&gt;--security-opt&lt;/code&gt; options to grant the container build the necessary capabilities to take a checkpoint during the container build step. The user who launches the Podman container must have the authority to grant it the necessary Linux capabilities, so you must run the following command as root or &lt;code&gt;sudo&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;console&quot;&gt;podman build \
   -t dev.local/getting-started-instanton \
   --cap-add=CHECKPOINT_RESTORE \
   --cap-add=SYS_PTRACE\
   --cap-add=SETPCAP \
   --security-opt seccomp=unconfined .&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The last instruction in the Dockerfile is to run the &lt;code&gt;checkpoint.sh&lt;/code&gt; script. When you execute the previous Podman build command, it launches Open Liberty to perform the checkpoint at the phase specified in the Dockerfile. After the container process data is persisted, Open Liberty stops and the container image build completes. The produced application container image contains the checkpoint process data as the last layer of the container image. The output looks something like the following example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;console&quot;&gt;Performing checkpoint --at=afterAppStart

Launching defaultServer (Open Liberty 23.0.0.6/wlp-1.0.78.cl230620230612-1100) on Eclipse OpenJ9 VM, version 11.0.19+7 (en_US)
[AUDIT   ] CWWKE0001I: The server defaultServer has been launched.
[AUDIT   ] CWWKG0093A: Processing configuration drop-ins resource: /opt/ol/wlp/usr/servers/defaultServer/configDropins/defaults/keystore.xml
[AUDIT   ] CWWKG0093A: Processing configuration drop-ins resource: /opt/ol/wlp/usr/servers/defaultServer/configDropins/defaults/open-default-port.xml
[AUDIT   ] CWWKZ0058I: Monitoring dropins for applications.
[AUDIT   ] CWWKZ0001I: Application guide-getting-started started in 1.886 seconds.
[AUDIT   ] CWWKC0451I: A server checkpoint &amp;quot;afterAppStart&amp;quot; was requested. When the checkpoint completes, the server stops.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;run&quot;&gt;Run the InstantOn application image&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Run the &lt;code&gt;getting-started-instanton&lt;/code&gt; container with the following command:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;console&quot;&gt;podman run \
  --rm \
  --cap-add=CHECKPOINT_RESTORE \
  --cap-add=SETPCAP \
  --security-opt seccomp=unconfined \
  -p 9080:9080 \
  getting-started-instanton&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;--cap-add&lt;/code&gt; options grant the container the two Linux capabilities that CRIU requires to restore the application process. When Open Liberty restores the application process, it logs the following messages:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;console&quot;&gt;[AUDIT   ] Launching defaultServer (Open Liberty 23.0.0.6/wlp-1.0.78.cl230620230612-1100) on Eclipse OpenJ9 VM, version 11.0.19+7 (en_US)
[AUDIT   ] CWWKZ0001I: Application guide-getting-started started in 0.233 seconds.
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://850ba43df239:9080/dev/
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://850ba43df239:9080/metrics/
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://850ba43df239:9080/health/
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://850ba43df239:9080/ibm/api/
[AUDIT   ] CWWKC0452I: The Liberty server process resumed operation from a checkpoint in 0.283 seconds.
[AUDIT   ] CWWKF0012I: The server installed the following features: [cdi-4.0, distributedMap-1.0, jndi-1.0, json-1.0, jsonb-3.0, jsonp-2.1, monitor-1.0, mpConfig-3.0, mpHealth-4.0, mpMetrics-5.0, restfulWS-3.1, restfulWSClient-3.1, ssl-1.0, transportSecurity-1.0].
[AUDIT   ] CWWKF0011I: The defaultServer server is ready to run a smarter planet. The defaultServer server started in 0.297 seconds.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If Open Liberty fails to restore the checkpoint process, it recovers by launching without the checkpoint image and logs the following message:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;console&quot;&gt;CWWKE0957I: Restoring the checkpoint server process failed. Check the /logs/checkpoint/restore.log log to determine why the checkpoint process was not restored. Launching the server without using the checkpoint image.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check how long it took for Open Liberty to start and compare this to the time it took without InstantOn.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;performance-results&quot;&gt;Performance results&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;InstantOn improves startup time of Open Liberty applications significantly by restoring the process from the checkpointed state. The improvement in the time to first response (i.e. the time taken to serve the first request) is also impressive but obviously more of the application logic runs after the restore in that case. We measured both metrics for multiple applications running in containers and using the &lt;code&gt;afterAppStart&lt;/code&gt; checkpoint phase.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/HotswapProjects/pingperf-quarkus/&quot;&gt;Pingperf&lt;/a&gt; is a very simple ping-type application involve a single REST endpoint.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/johnaohara/quarkusRestCrudDemo/&quot;&gt;Rest crud&lt;/a&gt; is a bit more complicated, and involves JPA and a remote database.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/blueperf/acmeair-mainservice-java#acme-air-main-service---javaliberty/&quot;&gt;AcmeAir Microservice Main&lt;/a&gt; uses the MicroProfile features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/startup.png&quot; alt=&quot;Startup time in ms&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/response.png&quot; alt=&quot;First response time in ms&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These experiments show a healthy improvement in startup times for all 3 applications and the time to first response is also improved by up to 8.8x when compared with normal JVM mode without InstantOn.&lt;sup class=&quot;footnote&quot;&gt;[&lt;a id=&quot;_footnoteref_1&quot; class=&quot;footnote&quot; href=&quot;#_footnotedef_1&quot; title=&quot;View footnote.&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This post describes how to configure your cloud-native application to start almost immediately by using the Open Liberty InstantOn feature to produce an application container image. The key value proposition of InstantOn is that you can repackage your cloud-native Java applications to start in milliseconds, without compromising on throughput, memory, development-production parity, or Java language features.
This feature is now available in &lt;a href=&quot;/blog/2023/06/27/23.0.0.6.html&quot;&gt;Open Liberty 23.0.0.6&lt;/a&gt; on the X86-64/AMD64 platforms running in the public cloud AWS EKS and Azure AKS environments.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the future, we are planning to broaden our platform coverage and expand to be able to run in more managed public and hybrid cloud environments. We also intend to explore supporting InstantOn with an even larger set of Open Liberty features. For more details about Open Liberty InstantOn, see the &lt;a href=&quot;/docs/latest/instanton.html&quot;&gt;Faster startup for containerized applications with Open Liberty InstantOn&lt;/a&gt; documentation, which links to more elaborate discussion on known limitations and information on the Semeru JDK support for this feature.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;hr&gt;
&lt;div class=&quot;footnote&quot; id=&quot;_footnotedef_1&quot;&gt;
&lt;a href=&quot;#_footnoteref_1&quot;&gt;1&lt;/a&gt;. These experiments were run on a 24-core Linux X86-64 system, and &lt;code&gt;taskset -c&lt;/code&gt; was used to allocate 4 cores to the Open Liberty process running in containers in each case. Startup time is measured from the time the Open Liberty server startup is initiated to the time the server is ready to accept requests, as denoted by &lt;code&gt;The &amp;lt;server name&amp;gt; server is ready to run a smarter planet.&lt;/code&gt; message in the &lt;code&gt;messages.log&lt;/code&gt;. The time it takes to start the container itself is also included in the results shown. InstantOn versus normal startup times for these applications are shown here in milliseconds. Your results might vary based on your environment, hardware and software installed on your system, and other factors.
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 29 Jun 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/06/29/rapid-startup-instanton.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/06/29/rapid-startup-instanton
          
        </guid>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        <category>performance-enhancements</category>
        
        <category>devops</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>InstantOn startup and Liberty Tools in Open Liberty 23.0.0.6</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 23.0.0.6 adds the exciting Liberty InstantOn capability! With InstantOn, your applications can start in milliseconds, without compromising on throughput, memory, development-production parity, or Java language features.  We are also excited to announce the release of the Liberty Tools v23.0.6, which makes Liberty development even faster by providing various development comforts like hover-over, quick fix, and diagnostic support.  This release also provides many significant bug fixes, including one that addresses a CVE in the MicroProfile GraphQL features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 23.0.0.6:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#InstantOn&quot;&gt;Rapid startup with Liberty InstantOn&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#devTools&quot;&gt;Liberty Development Tools&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#CVEs&quot;&gt;Security Vulnerability (CVE) Fixes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#bugs&quot;&gt;Notable bug fixes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out &lt;a href=&quot;/blog/?search=release&amp;amp;search!=beta&quot;&gt;previous Open Liberty GA release blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Join our live webinars with the Open Liberty development team. Get updates and answers to your questions. The webinars are scheduled to accommodate different timezones and are similar in content.  Register here to join live or to access the recordings later:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://community.ibm.com/community/user/wasdevops/events/event-description?CalendarEventKey=9165859e-ab3b-4439-9082-0187393599b9&amp;amp;CommunityKey=5c4ba155-561a-4794-9883-bb0c6164e14e&amp;amp;Home=%2fcommunity%2fuser%2fwasdevops%2fcommunities%2fcommunity-home%2frecent-community-events&amp;amp;utm_source=ol&amp;amp;utm_medium=article&amp;amp;utm_content=release23006&quot;&gt;July 13, 9am-10:30am (ET)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://community.ibm.com/community/user/wasdevops/events/event-description?CalendarEventKey=3566b086-bbbb-4da2-9ace-0187390632c1&amp;amp;CommunityKey=5c4ba155-561a-4794-9883-bb0c6164e14e&amp;amp;Home=%2fcommunity%2fuser%2fwasdevops%2fcommunities%2fcommunity-home%2frecent-community-events&amp;amp;utm_source=ol&amp;amp;utm_medium=article&amp;amp;utm_content=release23006&quot;&gt;July 20, 1pm-2:30pm (ET)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Run your apps using 23.0.0.6&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;23.0.0.6&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '[23.0.0.6,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/start/&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://stackoverflow.com/tags/open-liberty&quot;&gt;&lt;img src=&quot;/img/blog/blog_btn_stack.svg&quot; alt=&quot;Ask a question on Stack Overflow&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;InstantOn&quot;&gt;Rapid startup with Liberty InstantOn&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Performance is one of the core focuses and differentiators of the Liberty runtime. &lt;a href=&quot;/blog/2019/10/30/faster-startup-open-liberty.html&quot;&gt;As far back as 2019&lt;/a&gt;, Liberty was able to start up in ~1sec. Since then, Liberty has continued to pursue even faster startup, and this focus on performance has resulted in the InstantOn capability.  Liberty InstantOn enables your applications to start in milliseconds, without compromising on throughput, memory, development-production parity, or Java language features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To reduce the cost of running applications in the cloud, it is ideal to run the application only when it is needed. Unneeded application instances should be stopped.  As soon as activity increases again, a new application instance needs to start up quickly and respond to incoming requests efficiently. This is known as scale-to-zero.  Applications that take multiple seconds to start cannot scale-to-zero without introducing high latency for the application user.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;InstantOn uses the Checkpoint/Restore In Userspace (&lt;a href=&quot;https://criu.org/&quot;&gt;CRIU&lt;/a&gt;) feature of the Linux kernel to take a checkpoint of the JVM that can be restored later. With InstantOn, the application is developed as normal, and then InstantOn makes a checkpoint of the application process when the application container image is built. When the application is restored, it runs in the same JVM, which provides complete parity between development and production. Because the checkpoint process takes only seconds, your CI/CD process is barely affected.  The restoration of the image takes only milliseconds, allowing your applications to quickly scale up and down, which provides cost benefits without any negative impacts on the end users.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;InstantOn supports Jakarta EE Web Profile versions 8.0 and later, MicroProfile versions 4.1 and later, as well as several other Liberty features. For more information, see the &lt;a href=&quot;/blog/2023/06/29/rapid-startup-instanton.html&quot;&gt;How to package your cloud-native Java application for rapid startup&lt;/a&gt; blog post and the &lt;a href=&quot;/docs/latest/instanton.html&quot;&gt;Faster startup with InstantOn&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;devTools&quot;&gt;Liberty Tools&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Liberty Tools v23.0.6 are now available! Some highlights include diagnostic and hover support for MicroProfile (3.x and later) and Jakarta EE Web Profile (9.x and later) APIs, as well as various Liberty config files.  The Liberty Tools are available for Visual Studio Code, IntelliJ IDEA, and Eclipse IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To get started with the Liberty Tools, you can obtain the link to install the tools for your favorite IDE from the &lt;a href=&quot;/start/&quot;&gt;Get started with Open Liberty&lt;/a&gt; page.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, see the &lt;a href=&quot;/docs/latest/develop-liberty-tools.html&quot;&gt;Develop with Liberty Tools&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;CVEs&quot;&gt;Security vulnerability (CVE) fixes in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;CVE&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;CVSS Score&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Vulnerability Assessment&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Versions Affected&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-28867&quot;&gt;CVE-2023-28867&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;7.5&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Denial of service&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;17.0.0.3 - 23.0.0.5&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Affects the &lt;a href=&quot;/docs/latest/reference/feature/mpGraphQL-1.0.html&quot;&gt;mpGraphQL-1.0&lt;/a&gt; and &lt;a href=&quot;/docs/latest/reference/feature/mpGraphQL-2.0.html&quot;&gt;mpGraphQL-2.0&lt;/a&gt; features&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For a list of past security vulnerability fixes, see the &lt;a href=&quot;/docs/latest/security-vulnerabilities.html&quot;&gt;Security vulnerability (CVE) list&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;bugs&quot;&gt;Notable bugs fixed in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We’ve spent some time fixing bugs. The following sections describe just some of the issues resolved in this release. If you’re interested, here’s the  &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A23006+label%3A%22release+bug%22&quot;&gt;full list of bugs fixed in 23.0.0.6&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/25283&quot;&gt;JSF Container&amp;#8217;s Application.getWrapped returns null&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The JSF Container features return &lt;code&gt;null&lt;/code&gt; when &lt;code&gt;javax.faces.application.Application.getWrapped&lt;/code&gt; method is called.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been resolved and the correct wrapped object is returned.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/25168&quot;&gt;transport close timing issue when streams are closing and a close/goaway frame comes in&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Since Http/2 and webSocket are full duplex connections, multiple threads might be working at the same time on the same connection.  A timing window existed where one thread is closing down the connection, gets interrupted, and another thread closes the connection.  Then the first thread wakes back up to resources that have already been freed.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The error may produce an exception similar to the following:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;java.io.IOException: Request not read yet
&amp;gt; at com.ibm.ws.http.channel.internal.inbound.HttpInboundServiceContextImpl.finishResponseMessage(HttpInboundServiceContextImpl.java:907)
&amp;gt; at com.ibm.ws.http.channel.internal.inbound.HttpInboundServiceContextImpl.finishResponseMessage(HttpInboundServiceContextImpl.java:989)
&amp;gt; at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.close(HttpInboundLink.java:678)
&amp;gt; at com.ibm.wsspi.channelfw.base.InboundApplicationLink.close(InboundApplicationLink.java:105)
&amp;gt; at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.close(HttpDispatcherLink.java:244)
&amp;gt; at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.finish(HttpDispatcherLink.java:1022)
&amp;gt; at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:293)
&amp;gt; at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:1159)
&amp;gt; at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.wrapHandlerAndExecute(HttpDispatcherLink.java:428)
&amp;gt; at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:387)
&amp;gt; at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:566)
&amp;gt; at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:500)
&amp;gt; at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:360)
&amp;gt; at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:327)
&amp;gt; at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:167)
&amp;gt; at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:75)
&amp;gt; at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:504)
&amp;gt; at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:574)
&amp;gt; at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:958)
&amp;gt; at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1047)
&amp;gt; at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:238)
&amp;gt; at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
&amp;gt; at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
&amp;gt; at java.base/java.lang.Thread.run(Thread.java:834)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been resolved by ensuring a thread doesn&amp;#8217;t attempt to close a connection that has already been closed by another thread.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/25017&quot;&gt;Posting Form-Data with the new Jakarta EE 10 Multipart Support fails&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When posting multipart/form-data to a REST endpoint using the &lt;code&gt;@FormParam&lt;/code&gt; annotation for an &lt;code&gt;EntityPart&lt;/code&gt; or &lt;code&gt;InputStream&lt;/code&gt; parameter, the request fails with a &lt;code&gt;400 Bad Request&lt;/code&gt; response, and the following exception is logged:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;jakarta.ws.rs.BadRequestException: RESTEASY003320: Failed processing arguments of public java.lang.String com.demo.rest.TestResource.upload(java.lang.String,jakarta.ws.rs.core.EntityPart) throws java.io.IOException
at org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:120)
Caused by: java.lang.UnsupportedOperationException: SRVE8020E: Servlet does not accept multipart requests
at com.ibm.ws.webcontainer.srt.SRTServletRequest.prepareMultipart(SRTServletRequest.java:3838)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;During deployment, when using an &lt;code&gt;EntityPart&lt;/code&gt; parameter, the following warning is logged:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;SROAP04005: Could not find schema class in index: jakarta.ws.rs.core.EntityPart&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been resolved and the &lt;code&gt;@FormParam&lt;/code&gt; annotation can now be used with EntityParts.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/24981&quot;&gt;server version command ignores JAVA_HOME set in server&amp;#8217;s server.env&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;server version &amp;lt;serverName&amp;gt;&lt;/code&gt; command ignores the &lt;code&gt;JAVA_HOME&lt;/code&gt; variable that is set in the server&amp;#8217;s &lt;code&gt;server.env&lt;/code&gt; file.
Instead it prints out the Java version info of the Java installation set by &lt;code&gt;JAVA_HOME&lt;/code&gt; variable in shell environment (bash).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been resolved and the &lt;code&gt;server version&lt;/code&gt; command now correctly identifies the Java version as specified in the &lt;code&gt;server.env&lt;/code&gt; file.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-open-liberty-23-0-0-6-now&quot;&gt;Get Open Liberty 23.0.0.6 now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Available through &lt;a href=&quot;#run&quot;&gt;Maven, Gradle, Docker, and as a downloadable archive&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 27 Jun 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/06/27/23.0.0.6.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/06/27/23.0.0.6
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>maven</category>
        
        <category>docker</category>
        
        <category>gradle</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        <category>performance-enhancements</category>
        
        <category>devops</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Enterprise Kotlin: Kotlin and Jakarta EE</title>
        <description>&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Mads Opheim investigates two questions: 1. can you use Jakarta EE and Kotlin in combination, and 2. should you?&lt;/p&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/redirected.html</link>
        <guid isPermaLink="true">
          
            https://medium.com/compendium/enterprise-kotlin-kotlin-and-jakarta-ee-9b9d73c8268e
          
        </guid>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>MicroProfile 6 and Jakarta EE 10 guide updates in Open Liberty 23.0.0.5</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Concurrent with the Open Liberty 23.0.0.5 release, 44 of the Open Liberty guides have been updated to make use of the latest MicroProfile 6 and Jakarta EE 10 specifications.  Various bugs have been fixed as part of this release.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 23.0.0.5:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#guides&quot;&gt;44 guides updated to use MicroProfile 6 and Jakarta EE 10&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#bugs&quot;&gt;Notable bug fixes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out &lt;a href=&quot;/blog/?search=release&amp;amp;search!=beta&quot;&gt;previous Open Liberty GA release blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Run your apps using 23.0.0.5&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;23.0.0.5&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '[23.0.0.5,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/start/&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://stackoverflow.com/tags/open-liberty&quot;&gt;&lt;img src=&quot;/img/blog/blog_btn_stack.svg&quot; alt=&quot;Ask a question on Stack Overflow&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;guides&quot;&gt;44 guides updated to use MicroProfile 6 and Jakarta EE 10&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As Open Liberty features and functionality continue to grow, we continue to add &lt;a href=&quot;https://openliberty.io/guides/?search=new&amp;amp;key=tag&quot;&gt;new guides to openliberty.io&lt;/a&gt; on those topics to make their adoption as easy as possible.  Existing guides also receive updates to address any reported bugs/issues, keep their content current, and expand what their topic covers.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Concurrent with the 23.0.0.5 release, the following 44 guides have been updated to use the latest MicroProfile 6 and Jakarta EE 10 specifications:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/jpa-intro.html&quot;&gt;Accessing and persisting data in microservices using Java Persistence API (JPA)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-health.html&quot;&gt;Adding health reports to microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/social-media-login.html&quot;&gt;Authenticating users through social media providers&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/jakarta-websocket.html&quot;&gt;Bidirectional communication between services using Jakarta WebSocket&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/gradle-intro.html&quot;&gt;Building a web application with Gradle&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/maven-intro.html&quot;&gt;Building a web application with Maven&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-fallback.html&quot;&gt;Building fault-tolerant microservices with the @Fallback annotation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/sessions.html&quot;&gt;Caching HTTP session data using JCache and Hazelcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/kubernetes-microprofile-health.html&quot;&gt;Checking the health of microservices on Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/kubernetes-microprofile-config.html&quot;&gt;Configuring microservices running in Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-config.html&quot;&gt;Configuring microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-rest-client.html&quot;&gt;Consuming RESTful services with template interfaces&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/rest-client-angularjs.html&quot;&gt;Consuming a RESTful web service with AngularJS&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/rest-client-angular.html&quot;&gt;Consuming a RESTful web service with Angular&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/rest-client-reactjs.html&quot;&gt;Consuming a RESTful web service with ReactJS&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/rest-client-java.html&quot;&gt;Consuming a RESTful web service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/containerize-podman.html&quot;&gt;Containerizing microservices with Podman&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/containerize.html&quot;&gt;Containerizing microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/rest-intro.html&quot;&gt;Creating a RESTful web service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/rest-hateoas.html&quot;&gt;Creating a hypermedia-driven RESTful web service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/maven-multimodules.html&quot;&gt;Creating a multi-module application&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/openliberty-operator-intro.html&quot;&gt;Deploying a microservice to Kubernetes using Open Liberty Operator&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/openliberty-operator-openshift.html&quot;&gt;Deploying a microservice to OpenShift 4 by using Open Liberty Operator&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/cloud-aws.html&quot;&gt;Deploying microservices to Amazon Web Services&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/cloud-azure.html&quot;&gt;Deploying microservices to Azure Kubernetes Service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/cloud-ibm.html&quot;&gt;Deploying microservices to IBM Cloud Kubernetes Service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/kubernetes-intro.html&quot;&gt;Deploying microservices to Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-istio-retry-fallback.html&quot;&gt;Developing fault-tolerant microservices with Istio Retry and MicroProfile Fallback&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-openapi.html&quot;&gt;Documenting RESTful APIs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/cors.html&quot;&gt;Enabling Cross-Origin Resource Sharing (CORS)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/getting-started.html&quot;&gt;Getting started with Open Liberty&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/cdi-intro.html&quot;&gt;Injecting dependencies into microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/istio-intro.html&quot;&gt;Managing microservice traffic using Istio&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-graphql.html&quot;&gt;Optimizing REST queries for microservices with GraphQL&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/mongodb-intro.html&quot;&gt;Persisting data with MongoDB&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-metrics.html&quot;&gt;Providing metrics from a microservice&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/graphql-client.html&quot;&gt;Running GraphQL queries and mutations using a GraphQL client&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/security-intro.html&quot;&gt;Securing a web application&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/microprofile-jwt.html&quot;&gt;Securing microservices with JSON Web Tokens&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/grpc-intro.html&quot;&gt;Streaming messages between client and server services using gRPC&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/contract-testing.html&quot;&gt;Testing microservices with consumer-driven contracts&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/arquillian-managed.html&quot;&gt;Testing microservices with the Arquillian managed container&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/docker.html&quot;&gt;Using Docker containers to develop microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/guides/bean-validation.html&quot;&gt;Validating constraints with microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For the full list of Open Liberty guides, refer to the &lt;a href=&quot;/guides/&quot;&gt;guides page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;bugs&quot;&gt;Notable bugs fixed in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We’ve spent some time fixing bugs. The following sections describe just some of the issues resolved in this release. If you’re interested, here’s the  &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A23005+label%3A%22release+bug%22&quot;&gt;full list of bugs fixed in 23.0.0.5&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/24577&quot;&gt;Memory Leak in MicroProfile OpenAPI&amp;#8217;s SchemaRegistry.current&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A user reported a memory leak that occurred with each application restart, where 100MB of additional memory was used each time.  The culprit ended up coming from MicroProfile OpenAPI&amp;#8217;s &lt;code&gt;SchemaRegistry&lt;/code&gt; class.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been reported upstream to SmallRye, and has also been fixed directly in Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/24864&quot;&gt;HTTP/2 max frame size exceeded when compression is used&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When compression is configured in the &lt;code&gt;server.xml&lt;/code&gt; on an &lt;code&gt;httpendpoint&lt;/code&gt; and &lt;code&gt;http/2&lt;/code&gt; is used, the &lt;code&gt;http/2&lt;/code&gt; max frame size may be exceeded, leading to a &lt;code&gt;FRAME_SIZE_ERROR&lt;/code&gt; appearing in the server&amp;#8217;s log.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been resolved and the &lt;code&gt;http/2&lt;/code&gt; response data is now split into multiple data frames to avoid sending a data frame larger than the &lt;code&gt;http/2&lt;/code&gt; max frame size of the client.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/25010&quot;&gt;EntryNotFoundException thrown in federated registries when using custom input/output configuration&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When running with &lt;code&gt;federatedRegistries-1.0&lt;/code&gt;, it is possible to get an &lt;code&gt;EntryNotFoundException&lt;/code&gt; when defining a non-identifier type property for the federated registries input/output mapping. This exception can occur in any of the &lt;code&gt;com.ibm.ws.security.wim.registry.util.*Bridge&lt;/code&gt; classes, but the key is it originates from a &lt;code&gt;BridgeUtils.getEntityByIdentifier&lt;/code&gt; call.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following is an example stack:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;com.ibm.websphere.security.EntryNotFoundException: CWIML1010E: The user registry operation could not be completed. The uniqueId = null and uniqueName = null attributes of the identifier object are either not valid or not defined in the back-end repository.
        at com.ibm.ws.security.registry.internal.UserRegistryWrapper.getGroupsForUser(UserRegistryWrapper.java:248)
        at web.UserRegistryServlet.handleMethodRequest(UserRegistryServlet.java:140)
        at web.UserRegistryServlet.doGet(UserRegistryServlet.java:174)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1258)
        ...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been resolved and the method no longer throws &lt;code&gt;EntryNotFoundException&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/24939&quot;&gt;&lt;code&gt;requestTiming-1.0&lt;/code&gt; causes elevated (or spiking) CPU performance due to the &lt;code&gt;SlowRequestManager&lt;/code&gt; &lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When using the &lt;code&gt;requestTiming-1.0&lt;/code&gt; feature in OpenLiberty, the CPU usage is elevated. CPU impact correlates to CPU capacity.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This is more obvious when a lower threshold is set for the &quot;slow request&quot; threshold (i.e. e.g. &lt;code&gt;&amp;lt;= 15s&lt;/code&gt;). Even so, may not encounter a noticeable impact depending on CPU capacity.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This is also more obvious if the request has a high hung threshold or if the request is hung indefinitely and can not be terminated by by the &lt;code&gt;interruptHungRequest&lt;/code&gt; attribute (leading to an indefinite hang). This allows for a bigger window of opportunity to witness any CPU spikes/elevation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been resolved and the elevated CPU usage no longer occurs.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/25152&quot;&gt;Request Timing metrics not showing up with &lt;code&gt;mpMetrics-5.0&lt;/code&gt; (when used with &lt;code&gt;requestTiming-1.0&lt;/code&gt; feature).&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When using the &lt;code&gt;mpMetrics-5.0&lt;/code&gt; and &lt;code&gt;requestTiming-1.0&lt;/code&gt; features, the request timing metrics are not being provided.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been resolved and the expected request timing metrics are now provided.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-open-liberty-23-0-0-5-now&quot;&gt;Get Open Liberty 23.0.0.5 now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Available through &lt;a href=&quot;#run&quot;&gt;Maven, Gradle, Docker, and as a downloadable archive&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 30 May 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/05/30/23.0.0.5.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/05/30/23.0.0.5
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>InstantOn and Jakarta Data in Open Liberty 23.0.0.5-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 23.0.0.5-beta includes the latest updates to our ongoing InstantOn functionality, which provides incredibly fast startup times. This beta release also includes the latest updates to the Jakarta Data preview.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on InstantOn, refer to the &lt;a href=&quot;/blog/2023/02/10/instant-on-beta-update.html&quot;&gt;New enhancements for Liberty InstantOn in 23.0.0.2-beta&lt;/a&gt; and &lt;a href=&quot;/blog/2023/02/20/aws-instant-on.html&quot;&gt;Liberty InstantOn on Amazon EKS&lt;/a&gt; blog posts. For more information about the Jakarta Data preview, refer to the &lt;a href=&quot;/blog/2023/04/18/23.0.0.4-beta.html&quot;&gt;Jakarta Data preview update in Open Liberty 23.0.0.4-beta&lt;/a&gt; blog post.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;d like to know what else the team is currently considering or actively working on, refer to the &lt;a href=&quot;https://github.com/orgs/OpenLiberty/projects/2&quot;&gt;Open Liberty Roadmap&lt;/a&gt; and the &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=is%3Aopen+is%3Aissue+label%3A%22In+Progress%22&quot;&gt;in progress work items&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; beta releases include the mentioned beta features along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;. The beta works with Java SE 20, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;RELEASE&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;23.0.0.5-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try.  For example, for Jakarta Data beta 2, you would include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.data&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta-data-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0.0-b2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[23.0.0.5-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 16 May 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/05/16/23.0.0.5-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/05/16/23.0.0.5-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>performance-enhancements</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta Data preview update in Open Liberty 23.0.0.4-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 23.0.0.4-beta updates the Jakarta Data preview with an option to combine multiple ways to specify ordering and sorting.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 23.0.0.4-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#data&quot;&gt;A Very Early Preview of Jakarta Data (Beta 2)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;data&quot;&gt;A Very Early Preview of Jakarta Data (Beta 2)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In Open Liberty 23.0.0.2-beta, we introduced &lt;a href=&quot;/blog/2023/02/21/23.0.0.2-beta.html#data&quot;&gt;a very early preview of Jakarta Data&lt;/a&gt;, which aims to standardize the popular Data Repository pattern across relational and NoSQL databases.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This Jakarta Data beta update allows you to combine multiple ways of specifying ordering and sorting, defining a precedence.  Sorting that is defined by the &lt;code&gt;OrderBy&lt;/code&gt; annotation or query-by-method keyword is applied first, followed by &lt;code&gt;Sort&lt;/code&gt; parameters on the method or &lt;code&gt;Pageable&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Building on from the code snippet provided in the &lt;a href=&quot;/blog/2023/02/21/23.0.0.2-beta.html#data&quot;&gt;original preview&lt;/a&gt;, the following example uses both &lt;code&gt;OrderBy&lt;/code&gt; and &lt;code&gt;Sort&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Product&lt;/span&gt; { &lt;span class=&quot;comment&quot;&gt;// entity&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; id;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; price;
}

&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Products&lt;/span&gt; {
    Product findById(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId);

    &lt;span class=&quot;annotation&quot;&gt;@OrderBy&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; findByNameContains(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; searchFor);

    &lt;span class=&quot;annotation&quot;&gt;@OrderBy&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    Page&amp;lt;Product&amp;gt; findByNameIgnoreCaseContains(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; searchFor, &lt;span class=&quot;predefined-type&quot;&gt;Pageable&lt;/span&gt; pageRequest);

    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;UPDATE Product o SET o.price = o.price - (?2 * o.price) WHERE o.id = ?1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; discount(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; discountRate);

    &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; save(Product p);
}

&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;MyServlet&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; HttpServlet {
    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    Products products;

    &lt;span class=&quot;directive&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doGet(HttpServletRequest req, HttpServletResponse resp)
            &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt; {
        &lt;span class=&quot;comment&quot;&gt;// Find all matching:&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; all = products.findByNameContains(searchFor);

        &lt;span class=&quot;comment&quot;&gt;// Request only the first page, ordered by price, then name, then id:&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;Pageable&lt;/span&gt; pageRequest = &lt;span class=&quot;predefined-type&quot;&gt;Pageable&lt;/span&gt;.size(&lt;span class=&quot;integer&quot;&gt;20&lt;/span&gt;).sortBy(Sort.asc(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;), Sort.asc(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;));
        Page&amp;lt;Product&amp;gt; page1 = products.findByNameIgnoreCaseContains(searchFor, pageRequest);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data has not yet defined a standard configuration model. For now, the Open Liberty beta reuses the existing &lt;code&gt;defaultDatabaseStore&lt;/code&gt; configuration for Jakarta Data, which defaults to the &lt;code&gt;DefaultDataSource&lt;/code&gt; data source. As a result, the beta of Jakarta Data is currently limited to a single data source. This of course will change as the specification defines more of a configuration model. The &lt;code&gt;data-1.0&lt;/code&gt; Liberty beta feature makes the Jakarta Data API available, and you also need a feature for Jakarta Persistence or JDBC (or at some point in the future, Jakarta NoSQL).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Example server.xml configuration:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;data-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;persistence-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt; &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- could use jdbc-4.3 instead --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-6.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt; &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- the example includes a servlet --&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;tag&quot;&gt;&amp;lt;dataSource&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DefaultDataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;jdbcDriver&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;libraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;PostgreSQL&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties.postgresql&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;databaseName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;testdb&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;serverName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;portNumber&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;5432&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;containerAuthData&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;user&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;dbuser1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;password&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;dbpwd1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/dataSource&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;PostgreSQL&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;file&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${shared.resource.dir}/jdbc/postgresql.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- optional because the following are all defaulted: --&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;databaseStore&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultDatabaseStore&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;createTables&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;dropTables&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;attribute-name&quot;&gt;tablePrefix&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;WLP&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;dataSourceRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DefaultDataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can find the 1.0.0-b2 beta release of Jakarta Data on &lt;a href=&quot;https://search.maven.org/artifact/jakarta.data/jakarta-data-api/1.0.0-b2/jar&quot;&gt;Maven&lt;/a&gt;, which corresponds to the Open Liberty 23.0.0.4 beta.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.data&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta-data-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0.0-b2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, refer to the the &lt;a href=&quot;https://github.com/jakartaee/data/blob/main/spec/src/main/asciidoc/repository.asciidoc&quot;&gt;draft of the Jakarta Data specification&lt;/a&gt; and the &lt;a href=&quot;https://search.maven.org/remotecontent?filepath=jakarta/data/jakarta-data-api/1.0.0-b2/jakarta-data-api-1.0.0-b2-javadoc.jar&quot;&gt;corresponding Javadoc&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Your feedback is welcome on all of the Jakarta Data features and will be helpful as the specification develops further. Let us know what you think and/or be involved directly in the specification on &lt;a href=&quot;https://github.com/jakartaee/data&quot;&gt;github&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 20, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;RELEASE&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;23.0.0.4-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try.  For example, for Jakarta Data Beta 2, you would include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.data&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta-data-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0.0-b2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[23.0.0.4-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 18 Apr 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/04/18/23.0.0.4-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/04/18/23.0.0.4-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta EE 10, MicroProfile 6, and Java SE 20 support in Open Liberty 23.0.0.3</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We&amp;#8217;re thrilled to announce the release of Open Liberty 23.0.0.3, one of the biggest releases of the runtime since its debut over 5 years ago!  This release includes Jakarta EE 10 Platform, Web Profile, and, for the first time, Core Profile.  Many new enhancements are added throughout most of the features that make up the profiles.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile 6, which includes Jakarta EE Core Profile 10, also makes its formal debut in the 23.0.0.3 release.  It includes the new MicroProfile Telemetry 1.0 feature as well as updates to the Metrics, OpenAPI, and JWT Authentication specifications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Support for Java SE 20, the latest version as of this writing, is also introduced in the 23.0.0.3 release and provides various new features and changes. Many notable bug fixes are also included in this Open Liberty release.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 23.0.0.3:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta10&quot;&gt;Jakarta EE 10 Core Profile, Web Profile, and Platform&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#coreprofile&quot;&gt;Core Profile&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#webprofile&quot;&gt;Web Profile&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#platform&quot;&gt;Platform&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp6&quot;&gt;MicroProfile 6.0&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#telemetry&quot;&gt;MicroProfile Telemetry 1.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#metrics&quot;&gt;MicroProfile Metrics 5.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#openapi&quot;&gt;MicroProfile OpenAPI 3.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jwt&quot;&gt;MicroProfile JWT Authentication 2.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#java20&quot;&gt;Support for Java SE 20&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#bugs&quot;&gt;Notable bug fixes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out &lt;a href=&quot;/blog/?search=release&amp;amp;search!=beta&quot;&gt;previous Open Liberty GA release blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Run your apps using 23.0.0.3&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;23.0.0.3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '[23.0.0.3,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using &lt;a href=&quot;/docs/latest/container-images.html&quot;&gt;container images&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/&quot;&gt;Downloads page&lt;/a&gt;, where we&amp;#8217;ve added the Jakarta EE 10 and MicroProfile 6 packages.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://stackoverflow.com/tags/open-liberty&quot;&gt;&lt;img src=&quot;/img/blog/blog_btn_stack.svg&quot; alt=&quot;Ask a question on Stack Overflow&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta10&quot;&gt;Jakarta EE 10 Core Profile, Web Profile, and Platform&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta EE 10 Core Profile, Web Profile and Platform are now officially supported in Open Liberty! We&amp;#8217;d like to start by thanking all those who provided feedback throughout our various betas.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta EE 10 marks a major milestone. It is the first Jakarta release to provide updates to the specifications since Java EE 8 in 2017 and, therefore, the first to provide spec updates since the spec was taken over by the Eclipse Foundation. Among the many updates to existing specifications, it also introduces the Core Profile. The Core Profile is aimed at lightweight runtimes, like Open Liberty, that are optimized for running cloud-native Java microservices.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following specifications make up the Jakarta Platform and the Core and Web profiles:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;coreprofile&quot;&gt;Jakarta EE Core Profile 10&lt;/h3&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 44.4444%;&quot;&gt;
&lt;col style=&quot;width: 22.2222%;&quot;&gt;
&lt;col style=&quot;width: 33.3334%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Specification&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Updates&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Liberty Feature Documentation
&lt;a id=&quot;cdi-lite&quot;&gt;&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/cdi/4.0/&quot;&gt;Context and Dependency Injection 4.0 Lite&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;strong&gt;New&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/cdi-4.0.html&quot;&gt;cdi-4.0&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;tableblock&quot;&gt;&lt;a id=&quot;jsonb&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/jsonb/3.0/&quot;&gt;JSON Binding 3.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Major update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/jsonb-3.0.html&quot;&gt;jsonb-3.0&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;tableblock&quot;&gt;&lt;a id=&quot;rest&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/restful-ws/3.1/&quot;&gt;RESTful Web Services 3.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/restfulWS-3.1.html&quot;&gt;restfulWS-3.1&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/restfulWSClient-3.1.html&quot;&gt;restfulWSClient-3.1&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;tableblock&quot;&gt;&lt;a id=&quot;jsonp&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/jsonp/2.1/&quot;&gt;JSON Processing 2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/jsonp-2.1.html&quot;&gt;jsonp-2.1&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;tableblock&quot;&gt;&lt;a id=&quot;cdi&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/annotations/2.1/&quot;&gt;Annotations 2.1&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://jakarta.ee/specifications/interceptors/2.1/&quot;&gt;Interceptors 2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor updates&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/cdi-4.0.html&quot;&gt;cdi-4.0&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;tableblock&quot;&gt;&lt;a id=&quot;cdi&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/dependency-injection/2.0/&quot;&gt;Dependency Injection 2.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Unchanged&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/cdi-4.0.html&quot;&gt;cdi-4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;webprofile&quot;&gt;Jakarta EE Web Profile 10&lt;/h3&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 44.4444%;&quot;&gt;
&lt;col style=&quot;width: 22.2222%;&quot;&gt;
&lt;col style=&quot;width: 33.3334%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Specification&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Updates&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Liberty Feature Documentation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/coreprofile/10/&quot;&gt;Jakarta EE Core Profile 10&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;strong&gt;New&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;#coreprofile&quot;&gt;See previous table&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/authentication/3.0/&quot;&gt;Authentication 3.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Major update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/appAuthentication-3.0.html&quot;&gt;appAuthentication-3.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/cdi/4.0/&quot;&gt;Context and Dependency Injection 4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Major update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/cdi-4.0.html&quot;&gt;cdi-4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/concurrency/3.0/&quot;&gt;Concurrency 3.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Major update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/concurrent-3.0.html&quot;&gt;concurrent-3.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/expression-language/5.0/&quot;&gt;Expression Language 5.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Major update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/expressionLanguage-5.0.html&quot;&gt;expressionLanguage-5.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/faces/4.0/&quot;&gt;Faces 4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Major update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/faces-4.0.html&quot;&gt;faces-4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/security/3.0/&quot;&gt;Security 3.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Major update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/appSecurity-5.0.html&quot;&gt;appSecurity-5.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/servlet/6.0/&quot;&gt;Servlet 6.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Major update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/servlet-6.0.html&quot;&gt;servlet-6.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/tags/3.0/&quot;&gt;Standard Tag Library 3.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Major update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/pages-3.1.html&quot;&gt;pages-3.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/persistence/3.1/&quot;&gt;Persistence 3.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/persistence-3.1.html&quot;&gt;persistence-3.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/pages/3.1/&quot;&gt;Server Pages 3.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/pages-3.1.html&quot;&gt;pages-3.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/websocket/2.1/&quot;&gt;WebSocket 2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/websocket-2.1.html&quot;&gt;websocket-2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/bean-validation/3.0/&quot;&gt;Bean Validation 3.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;No change&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/beanValidation-3.0.html&quot;&gt;beanValidation-3.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/debugging/2.0/&quot;&gt;Debugging Support for Other Languages 2.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;No change&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Not applicable&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/enterprise-beans/4.0/&quot;&gt;Enterprise Beans 4.0 Lite&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;No change&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/enterpriseBeansLite-4.0.html&quot;&gt;enterpriseBeansLite-4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/managedbeans/2.0/&quot;&gt;Managed Beans 2.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;No change&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/managedBeans-2.0.html&quot;&gt;managedBeans-2.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/transactions/2.0/&quot;&gt;Transactions 2.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;No change&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Not applicable (see &lt;a href=&quot;/docs/latest/reference/javadoc/liberty-jakartaee10-javadoc.html?package=allclasses-frame.html&amp;amp;class=jakarta/transaction/package-summary.html&quot;&gt;Javadoc&lt;/a&gt;)&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;platform&quot;&gt;Jakarta EE Platform 10&lt;/h3&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 44.4444%;&quot;&gt;
&lt;col style=&quot;width: 22.2222%;&quot;&gt;
&lt;col style=&quot;width: 33.3334%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Specification&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Updates&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Liberty Feature Documentation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/webprofile/10/&quot;&gt;Jakarta EE Web Profile 10&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Major update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;#webprofile&quot;&gt;See previous table&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/authorization/2.1/&quot;&gt;Authorization 2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/appAuthorization-2.1.html&quot;&gt;appAuthorization-2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/activation/2.1/&quot;&gt;Activation 2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Not applicable (see &lt;a href=&quot;/docs/latest/reference/javadoc/liberty-jakartaee10-javadoc.html?package=allclasses-frame.html&amp;amp;class=jakarta/activation/package-summary.html&quot;&gt;Javadoc&lt;/a&gt;)&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/batch/2.1/&quot;&gt;Batch 2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/batch-2.1.html&quot;&gt;batch-2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/connectors/2.1/&quot;&gt;Connectors 2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/connectors-2.1.html&quot;&gt;connectors-2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/mail/2.1/&quot;&gt;Mail 2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/mail-2.1.html&quot;&gt;mail-2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/messaging/3.1/&quot;&gt;Messaging 3.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/messaging-3.1.html&quot;&gt;messaging-3.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/enterprise-beans/4.0/&quot;&gt;Enterprise Beans 4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;No change&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/enterpriseBeans-4.0.html&quot;&gt;enterpriseBeans-4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/xml-binding/4.0/&quot;&gt;XML Binding 4.0&lt;/a&gt; (optional)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Major update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/xmlBinding-4.0.html&quot;&gt;xmlBinding-4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/xml-web-services/4.0/&quot;&gt;XML Web Services 4.0&lt;/a&gt; (optional)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Major update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/xmlWS-4.0.html&quot;&gt;xmlWS-4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty provides convenience features for running all of the component specifications that are contained in the Jakarta EE 10 Web Profile (&lt;code&gt;&lt;a href=&quot;/docs/latest/reference/feature/webProfile-10.0.html&quot;&gt;webProfile-10.0&lt;/a&gt;&lt;/code&gt;) and Jakarta EE 10 Platform (&lt;code&gt;&lt;a href=&quot;/docs/latest/reference/feature/jakartaee-10.0.html&quot;&gt;jakartaee-10.0&lt;/a&gt;&lt;/code&gt;). These convenience features enable you to rapidly develop applications using all of the APIs contained in their respective specifications. For Jakarta EE 10 features in the application client, use the &lt;code&gt;&lt;a href=&quot;/docs/latest/reference/feature/jakartaeeClient-10.0.html&quot;&gt;jakartaeeClient-10.0&lt;/a&gt;&lt;/code&gt; Liberty feature.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the Jakarta EE Platform 10 features, add the &lt;code&gt;jakartaee-10.0&lt;/code&gt; feature to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-10.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Alternatively, to enable the Jakarta EE Web Profile 10 features, add the &lt;code&gt;webProfile-10.0&lt;/code&gt; feature to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-10.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Although no convenience feature exists for the Core Profile, you can enable its equivalent by adding the following features to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jsonb-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jsonp-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;cdi-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;restfulWS-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To run Jakarta EE 10 features on the Application Client Container, add the following entry in your application&amp;#8217;s &lt;code&gt;client.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaeeClient-10.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information reference:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/platform/10/&quot;&gt;Jakarta EE Platform 10&lt;/a&gt;, &lt;a href=&quot;https://jakarta.ee/specifications/webprofile/10/&quot;&gt;Jakarta EE Web Profile 10&lt;/a&gt;, and &lt;a href=&quot;https://jakarta.ee/specifications/coreprofile/10/&quot;&gt;Jakarta EE Core Profile 10&lt;/a&gt; specifications.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/javadoc/liberty-jakartaee10-javadoc.html&quot;&gt;Jakarta EE 10 Javadoc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/diff/jakarta-ee10-diff.html&quot;&gt;Differences between Jakarta EE 10 and 9.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;mp6&quot;&gt;MicroProfile 6.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile continues to innovate how the industry optimizes Java microservices. The MicroProfile 6.0 release enables applications to use MicroProfile APIs together with &lt;a href=&quot;#core&quot;&gt;Jakarta EE Core Profile 10&lt;/a&gt; along with various other new functions and improvements. The following specifications make up MicroProfile 6.0:&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 44.4444%;&quot;&gt;
&lt;col style=&quot;width: 22.2222%;&quot;&gt;
&lt;col style=&quot;width: 33.3334%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Specification&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Updates&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Liberty Feature Documentation

&lt;a id=&quot;telemetry&quot;&gt;&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-telemetry/releases/tag/1.0&quot;&gt;MicroProfile Telemetry 1.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;strong&gt;New&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/mpTelemetry-1.0.html&quot;&gt;mpTelemetry-1.0&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;tableblock&quot;&gt;&lt;a id=&quot;metrics&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-metrics/releases/tag/5.0&quot;&gt;MicroProfile Metrics 5.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Major update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/mpMetrics-5.0.html&quot;&gt;mpMetrics-5.0&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;tableblock&quot;&gt;&lt;a id=&quot;openapi&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-open-api/releases/tag/3.1&quot;&gt;MicroProfile OpenAPI 3.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/mpOpenAPI-3.1.html&quot;&gt;mpOpenAPI-3.1&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;tableblock&quot;&gt;&lt;a id=&quot;jwt&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-jwt-auth/releases/tag/2.1&quot;&gt;MicroProfile JWT Authentication 2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Minor update&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/mpJwt-2.1.html&quot;&gt;mpJwt-2.1&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-config/releases/tag/3.0.2&quot;&gt;MicroProfile Config 3.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Unchanged&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/mpConfig-3.0.html&quot;&gt;mpConfig-3.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-health/releases/tag/4.0.1&quot;&gt;MicroProfile Health 4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Unchanged&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/mpHealth-4.0.html&quot;&gt;mpHealth-4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-rest-client/releases/tag/3.0.1&quot;&gt;MicroProfile Rest Client 3.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Unchanged&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/mpRestClient-3.0.html&quot;&gt;mpRestClient-3.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-fault-tolerance/releases/tag/4.0.2&quot;&gt;MicroProfile Fault Tolerance 4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Unchanged&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;/docs/latest/reference/feature/mpFaultTolerance-4.0.html&quot;&gt;mpFaultTolerance-4.0&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://jakarta.ee/specifications/coreprofile/10/&quot;&gt;Jakarta EE Core Profile 10&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;New&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;#coreprofile&quot;&gt;See Core Profile table&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable all the MicroProfile 6 features, add the &lt;code&gt;microProfile-6.0&lt;/code&gt; feature to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;microProfile-6.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To find out more, take a look at the MicroProfile 6.0 &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-6.0/microprofile-spec-6.0.html&quot;&gt;specification&lt;/a&gt;, &lt;a href=&quot;https://github.com/eclipse/microprofile/releases/tag/6.0&quot;&gt;release&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/javadoc/microprofile-6.0-javadoc.html&quot;&gt;Javadoc&lt;/a&gt;, and &lt;a href=&quot;/docs/latest/reference/diff/mp-50-60-diff.html&quot;&gt;Differences between MicroProfile 6.0 and 5.0&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;java20&quot;&gt;Support for Java SE 20&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Java 20 includes the following features and changes:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;429: &lt;a href=&quot;https://openjdk.org/jeps/429&quot;&gt;Scoped Values (Incubator)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;432: &lt;a href=&quot;https://openjdk.org/jeps/432&quot;&gt;Record Patterns (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;433: &lt;a href=&quot;https://openjdk.org/jeps/433&quot;&gt;Pattern Matching for switch (Fourth Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;434: &lt;a href=&quot;https://openjdk.org/jeps/434&quot;&gt;Foreign Function &amp;amp; Memory API (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;436: &lt;a href=&quot;https://openjdk.org/jeps/436&quot;&gt;Virtual Threads (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;437: &lt;a href=&quot;https://openjdk.org/jeps/437&quot;&gt;Structured Concurrency (Second Incubator)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use Java 20:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://adoptium.net/temurin/releases/?version=20&quot;&gt;Download Java 20&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Obtain the &lt;a href=&quot;#run&quot;&gt;23.0.0.3&lt;/a&gt; version of Open Liberty.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit your Liberty &lt;a href=&quot;/docs/latest/reference/config/server-configuration-overview.html#server-env&quot;&gt;server.env file&lt;/a&gt; to point &lt;code&gt;JAVA_HOME&lt;/code&gt; to your Java 20 installation.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on Java 20, reference the Java 20 &lt;a href=&quot;https://jdk.java.net/20/release-notes&quot;&gt;release notes page&lt;/a&gt;, &lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/index.html&quot;&gt;API Javadoc page&lt;/a&gt;, &lt;a href=&quot;https://adoptium.net/temurin/releases/?version=20&quot;&gt;download page&lt;/a&gt; and &lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/migrate/toc.htm&quot;&gt;Java 20 migration guide&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonitionblock note&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;icon&quot;&gt;
&lt;i class=&quot;fa icon-note&quot; title=&quot;Note&quot;&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class=&quot;content&quot;&gt;
To try out Java 20 preview features in Open Liberty, make sure to compile with &lt;code&gt;--enable-preview&lt;/code&gt; and add the same parameter to your &lt;a href=&quot;/docs/latest/reference/directory-locations-properties.html&quot;&gt;&lt;code&gt;jvm.options&lt;/code&gt; file&lt;/a&gt;.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;bugs&quot;&gt;Notable bugs fixed in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We’ve spent some time fixing bugs. The following sections describe just some of the issues resolved in this release. If you’re interested, here’s the &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A23003+label%3A%22release+bug%22&quot;&gt;full list of bugs fixed in 23.0.0.3&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/24566&quot;&gt;AcmeCA feature with revocation enabled can fail to initialize on certain OS and JDK combinations&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When running with a hybrid JDK for MacOS with IBMJDK8 and  the Automatic Certificate Management Environment (ACME) Support 2.0 feature with certification revocation checking enabled, the SSL/TLS endpoint can fail to complete initialization and will not be available for traffic.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following &lt;code&gt;NullPointerException&lt;/code&gt; is logged in the FFDC, indicating the failure in the initialization flow:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;Exception = java.lang.NullPointerException
Source = com.ibm.ws.security.acme.internal.AcmeProviderImpl
probeid = 921
Stack Dump = java.lang.NullPointerException
at sun.security.provider.certpath.CertPathHelper.setDateAndTime(CertPathHelper.java:71)
at sun.security.provider.certpath.RevocationChecker.checkCRLs(RevocationChecker.java:525)
at sun.security.provider.certpath.RevocationChecker.checkCRLs(RevocationChecker.java:464)
at sun.security.provider.certpath.RevocationChecker.check(RevocationChecker.java:393)
at sun.security.provider.certpath.RevocationChecker.check(RevocationChecker.java:336)
at sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:125)
at sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:225)
at sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:145)
at sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:84)
at java.security.cert.CertPathValidator.validate(CertPathValidator.java:304)
at com.ibm.ws.security.acme.internal.CertificateRevocationChecker.isRevoked(CertificateRevocationChecker.java:371)
....&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been resolved and the endpoint successfully initializes and is available to service traffic.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/24631&quot;&gt;Fix ClassCastException during the de-serialization of CDI Injected Event&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A passivated (i.e. serializable) bean which has an injected &lt;code&gt;jakarta.enterprise.event.Event&lt;/code&gt; (or &lt;code&gt;javax&lt;/code&gt; equivalent) will not be properly restored.  This can be encountered when session persistence is enabled and session data is serialized and de-serialized from a database.  This causes the following FFDC to occur:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;Stack Dump = java.lang.ClassCastException: cannot assign instance of org.jboss.weld.event.EventImpl$SerializationProxy to field org.apache.myfaces.flow.cdi.FlowScopeContextualStorageHolder.flowDestroyedEvent of type jakarta.enterprise.event.Event in instance of org.apache.myfaces.flow.cdi.FlowScopeContextualStorageHolder
        at java.base/java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2076)
        at java.base/java.io.ObjectStreamClass$FieldReflector.checkObjectFieldValueTypes(ObjectStreamClass.java:2039)
        at java.base/java.io.ObjectStreamClass.checkObjFieldValueTypes(ObjectStreamClass.java:1293)
        at java.base/java.io.ObjectInputStream.defaultCheckFieldValues(ObjectInputStream.java:2512)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been resolved and the CDI event objects is restored without errors.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/24465&quot;&gt;JDBC DB2 values for queryDataSize need to be updated&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When setting the &lt;code&gt;queryDataSize&lt;/code&gt; for the DB2 DataSource to valid values for DB2 11.5.7+, the following error occurs:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;[ERROR   ] CWWKG0075E: The value 10452991 is not valid for attribute `queryDataSize` of configuration element dataSource. The validation message was: Value &amp;quot;10452991&amp;quot; is out of range..&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been resolved and the new &lt;code&gt;queryDataSize&lt;/code&gt; range is correctly accepted.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/24651&quot;&gt;Liberty server hangs randomly&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A &lt;a href=&quot;https://github.com/eclipse-openj9/openj9/issues/14037&quot;&gt;bug in OpenJ9&lt;/a&gt; can cause the Liberty server to hang due to a deadlock when using JAX-RS.  For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;2LKMONINUSE      sys_mon_t:0x00007FCE3C16F258 infl_mon_t: 0x00007FCE3C16F2D8:
3LKMONOBJECT       org/apache/cxf/jaxrs/interceptor/CachedTime@0x00000000FBF1D0C8: Flat locked by &amp;quot;Default Executor-thread-8&amp;quot; (J9VMThread:0x0000000001B4BF00), entry count 1
3LKWAITERQ            Waiting to enter:
3LKWAITER                &amp;quot;Default Executor-thread-1&amp;quot; (J9VMThread:0x00000000006EB200)
3LKWAITER                &amp;quot;Default Executor-thread-3&amp;quot; (J9VMThread:0x0000000000718D00)
3LKWAITER                &amp;quot;Default Executor-thread-17&amp;quot; (J9VMThread:0x0000000002644B00)
3LKWAITER                &amp;quot;Default Executor-thread-19&amp;quot; (J9VMThread:0x0000000000346F00)
3LKWAITER                &amp;quot;Default Executor-thread-20&amp;quot; (J9VMThread:0x0000000000618300)
3LKWAITER                &amp;quot;Default Executor-thread-29&amp;quot; (J9VMThread:0x0000000002645700)
3LKWAITER                &amp;quot;Default Executor-thread-30&amp;quot; (J9VMThread:0x0000000002643F00)
3LKWAITER                &amp;quot;Default Executor-thread-39&amp;quot; (J9VMThread:0x00000000022FF900)
3LKWAITER                &amp;quot;Default Executor-thread-40&amp;quot; (J9VMThread:0x00000000022DAA00)
3LKWAITER                &amp;quot;Default Executor-thread-49&amp;quot; (J9VMThread:0x000000000216DE00)
3LKWAITER                &amp;quot;Default Executor-thread-50&amp;quot; (J9VMThread:0x00000000022FED00)
3LKWAITER                &amp;quot;Default Executor-thread-59&amp;quot; (J9VMThread:0x0000000001B74900)
3LKWAITER                &amp;quot;Default Executor-thread-60&amp;quot; (J9VMThread:0x0000000002178F00)
3LKWAITER                &amp;quot;Default Executor-thread-62&amp;quot; (J9VMThread:0x0000000001B72300)

&amp;quot;Default Executor-thread-8&amp;quot; J9VMThread:0x0000000001B4BF00, omrthread_t:0x00007FCE18012DF0, java/lang/Thread:0x00000000FBF99E78, state:B, prio=5
       (java/lang/Thread getId:0x4C, isDaemon:true)
       com/ibm/ws/classloading/internal/ThreadContextClassLoader(0x0000000086272FF8)
       (native thread ID:0x1A4, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000281)
       (native stack address range from:0x00007FCEA0FF6000, to:0x00007FCEA1036000, size:0x40000)
      CPU usage total: 3.272702139 secs, current category=&amp;quot;Application&amp;quot;
Blocked on: java/lang/StringBuffer@0x00000000FBF99F10 Owned by: &amp;quot;Default Executor-thread-1&amp;quot; (J9VMThread:0x00000000006EB200, java/lang/Thread:0x00000000804DA638)
      Heap bytes allocated since last GC cycle=0 (0x0)
      Java callstack:
          at java/lang/StringBuffer.setLength(Bytecode PC:0(Compiled Code))
             (entered lock: java/lang/StringBuffer@0x00000000FBF99F10, entry count: 1)
          at org/apache/cxf/jaxrs/interceptor/CachedTime.updateTime(CachedTime.java:86)
          at org/apache/cxf/jaxrs/interceptor/CachedTime.getTimeAsString(CachedTime.java:134)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been mitigated in Liberty by removing the usage of &lt;code&gt;SimpleDateFormat&lt;/code&gt; from CXF&amp;#8217;s &lt;code&gt;CachedTime&lt;/code&gt; class and the deadblock no longer occurs.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-open-liberty-23-0-0-3-now&quot;&gt;Get Open Liberty 23.0.0.3 now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Available through &lt;a href=&quot;#run&quot;&gt;Maven, Gradle, Docker, and as a downloadable archive&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 04 Apr 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/04/04/23.0.0.3.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/04/04/23.0.0.3
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>java-se</category>
        
        <category>release</category>
        
        <category>metrics</category>
        
        <category>jakarta-ee</category>
        
        <category>monitoring</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Open source cloud-native Java at DevNexus 2023!</title>
        <description>&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;what-is-devnexus&quot;&gt;What is DevNexus?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://devnexus.com/&quot;&gt;DevNexus&lt;/a&gt; is the longest-running and largest Java Conference in the US. It’s organised by a vibrant Java community and is being held in Atlanta this year from April 4-6. After the COVID-19 pandemic and its long-lasting effects, it’s wonderful to be able to come together again and have such a fantastic opportunity to reconnect with the wider Java community! And of course, we can’t wait to join too!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Several members of the Open Liberty team will be on site hosting sessions, quick labs, workshops, and running demonstrations at the IBM booth. If you’re going to be there, deciding which of the great sessions to see can be challenging. To help you decide, we’ve put together a useful summary of the sessions on MicroProfile, Jakarta EE, and Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;tuesday-april-4th&quot;&gt;Tuesday April 4th:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Workshop: &lt;a href=&quot;https://devnexus.com/presentations/thriving-in-the-cloud-venturing-beyond-the-12-factors/&quot;&gt;Thriving in the cloud: Venturing beyond the 12 factors&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this workshop, you’ll get hands on with some of the most innovative and exciting open source cloud-native Java technologies, including Open Liberty, MicroProfile, Jakarta EE, Testcontainers, OpenJ9, and more! Emily Jiang, Rich Hagarty, Cindy High, and Harry Hoots will show you how to venture beyond the 12 factors to design and develop applications with the 15-factor app methodology. Don’t miss your chance to join this fantastic interactive learning opportunity!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;wednesday-april-5th&quot;&gt;Wednesday April 5th:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/jakarta-ee-for-spring-developers&quot;&gt;Jakarta EE for Spring Developers&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta EE guru Ivar Grimstad teaches us how to convert our package namespace from &lt;code&gt;javax.*&lt;/code&gt; to &lt;code&gt;jakarta.*&lt;/code&gt; and why it matters to everyone in the Java ecosystem. A live coding demo will take us through the steps involved, and point out where to pay special attention.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/enhancing-java-applications-for-the-cloud/&quot;&gt;Enhancing Java applications for the cloud&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Tobi Ajila, a Java Runtime developer for the Eclipse OpenJ9 team in Canada, showcases how technologies like checkpoint/restore and remote JIT compilation can help minimize your application’s costs by boosting startup time and reducing memory footprint. Attendees will learn how these features integrate seamlessly with existing container technologies for simple, secure, and predictable deployments. Whether you are a cloud veteran or a newcomer, there will be lots to learn!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Deep Dive Session: &lt;a href=&quot;https://devnexus.com/presentations/deep-dive-microprofile-6-0-with-jakarta-ee-10-core-profile&quot;&gt;Deep Dive MicroProfile 6.0 with Jakarta EE 10 Core Profile&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Java champion Emily Jiang leads this deep dive session all around the exciting new updates from MicroProfile 6.0 and Jakarta EE 10. Included in this talk are some of the major updates within MicroProfile Metrics, which enables the adoption of Micrometer, and MicroProfile Telemetry, which consumes OpenTelemetry. Join this session to learn all about the observability standards for your microservices with a live demo on Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;thursday-april-6th&quot;&gt;Thursday April 6th:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/jakarta-ee-10-and-beyond&quot;&gt;Jakarta EE 10 and Beyond&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this session, Reza Rahman (Principal Program Manager for Java on Azure at Microsoft) offers a brief tour of Jakarta EE 10 as well as a look at what the future might bring. If you’re up for a session that’s both useful and exploratory, then make sure you check out this session! As Reza says: “You should come to this session with your thinking caps on and your sleeves rolled up. There is much to help move forward together that really matters.”&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/journey-to-cloud-leave-no-java-workload-behind&quot;&gt;Journey to cloud : leave no Java workload behind&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;IBMers Vijay Sundaresan and Mark Stoodley pull together the full landscape of exciting new technologies that can enable key cloud-native behaviours and characteristics, including fast startup times and low memory footprints. They’ll explain how many of these technologies and enhancements were developed at OpenJ9 and how they all fit together as a compelling and cooperative solution to optimize Java for the cloud.
Interested? Then join what is sure to be an interesting session!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Panel Session: &lt;a href=&quot;https://devnexus.com/presentations/5-years-of-jakarta-ee-panel-a-look-into-the-future&quot;&gt;5 years of Jakarta EE Panel: a look into the future&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you’re interested in a more interactive session, then be sure to bookmark this panel session! Jakarta EE experts (Ivar Grimstad, Tanja Obradovic, Emily Jiang, Jose Paumard, Mark Heckler, and Rudy De Busscher) will form the panel for this session, discussing the future of Jakarta EE with version 11 and beyond. Pop along to this session to ask those burning questions and gain exciting insight into where this fantastic open source technology is heading.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/jakarta-ee-integration-testing&quot;&gt;Jakarta EE integration testing&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this session, Rudy De Busscher explores scenarios of how you can use the Testcontainers framework to test your Jakarta EE application, including a remote debug session of your code.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Talk: &lt;a href=&quot;https://devnexus.com/presentations/best-practices-for-securing-cloud-native-applications&quot;&gt;Best practices for securing cloud-native applications&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this talk, chief architect for IBM Java Mark Stoodley will cover some best practices for authenticating users and authorizing them to access your microservice. He’ll provide an overview of microservice security, with samples based on the Open Liberty runtime. With the ever-growing importance of effectively securing our applications, this is sure to be a great session to attend.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;ibm-booth&quot;&gt;IBM Booth:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As well as the numerous sessions during the conference, the Open Liberty team will also be manning the IBM booth in the exhibition hall. Stop by to get hands on with our quick labs (featuring InstantOn startup of cloud-native Java apps, MicroProfile and Jakarta EE), grab some awesome swag, and have a chat about all things OSS Java. We’d love to see you there!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This year, we’ll also have our exciting intergalactic booth challenge…
&lt;a href=&quot;https://www.youtube.com/watch?v=bURqsxP5gEY&amp;amp;t=139s&quot;&gt;The Open Liberty Space Rover Challenge&lt;/a&gt;. In this challenge, you’ll need to navigate the planets and get your rover safely to your destination in the stars. Take control of a spaceship and use hand signals to direct it&amp;#8217;s flight from planet to planet. Climb the rankings on your way to become top cadet in Star Academy. Our &lt;a href=&quot;https://www.youtube.com/watch?v=bURqsxP5gEY&quot;&gt;Space Rover Challenge&lt;/a&gt; uses various technologies, including hardware and modern Java technology. While you&amp;#8217;re with us, ask our developers about the underlying technologies they&amp;#8217;ve used to create the demo, including OpenJ9, Jakarta EE, MicroProfile, and &quot;the most flexible runtime in the cosmos&quot;, Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out &lt;a href=&quot;https://developer.ibm.com/events/devnexus-2023-atlanta/?mhsrc=ibmsearch_a&amp;amp;mhq=devnexus&quot;&gt;IBM’s presence&lt;/a&gt; at DevNexus as well as the &lt;a href=&quot;https://devnexus.com/schedule&quot;&gt;full schedule&lt;/a&gt; on the &lt;a href=&quot;https://devnexus.com/&quot;&gt;conference website&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 30 Mar 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/03/30/devnexus.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/03/30/devnexus
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Support for Java SE 20 in Open Liberty 23.0.0.3-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 23.0.0.3-beta introduces support for Java SE 20, which provides many exciting features and changes. This beta also includes all of Jakarta EE Platform 10 and MicroProfile 6.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 23.0.0.3-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#java20&quot;&gt;Support for Java SE 20&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#ee10&quot;&gt;Jakarta EE Platform 10 and MicroProfile 6&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;java20&quot;&gt;Support for Java SE 20&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Try out Java 20, which includes the following features and changes:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;429: &lt;a href=&quot;https://openjdk.org/jeps/429&quot;&gt;Scoped Values (Incubator)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;432: &lt;a href=&quot;https://openjdk.org/jeps/432&quot;&gt;Record Patterns (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;433: &lt;a href=&quot;https://openjdk.org/jeps/433&quot;&gt;Pattern Matching for switch (Fourth Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;434: &lt;a href=&quot;https://openjdk.org/jeps/434&quot;&gt;Foreign Function &amp;amp; Memory API (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;436: &lt;a href=&quot;https://openjdk.org/jeps/436&quot;&gt;Virtual Threads (Second Preview)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;437: &lt;a href=&quot;https://openjdk.org/jeps/437&quot;&gt;Structured Concurrency (Second Incubator)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;By trying out the changes in Java 20 now, you get more time to review your applications, microservices, and runtime environments so you can be a step ahead when it becomes generally available.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Try Java 20 today:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jdk.java.net/20/&quot;&gt;Download the early access release of Java 20&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the &lt;a href=&quot;#run&quot;&gt;23.0.0.3-beta&lt;/a&gt; version of Open Liberty.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit your Liberty &lt;a href=&quot;/docs/latest/reference/config/server-configuration-overview.html#server-env&quot;&gt;server.env file&lt;/a&gt; to point &lt;code&gt;JAVA_HOME&lt;/code&gt; to your Java 20 installation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start testing!&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on Java 20, visit the Java 20 &lt;a href=&quot;https://jdk.java.net/20/release-notes&quot;&gt;release notes page&lt;/a&gt;, &lt;a href=&quot;https://download.java.net/java/early_access/jdk20/docs/api/&quot;&gt;API Javadoc page&lt;/a&gt; or &lt;a href=&quot;https://jdk.java.net/20/&quot;&gt;download page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;ee10&quot;&gt;Jakarta EE 10 and MicroProfile 6&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This beta release also includes Jakarta EE Platform 10 and MicroProfile 6, which were first made available in the 22.0.0.13-beta. To find out more, reference the &lt;a href=&quot;/blog/2022/12/06/22.0.0.13-beta.html&quot;&gt;22.0.0.13-beta blog post&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 20, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;RELEASE&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;23.0.0.3-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try.  For example, for Jakarta EE 10 and MicroProfile 6, you would include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.microprofile&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;microprofile&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;6.0-RC3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.platform&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta.jakartaee-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;10.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[23.0.0.3-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 23 Mar 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/03/23/23.0.0.3-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/03/23/23.0.0.3-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>java-se</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Upgrade your cloud-native Java development experience with Liberty Tools for Eclipse IDE</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty Tools for Eclipse IDE provides a simplified yet powerful development experience. With capabilities like dev mode, Liberty config editing, and Jakarta EE and MicroProfile code assistance, you can code and manage your application without leaving your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Try it out today by installing from the &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Eclipse Marketplace&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://www.youtube.com/watch?v=vfi0JsXZrgc&quot;&gt;YouTube video&lt;/a&gt; for a deep dive walk-through of Liberty Tools for Eclipse IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let&amp;#8217;s dive in!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;what-is-liberty-tools&quot;&gt;What is Liberty Tools?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty Tools is the next generation IDE tooling for developing cloud-native Java applications with Liberty. It takes an app-centric approach, leveraging the capabilities of the Liberty Maven and Liberty Gradle plugins, so you no longer have to spend time creating and managing Liberty instances. By running dev mode behind the scenes, the Liberty runtime is automatically downloaded and started, and your app is built, packaged, and deployed to it. To save even more time, listeners detect any changes you make, and your app is automatically rebuilt and redeployed without having to restart the runtime.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Keeping in line with the app-centric design, Liberty Tools provides code assistance for both Jakarta EE and MicroProfile APIs. Code completion, hover descriptions, diagnostics and quick-fixes save time, reduce errors, and keep you focused on your code. Liberty Tools accomplishes this by integrating with the &lt;a href=&quot;https://github.com/eclipse/lsp4jakarta&quot;&gt;Language Server for Jakarta EE&lt;/a&gt; and the &lt;a href=&quot;https://github.com/eclipse/lsp4mp&quot;&gt;Language Server for MicroProfile&lt;/a&gt;, both open source projects that are continually adding new features and support.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;While much of the runtime mechanics are automated with Liberty Tools, some runtime configuration is, of course, necessary. However, this process has been streamlined with config assistance for &lt;code&gt;server.xml&lt;/code&gt;, &lt;code&gt;bootstrap.properties&lt;/code&gt;, and &lt;code&gt;server.env&lt;/code&gt; files. Rather than having to refer to the documentation to find the correct Liberty feature to add or the appropriate value to set for your specific logging attribute, Liberty Tools provides lists of options and descriptions, all without having to leave Eclipse.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Prefer another IDE? Liberty Tools for Eclipse IDE maintains functional parity with plugins for &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Visual Studio Code&lt;/a&gt; and &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools/&quot;&gt;Intellij IDEA&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;requirements&quot;&gt;Requirements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty Tools for Eclipse IDE is designed to work with &lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-eclipse/blob/main/docs/user-guide.md#software-requirements&quot;&gt;supported versions&lt;/a&gt; of both
the IDE for Java EE Developers and the IDE for Java Developers. While Java 17 is needed to run the tool, you can choose a different version of Java to run your application.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Since Liberty Tools uses the Liberty Maven and Liberty Gradle plugins behind the scenes, these plugins must be configured in your application&amp;#8217;s &lt;code&gt;pom.xml&lt;/code&gt; or &lt;code&gt;build.gradle&lt;/code&gt; files. Liberty Tools will also need to run the Maven or Gradle executable which can be accomplished by configuring the Maven and Gradle home in the &lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-eclipse/blob/main/docs/user-guide.md#setting-preferences&quot;&gt;tool&amp;#8217;s preferences&lt;/a&gt;, or including a wrapper with the application.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;managing-your-applications&quot;&gt;Managing your applications&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Any application in your Eclipse workspace that contains &lt;code&gt;src/main/liberty/config/server.xml&lt;/code&gt; is automatically enabled to run with Liberty Tools. Actions are available to manage these apps such as &lt;code&gt;Start&lt;/code&gt;, &lt;code&gt;Stop&lt;/code&gt;, &lt;code&gt;Debug&lt;/code&gt; and &lt;code&gt;Run Tests&lt;/code&gt;, and you can run these actions from either the Liberty Dashboard or the Eclipse &lt;strong&gt;Run As&lt;/strong&gt; menu.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;liberty-dashboard&quot;&gt;Liberty Dashboard&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Liberty Dashboard consolidates the Liberty enabled applications in your workspace into a single view. To open the dashboard, click on the Open Liberty UFO icon on the top tray or press &lt;strong&gt;Alt&lt;/strong&gt; + &lt;strong&gt;L&lt;/strong&gt;. To run an action, simply right-click on an app in the list.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-eclipse-dash-menu.png&quot; alt=&quot;Liberty Dashboard&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;eclipse-run-as-menu&quot;&gt;Eclipse Run As menu&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty Tools offers the same set of actions in the Eclipse &lt;strong&gt;Run As&lt;/strong&gt; menu that appears when you right click on a project in the Project Explorer view.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-eclipse-runas-menu.png&quot; alt=&quot;Run As menu&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;starting-your-app&quot;&gt;Starting your app&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To start your application in dev mode, select either the &lt;strong&gt;Start&lt;/strong&gt; or &lt;strong&gt;Start&amp;#8230;&amp;#8203;&lt;/strong&gt; actions. The latter opens a &lt;strong&gt;Run Configurations&lt;/strong&gt; dialog box where you can add to the command-line parameters such as &lt;a href=&quot;https://github.com/OpenLiberty/ci.maven/blob/main/docs/dev.md#additional-parameters&quot;&gt;additional parameters to dev mode&lt;/a&gt; or configure the JRE to use when running the app. When a start action is selected, Liberty Tools opens a &lt;strong&gt;Terminal&lt;/strong&gt; tab and starts dev mode.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-eclipse-run-config.gif&quot; alt=&quot;Run Configurations&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-eclipse-terminal-start.png&quot; alt=&quot;Terminal Start&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;admonitionblock note&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;icon&quot;&gt;
&lt;i class=&quot;fa icon-note&quot; title=&quot;Note&quot;&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class=&quot;content&quot;&gt;
The &lt;code&gt;Start in container&lt;/code&gt; action will &lt;a href=&quot;https://github.com/OpenLiberty/ci.maven/blob/main/docs/dev.md#devc-container-mode&quot;&gt;start dev mode in a local Docker container&lt;/a&gt; and requires &lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-eclipse/blob/main/docs/user-guide.md#docker&quot;&gt;'docker' on the PATH&lt;/a&gt;.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;running-tests&quot;&gt;Running tests&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Tests are important for any application. Liberty Tools makes it easy to run your unit and integration tests by either selecting the &lt;code&gt;Run tests&lt;/code&gt; action, or simply clicking &lt;code&gt;Enter&lt;/code&gt; in the terminal. You can even view the results of your latest run by selecting &lt;code&gt;View test reports&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;debugging-your-app&quot;&gt;Debugging your app&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;By default, the Liberty runtime is configured with port 7777 for debugging. However, this configuration requires that port to be available on your system and for you to manually attach a debugger. With Liberty Tools, you can start your app using the &lt;code&gt;Debug&lt;/code&gt; action, which finds an available port and automatically attaches the Eclipse debugger to it.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-coding&quot;&gt;Get coding!&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty Tools provides coding assistance for Jakarta EE and MicroProfile APIs, as well as select Liberty configuration files.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;jakarta-ee&quot;&gt;Jakarta EE&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Code completion for Jakarta EE makes it easy to add classes and methods to your app. Just type &lt;strong&gt;CTRL&lt;/strong&gt; + &lt;strong&gt;Space&lt;/strong&gt; from within any Java file to choose from a list of available code snippets. Additionally, diagnostics flag errors and suggest quick-fixes to implement on the spot.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-eclipse-jakarta-snippet-2.gif&quot; alt=&quot;Jakarta code completion&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-eclipse-jakarta-quick-fix-2.gif&quot; alt=&quot;Jakarta quick fix&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;microprofile&quot;&gt;MicroProfile&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Similar code completion is available for MicroProfile, as well as type-ahead suggestions and hover descriptions for MicroProfile Config properties. You can easily see what values are set for injected properties directly from your code and get lists of available variables and values to add to your configuration.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-eclipse-mp-props-hover.png&quot; alt=&quot;MicroProfile config property hover&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-eclipse-mp-props.gif&quot; alt=&quot;MicroProfile code completion&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;liberty-config-editing&quot;&gt;Liberty config editing&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty Tools streamlines the process of configuring the Liberty runtime through config completion for &lt;code&gt;server.xml&lt;/code&gt;, &lt;code&gt;bootstrap.properties&lt;/code&gt; and &lt;code&gt;server.env&lt;/code&gt; files. Type &lt;strong&gt;CTRL&lt;/strong&gt; + &lt;strong&gt;Space&lt;/strong&gt; from within these files to get lists of suggested configuration elements, properties, and values.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-eclipse-server-config.gif&quot; alt=&quot;Server config code completion&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-eclipse-bootstrap-props.gif&quot; alt=&quot;Bootstrap properties code completion&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;share-your-feedback&quot;&gt;Share your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Like what you see? Need support? Find us on &lt;a href=&quot;https://app.gitter.im/#/room/#OpenLiberty_developer-experience:gitter.im&quot;&gt;Gitter&lt;/a&gt;, or open an issue or enhancement &lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-eclipse/issues&quot;&gt;on Github&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Wed, 08 Mar 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/03/08/liberty-tools-eclipse-deep-dive.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/03/08/liberty-tools-eclipse-deep-dive
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>maven</category>
        
        <category>gradle</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Testing database connections and Jakarta Data preview in Open Liberty 23.0.0.2-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 23.0.0.2-beta includes several new enhancements for Liberty InstantOn that simplify the process for creating and restoring checkpoints. Admin Center&amp;#8217;s Server Config tool receives new capability to test database connections, and a very early preview of Jakarta Data also makes its beta debut in this release. Also included in this beta is all of Jakarta EE Platform 10 and MicroProfile 6.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 23.0.0.2-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#instanton&quot;&gt;New enhancements for Liberty InstantOn&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#validation&quot;&gt;Testing database connections using Admin Center&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#data&quot;&gt;A very early preview of Jakarta Data&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#ee10&quot;&gt;Jakarta EE Platform 10 and MicroProfile 6&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;instanton&quot;&gt;New enhancements for Liberty InstantOn&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty 22.0.0.11-beta introduced InstantOn, an exciting new feature that provides incredibly fast startup times for MicroProfile and Jakarta EE applications. Since the initial beta release, we&amp;#8217;ve made the following changes and enhancements to make it easier to create and deploy applications with Liberty InstantOn:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Removal of the features checkpoint phase&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Reduced set of required Linux capabilities to checkpoint and restore&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Simplified container image builds with InstantOn&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To learn more about these changes and InstantOn, refer to the &lt;a href=&quot;/blog/2023/02/10/instant-on-beta-update.html&quot;&gt;New enhancements for Liberty InstantOn in 23.0.0.2-beta&lt;/a&gt; blog post.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;validation&quot;&gt;Testing database connections using Admin Center&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Looking for a simple way to test your database connections? With this beta release, you can now validate your connections using the Liberty Admin Center feature. The connection test exercises the same code paths as your applications, giving you confidence in your server configuration. The Admin Center connection validation feature is enabled by REST APIs featured in the &lt;a href=&quot;/blog/2019/09/13/testing-database-connections-REST-APIs.html&quot;&gt;Testing database connections in Open Liberty apps with REST APIs&lt;/a&gt; blog post.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable database connection testing, the following minimum set of features must be present in your server configuration:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;adminCenter-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;restConnector-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpOpenApi-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Although this example uses the &lt;code&gt;mpOpenApi-3.0&lt;/code&gt; feature, you can use any MicroProfile OpenAPI version that is compatible with your other features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To provide an example, we&amp;#8217;ll start by testing the server resource &lt;code&gt;DefaultDataSource&lt;/code&gt;, which is configured to connect to a Derby database using container authentication with an authentication alias.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following sample &lt;code&gt;server.xml&lt;/code&gt; file enables the features to configure the Admin Center test connection function and configures the connection to the Derby database:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;description&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;new server&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Enable features --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;adminCenter-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;restConnector-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jdbc-4.3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpOpenApi-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- To access this server from a remote client add a host attribute to the following element, e.g. host=&amp;quot;*&amp;quot; --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;httpEndpoint&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultHttpEndpoint&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;httpPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9080&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;httpsPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9443&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;derby&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;file&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/derby/derby.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;dataSource&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DefaultDataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;jdbcDriver&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;libraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;derby&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Example properties referencing an in-memory Derby Embedded database --&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties.derby.embedded&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;databaseName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;memory:defaultdb&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;createDatabase&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/dataSource&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;authData&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myAuth&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;user&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;dbuser&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;password&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;dbpass&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Default SSL configuration enables trust for default certificates from the Java runtime --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;ssl&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultSSLConfig&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;trustDefaultCerts&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;remoteFileAccess&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;writeDir&amp;gt;&lt;/span&gt;${server.config.dir}&lt;span class=&quot;tag&quot;&gt;&amp;lt;/writeDir&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/remoteFileAccess&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;basicRegistry&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;basic&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;user&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;password&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;adminpwd&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/basicRegistry&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Assign 'admin' to Administrator --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;administrator-role&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;user&amp;gt;&lt;/span&gt;admin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/user&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/administrator-role&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For this &lt;code&gt;server.xml&lt;/code&gt; example, you will need to add the Derby jar to the server configuration or use your own database configuration.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;Configure a Liberty server using the example &lt;code&gt;server.xml&lt;/code&gt; file for guidance and then start the server. After the server is started, you can check the logs to find the URL to navigate to the Admin Center. In the previous example, you can navigate to the Admin Center using the &lt;code&gt;&lt;a href=&quot;https://localhost:9443/adminCenter/&quot; class=&quot;bare&quot;&gt;https://localhost:9443/adminCenter/&lt;/a&gt;&lt;/code&gt; URL.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the &lt;strong&gt;Server Config&lt;/strong&gt; tool.&lt;/p&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/ac_db_test_server_config.png&quot; alt=&quot;Server Config Tool&quot; width=&quot;20%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select &lt;strong&gt;server.xml&lt;/strong&gt; to edit.&lt;/p&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/ac_db_test_serverxml.png&quot; alt=&quot;server.xml&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the &lt;strong&gt;Design &amp;gt; Server&lt;/strong&gt; menu, navigate to the resource you want to test and click the &lt;strong&gt;Test&lt;/strong&gt; button.&lt;/p&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/ac_db_test_resource.png&quot; alt=&quot;Select resource&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose the type of authentication your application uses:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;For applications that use container authentication, choose the &lt;strong&gt;Application authentication&lt;/strong&gt; tab and select whether to use default authentication, specify an authentication alias, or choose a login module configuration.&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For this example, the configuration doesn&amp;#8217;t specify default authentication on the &lt;code&gt;dataSource&lt;/code&gt; element or configure any login modules. Therefore, you must specify an authentication alias by using the dropdown field.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/ac_db_test_container_auth.png&quot; alt=&quot;Container authentication&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For applications that use application authentication, choose the &lt;strong&gt;Application authentication&lt;/strong&gt; tab and fill in a valid user name and password for the database resource.&lt;/p&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/ac_db_test_app_auth.png&quot; alt=&quot;Application authentication&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If your application does not use a resource reference and the server.xml doesn&amp;#8217;t include &lt;code&gt;enableContainerAuthForDirectLookups=&quot;true&quot;&lt;/code&gt; in the config element, then choose &lt;strong&gt;No resource reference&lt;/strong&gt; tab and fill in a valid user name and password for the database resource.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/ac_db_test_no_resource_ref.png&quot; alt=&quot;No Resource Reference&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click the &lt;strong&gt;Connection Test&lt;/strong&gt; button to run the test and display the results.  The following example shows a successful connection test:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/ac_db_test_successful_test.png&quot; alt=&quot;Successful connection test example&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In addition to &lt;a href=&quot;/docs/latest/reference/feature/jdbc-4.3.html&quot;&gt;Java Database Connectivity&lt;/a&gt; you can also test connections to &lt;a href=&quot;/docs/latest/reference/feature/connectors-2.0.html&quot;&gt;Jakarta Connectors&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/messaging-3.0.html&quot;&gt;Jakarta Messaging&lt;/a&gt; and &lt;a href=&quot;/docs/latest/reference/feature/cloudant-1.0.html&quot;&gt;Cloudant Integration&lt;/a&gt; resources.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about administering Liberty using a GUI, refer to the &lt;a href=&quot;/docs/latest/admin-center.html&quot;&gt;Manage Open Liberty with Admin Center&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;data&quot;&gt;A very early preview of Jakarta Data&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data is a new Jakarta EE specification that aims to standardize the popular Data Repository pattern across relational and NoSQL databases. As the specification is further developed and Jakarta Data providers become available,  the Jakarta Data specification is expected to standardize a way to plug in your favorite providers that are currently dominant in the industry, including JNoSQL, to be used in Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For now, Open Liberty is using a test implementation of Jakarta Data to experiment with proposed specification features. This implementation is now available in our beta release so that developers can try out these features and provide feedback to influence the specification as it is being developed. The test implementation currently works with relational databases and operates by redirecting repository operations to the built-in Jakarta Persistence provider. It simulates the entirety of the Jakarta Data beta release, plus some additional proposed features that are being considered.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use Jakarta Data, start by defining an entity class that corresponds to your data. With relational databases, the entity class corresponds to a database table and the entity properties (public methods and fields of the entity class) generally correspond to the columns of the table.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;An entity class can use either of the following annotation schemes:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The class can be annotated with &lt;code&gt;jakarta.persistence.Entity&lt;/code&gt; and related annotations from Jakarta Persistence.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The class can be a Java class without entity annotations, in which case the primary key is inferred from an entity property named &lt;code&gt;id&lt;/code&gt; or ending with &lt;code&gt;Id&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Next, define one or more repository interfaces for an entity, annotate those interfaces as &lt;code&gt;@Repository&lt;/code&gt;, and inject them into components with CDI. The Jakarta Data provider supplies the implementation of the repository interface for you.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows a simple entity,  a repository, and and a servlet that injects them by CDI:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Product&lt;/span&gt; { &lt;span class=&quot;comment&quot;&gt;// entity&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; id;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; price;
}

&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Products&lt;/span&gt; {
    Product findById(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId);

    &lt;span class=&quot;annotation&quot;&gt;@OrderBy&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; findByNameContains(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; searchFor);

    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;UPDATE Product o SET o.price = o.price - (?2 * o.price) WHERE o.id = ?1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; discount(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; discountRate);

    &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; save(Product p);
}

&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;MyServlet&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; HttpServlet {
    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    Products products;

    &lt;span class=&quot;directive&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doGet(HttpServletRequest req, HttpServletResponse resp)
            &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt; {
        &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; found = products.findByNameContains(searchFor);
        ...
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Refer to a &lt;a href=&quot;https://github.com/jakartaee/data/blob/main/spec/src/main/asciidoc/repository.asciidoc&quot;&gt;draft of the Jakarta Data specification&lt;/a&gt; and the &lt;a href=&quot;https://search.maven.org/remotecontent?filepath=jakarta/data/jakarta-data-api/1.0.0-b1/jakarta-data-api-1.0.0-b1-javadoc.jar&quot;&gt;jakarta.data.repository.Repository JavaDoc&lt;/a&gt; for instructions on how to properly form repository methods so that the Jakarta Data provider understands them.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Optionally, a repository interface can inherit from built-in interfaces such as &lt;code&gt;jakarta.data.repository.CrudRepository&lt;/code&gt; that define commonly used methods like &lt;code&gt;findById&lt;/code&gt; and &lt;code&gt;save&lt;/code&gt; for you:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Products&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; CrudRepository&amp;lt;Product, &lt;span class=&quot;predefined-type&quot;&gt;Long&lt;/span&gt;&amp;gt; {
    &lt;span class=&quot;annotation&quot;&gt;@OrderBy&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; findByNameContains(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; searchFor);

    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;UPDATE Product o SET o.price = o.price - (?2 * o.price) WHERE o.id = ?1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; discount(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; discountRate);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Data has not yet defined a standard configuration model. For now, the Open Liberty beta reuses the existing &lt;code&gt;defaultDatabaseStore&lt;/code&gt; configuration (which defaults to the &lt;code&gt;DefaultDataSource&lt;/code&gt; data source) for Jakarta Data. This means the beta of Jakarta Data is currently limited to a single data source. This of course will change as the specification defines more of a configuration model. The &lt;code&gt;data-1.0&lt;/code&gt; Liberty beta feature makes the Jakarta Data API available, and you also need a feature for &lt;a href=&quot;/docs/latest/reference/feature/persistence-3.1.html&quot;&gt;Jakarta Persistence&lt;/a&gt; or &lt;a href=&quot;/docs/latest/reference/feature/jdbc-4.3.html&quot;&gt;JDBC&lt;/a&gt; (or at some point in the future, Jakarta NoSQL).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Example &lt;code&gt;server.xml&lt;/code&gt; configuration:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;data-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;persistence-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt; &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- could use jdbc-4.3 instead --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-6.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt; &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- the example includes a servlet --&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;tag&quot;&gt;&amp;lt;dataSource&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DefaultDataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;jdbcDriver&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;libraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;PostgreSQL&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties.postgresql&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;databaseName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;testdb&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;serverName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;portNumber&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;5432&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;containerAuthData&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;user&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;dbuser1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;password&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;dbpwd1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/dataSource&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;PostgreSQL&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;file&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${shared.resource.dir}/jdbc/postgresql.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- optional because the following are all defaulted: --&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;databaseStore&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultDatabaseStore&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;createTables&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;dropTables&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;attribute-name&quot;&gt;tablePrefix&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;WLP&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;dataSourceRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DefaultDataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can find the initial 1.0.0-b1 beta release of Jakarta Data on &lt;a href=&quot;https://search.maven.org/artifact/jakarta.data/jakarta-data-api/1.0.0-b1/jar&quot;&gt;Maven&lt;/a&gt;, which corresponds to the Open Liberty 23.0.0.2-beta.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.data&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta-data-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0.0-b1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;experimental-function-in-the-beta-of-jakarta-data&quot;&gt;Experimental function in the beta of Jakarta Data&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This beta provides some additional function that is under consideration for Jakarta Data, but not in the Jakarta Data 1.0.0-b1 beta.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When a global transaction is active on the thread on which a repository operation executes, the repository operation enlists as part of the transaction, if the data source that backs the repository is capable of enlistment. Transaction enlistment is default for relational databases, but you can switch it off by setting the &lt;code&gt;transactional&lt;/code&gt; data source configuration attribute to &lt;code&gt;false&lt;/code&gt; in your server configuration.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When the the &lt;code&gt;concurrent-3.0&lt;/code&gt; feature is enabled, you can use the &lt;code&gt;@Asynchronous&lt;/code&gt; annotation from Jakarta Concurrency on repository methods to enable them to run asynchronously.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Products&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; CrudRepository&amp;lt;Product, &lt;span class=&quot;predefined-type&quot;&gt;Long&lt;/span&gt;&amp;gt; {
    &lt;span class=&quot;annotation&quot;&gt;@Asynchronous&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@OrderBy&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    CompletableFuture&amp;lt;&lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt;&amp;gt; findByNameContains(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; searchFor);

    &lt;span class=&quot;annotation&quot;&gt;@Asynchronous&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;UPDATE Product o SET o.price = o.price - (?2 * o.price) WHERE o.id = ?1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    CompletionStage&amp;lt;&lt;span class=&quot;predefined-type&quot;&gt;Boolean&lt;/span&gt;&amp;gt; discount(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; discountRate);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can also try out the ability to define queries annotatively:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Repository&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Products&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; CrudRepository&amp;lt;Product, &lt;span class=&quot;predefined-type&quot;&gt;Long&lt;/span&gt;&amp;gt; {
    &lt;span class=&quot;annotation&quot;&gt;@Filter&lt;/span&gt;(by = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, op = Compare.Contains)
    &lt;span class=&quot;annotation&quot;&gt;@Filter&lt;/span&gt;(by = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, op = Compare.LessThanEqual)
    &lt;span class=&quot;annotation&quot;&gt;@OrderBy&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Product&amp;gt; searchFor(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; nameMatch, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; maxPrice);

    &lt;span class=&quot;annotation&quot;&gt;@Filter&lt;/span&gt;(by = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;annotation&quot;&gt;@Update&lt;/span&gt;(attr = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, op = &lt;span class=&quot;predefined-type&quot;&gt;Operation&lt;/span&gt;.Multiply)
    &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; adjustPrice(&lt;span class=&quot;type&quot;&gt;long&lt;/span&gt; productId, &lt;span class=&quot;type&quot;&gt;float&lt;/span&gt; ratio);

    &lt;span class=&quot;annotation&quot;&gt;@Delete&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Filter&lt;/span&gt;(by = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, ignoreCase = &lt;span class=&quot;predefined-constant&quot;&gt;true&lt;/span&gt;)
    &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; discontinue(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; productName);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Your feedback is welcome on all of the Jakarta Data features and will be helpful as the specification develops further. Let us know what you think and/or be involved directly in the specification on &lt;a href=&quot;https://github.com/jakartaee/data&quot;&gt;github&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;ee10&quot;&gt;Jakarta EE 10 and MicroProfile 6&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This beta release also includes Jakarta EE Platform 10 and MicroProfile 6, which were first made available in the 22.0.0.13-beta. To find out more, reference the &lt;a href=&quot;/blog/2022/12/06/22.0.0.13-beta.html&quot;&gt;22.0.0.13-beta blog post&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 19, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using the following &lt;code&gt;pom.xml&lt;/code&gt; configuration:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;RELEASE&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;23.0.0.2-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your &lt;code&gt;pom.xml&lt;/code&gt; file for the beta version of the APIs that are associated with the beta features that you want to try.  For example, for Jakarta EE 10 and MicroProfile 6, include the following dependencies:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.microprofile&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;microprofile&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;6.0-RC3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.platform&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta.jakartaee-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;10.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[23.0.0.2-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 21 Feb 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/02/21/23.0.0.2-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/02/21/23.0.0.2-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>docker</category>
        
        <category>jakarta-ee</category>
        
        <category>data-sources</category>
        
        <category>devops</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta EE, MicroProfile, and Liberty configuration editing support in IntelliJ IDEA with Liberty Tools (early release)</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the latest early release of Liberty Tools for IntelliJ IDEA, you can iterate fast with Liberty dev mode, code with assistance for MicroProfile and Jakarta EE APIs, and easily edit Liberty configuration files, all from within the editor.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Try it out today with IntelliJ IDEA 2022.2+, installable via the &lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools/&quot;&gt;Jetbrains marketplace&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://www.youtube.com/watch?v=2T-ALsTGRY0&quot;&gt;YouTube video&lt;/a&gt; to see all the Liberty Tools for IntelliJ IDEA features.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;whats-new&quot;&gt;What&amp;#8217;s New&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;type-ahead-completion-for-jakarta-ee-microprofile-and-liberty-configuration-files&quot;&gt;Type-ahead completion for Jakarta EE, MicroProfile, and Liberty configuration files&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this early release, we add all new type-ahead completion assistance for your Liberty configuration files and Jakarta EE and MicroProfile APIs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty configuration assistance provides code completion in Liberty &lt;code&gt;server.xml&lt;/code&gt;, &lt;code&gt;server.env&lt;/code&gt;, and &lt;code&gt;bootstrap.properties&lt;/code&gt; files. For example, the completion in the following example offers possible Liberty features you can configure in your &lt;code&gt;server.xml&lt;/code&gt; file&amp;#8217;s &lt;code&gt;featureManager&lt;/code&gt; block.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/LT-intellij-0.0.8-LCLS-server-xml-completion.png&quot; alt=&quot;Liberty configuration assistance provides code completion in Liberty `server.xml`&quot; width=&quot;70%&quot; height=&quot;and `bootstrap.properties` files.&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Editing assistance provides code completion in configuration and application files for Jakarta EE and MicroProfile APIs. For example, the &lt;code&gt;rest_get&lt;/code&gt; code completion in the following example inserts a code snippet for a RESTful Web Services &lt;code&gt;GET&lt;/code&gt; method.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/LT-intellij-0.0.8-LSP4Jakarta-rest-completion.png&quot; alt=&quot;Editing assistance provides code completion in configuration and application files for Jakarta EE and MicroProfile APIs.&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;navigate-using-the-go-to-action-menu&quot;&gt;Navigate using the Go to Action menu&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you prefer to work entirely through keyboard shortcuts, all Liberty actions can now be run through the IntelliJ &lt;strong&gt;Go to Action&lt;/strong&gt; menu. You can access the menu either by pressing &lt;code&gt;Shift&lt;/code&gt; twice, then selecting the Actions tab, or by pressing &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;A&lt;/code&gt;  or  &lt;code&gt;Cmd&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;A&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/LT-intellij-0.0.8-liberty-go-to-action-view.png&quot; alt=&quot;Run Liberty actions using the keyboard with the IntelliJ Go To Action menu.&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;attach-a-debugger-at-startup&quot;&gt;Attach a debugger at startup&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When you select the Liberty &lt;strong&gt;Start&amp;#8230;&amp;#8203;&lt;/strong&gt; action from the Liberty tool window or IntelliJ &lt;strong&gt;Go To Action&lt;/strong&gt; menu, you can configure a new run configuration with Maven or Gradle parameters to pass to the &lt;code&gt;mvn liberty:dev&lt;/code&gt; or &lt;code&gt;gradle libertyDev&lt;/code&gt; commands. This configuration integrates into the IntelliJ IDEA run/debug configuration view.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/LT-intellij-0.0.8-liberty-start-with-config.png&quot; alt=&quot;Start dev mode with run configuration.&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When you select the newly created Liberty run configuration and then select the IntelliJ &lt;strong&gt;Debug&lt;/strong&gt; icon, your Liberty server will start and attach a JVM debugger all in one step. The &lt;strong&gt;Debug&lt;/strong&gt; action will determine an available port on your system and pass that port to dev mode. As soon as dev mode starts, you can start debugging your application through the built-in IntelliJ IDEA debug view.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/LT-intellij-0.0.8-liberty-debug-confirm-config.png&quot; alt=&quot;Debug dev mode with run configuration.&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For a full list of newly added features and bug fixes, check out the &lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-intellij/releases/tag/0.0.8&quot;&gt;0.0.8 release notes&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;stay-tuned-for-more&quot;&gt;Stay tuned for more&amp;#8230;&amp;#8203;&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The team is actively developing new features, including hover for more information, diagnostics, and quick-fixes to add even more editing assistance directly in-editor.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Do you have ideas for new features? Open an &lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-intellij/issues&quot;&gt;issue on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Prefer another IDE? Check out &lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Liberty Tools for Eclipse IDE&lt;/a&gt; or &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Liberty Tools for Visual Studio Code&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 14 Feb 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/02/14/liberty-tools-intellij-early-release.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/02/14/liberty-tools-intellij-early-release
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta EE 10 Platform and MicroProfile 6 in Open Liberty 23.0.0.1-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 23.0.0.1-beta offers the same set of beta content as the previous 22.0.0.13-beta release: Jakarta EE Platform 10 and MicroProfile 6. To find out more, reference the &lt;a href=&quot;/blog/2022/12/06/22.0.0.13-beta.html&quot;&gt;22.0.0.13-beta blog post&lt;/a&gt;. This beta release also includes a way to configure the maximum age for FFDC files and various bug fixes, which you can learn more about in the &lt;a href=&quot;/blog/2022/12/20/22.0.0.13.html#bugs&quot;&gt;22.0.0.13 release blog post&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 19, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;RELEASE&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;23.0.0.1-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try.  For example, for Jakarta EE 10 and MicroProfile 6, you would include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.microprofile&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;microprofile&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;6.0-RC3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.platform&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta.jakartaee-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;10.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[23.0.0.1-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using a beta release, refer to the &lt;a href=&quot;docs/latest/installing-open-liberty-betas.html&quot;&gt;Installing Open Liberty beta releases&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 03 Jan 2023 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2023/01/03/23.0.0.1-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2023/01/03/23.0.0.1-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Fast iterative cloud-native Java application development with Liberty Tools</title>
        <description>&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Developers need tools for cloud-native Java application development that are both intuitive and delightful. Enter Liberty Tools: the next-generation tools for developers to build applications with Liberty within the Eclipse IDE, Visual Studio Code, and IntelliJ IDEA integrated development environments (IDE).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty Tools can simplify your iterative coding cycle by taking away mundane manual tasks and providing coding support for the APIs you use. They also give you flexibility in your choice of IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty Tools bring together a range of capabilities:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Iterate fast with Liberty dev mode integrated within your IDE. With dev mode, we do the heavy lifting for you: code changes are automatically detected, recompiled, and deployed whenever you save a new change. You can test and debug right away.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write code confidently using MicroProfile and Jakarta EE APIs with assistance such as validations, quick fixes, completions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit Liberty configuration files easily with assistance.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use Liberty build plug-ins for Maven and Gradle to build your applications.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Today, we are delighted to share that an early release refresh of the Liberty Tools is available. This release provides a core set of capabilities for building cloud-native Java applications with Liberty, including support for Jakarta EE 9.x Web Profile and MicroProfile 3 &amp;amp; 4 APIs.  Learn more about &lt;a href=&quot;/docs/latest/develop-liberty-tools.html&quot;&gt;Liberty Tools&lt;/a&gt; and try them out:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.eclipse.org/content/liberty-tools&quot;&gt;Liberty Tools for Eclipse IDE&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext&quot;&gt;Liberty Tools for Visual Studio Code&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://plugins.jetbrains.com/plugin/14856-liberty-tools&quot;&gt;Liberty Tools for IntelliJ IDEA&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-marketplaces.png&quot; alt=&quot;Liberty Tools in IDE marketplaces&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Do let us know what you think.  Your feedback is important as we round out the capabilities and graduate Liberty Tools from early release status!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-eclipse/issues&quot;&gt;Open issues&lt;/a&gt; for Liberty Tools for Eclipse IDE&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-vscode/issues&quot;&gt;Open issues&lt;/a&gt; for Liberty Tools for Visual Studio Code&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-intellij/issues&quot;&gt;Open issues&lt;/a&gt; for Liberty Tools for IntelliJ IDEA&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We will dive into the tools further in future blog posts.  Stay tuned!&lt;/p&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 20 Dec 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/12/20/cloud-native-java-development-with-liberty-tools.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/12/20/cloud-native-java-development-with-liberty-tools
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Proposal to relicense Open Liberty to EPLv2</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To continue Open Liberty&amp;#8217;s contributions as a compatible implementation for the MicroProfile and Jakarta EE specifications, we are strongly considering relicensing Open Liberty under the EPLv2 public license.
We hope to make this change early in 2023 and are seeking feedback from the community on this decision now.
We want to give the community an opportunity to provide feedback on this process.
Earlier this week, I created a GitHub &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/23585&quot;&gt;issue&lt;/a&gt; to track making this change and we invite you to provide feedback in comments in that issue.
The intent of this blog post is to both solicit feedback and to explain the reason we are considering this change.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;open-liberty-and-the-epl&quot;&gt;Open Liberty and the EPL&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When we created Open Liberty in 2017, we looked at a number of open source licenses that existed at the time and chose to use the Eclipse Public License (EPL).
Shortly before we released Open Liberty, the Eclipse Foundation released the Eclipse Public License v2 (EPLv2).
At the time, we discussed changing the license, but decided against it because it would delay releasing Open Liberty without much benefit.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;open-liberty-as-a-compatible-implementation-in-the-spec-finalization-process&quot;&gt;Open Liberty as a compatible implementation in the spec finalization process&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Moving on 5 years, many things have changed, including the move of the MicroProfile and Java EE (now Jakarta EE) standards to Eclipse under the Eclipse Foundation Specification Process (EFSP).
The EFSP says that to release a specification (such as a MicroProfile or Jakarta EE specification) there must be an implementation of that specification that is licensed under either the EPLv2, Eclipse Distribution License, or Apache License 2.
Open Liberty has been used as a compatible implementation for finalizing MicroProfile and Jakarta EE specifications but Open Liberty is distributed under none of these licenses.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This was an oversight by all involved, but it means we have a choice: we either relicense Open Liberty to a license that the EFSP allows for spec finalization, or we don’t use Open Liberty to finalize specifications.
Providing compatible implementations for use in spec finalization is an important part of defining a specification and I have been proud that Open Liberty has been able to take this role in the past and I would like to continue to do this into the future.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;implications-of-changing-from-eplv1-to-eplv2&quot;&gt;Implications of changing from EPLv1 to EPLv2&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;m not an expert on licenses, but my understanding is that the changes between v1 and v2 clarify the language of the original license rather than granting any additional rights over the source code.
There are updates for secondary licenses, but Open Liberty is not using those capabilities of the license so it is not relevant to Open Liberty.
The EPLv1 license has language to simplify relicensing to new versions of the license.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;we-welcome-feedback-on-this-proposed-relicensing&quot;&gt;We welcome feedback on this proposed relicensing&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The result is that we want to relicense Open Liberty from EPLv1 to EPLv2 early in 2023.
Although we believe that relicensing from EPLv1 to EPLv2 is uncontroversial and relatively straightforward, we want to solicit feedback from the community ahead of making any change.
If you have feedback on this change, please let us know in this GitHub &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/23585&quot;&gt;issue&lt;/a&gt; before the end of 2022.
Some of the changes for relicensing are less disruptive when the codebase is subject to less change, which is the case over the year-end break, so we hope to make a final decision early in the new year.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Wed, 07 Dec 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/12/07/relicense-eplv2-proposal.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/12/07/relicense-eplv2-proposal
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta EE 10 Platform and MicroProfile 6 in Open Liberty 22.0.0.13-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With Open Liberty 22.0.0.13-beta we&amp;#8217;re excited to announce many new features and functions, beginning with Jakarta EE Web Profile 10.0 and Jakarta EE Platform 10.0! To make that possible, this release also includes the last remaining Jakarta EE 10 features that had not previously been part of a beta: Jakarta Authentication 3.0, Jakarta Authorization 2.1, Jakarta Security 3.0, and Jakarta Faces 4.0.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Similar to Jakarta EE 10 features, we&amp;#8217;ve also been releasing various MicroProfile 6 features in the recent beta releases, and the 22.0.0.13-beta marks the first release that includes all of MicroProfile 6! Also provided in this beta release is the ability to automatically purge FFDC log files after they reach a configured age.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 22.0.0.13-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta10&quot;&gt;Jakarta EE 10 Platform and Web Profile&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#authentication&quot;&gt;Application Authentication 3.0 (Jakarta Authentication 3.0)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#authorization&quot;&gt;Application Authorization 2.1 (Jakarta Authorization 2.1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#security&quot;&gt;Application Security 5.0 (Jakarta Security 3.0)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#faces&quot;&gt;Jakarta Faces 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp6&quot;&gt;MicroProfile 6.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#maxFfdcAge&quot;&gt;Configurable maximum FFDC age&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta10&quot;&gt;Jakarta EE 10 Platform and Web Profile&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the Open Liberty 22.0.0.9-beta, we made available Jakarta EE 10 Core Profile and ever since we&amp;#8217;ve been hard at work releasing more Jakarta EE 10 features with each subsequent beta.  We&amp;#8217;re proud to announce that the 22.0.0.13-beta is the culmination of that effort and makes available Jakarta EE 10.0 Application Client, Jakarta EE Web Profile 10.0, and Jakarta EE Platform 10.0.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty provides convenience features for running all of the component specifications that are contained in the Jakarta EE Web Profile and Jakarta EE Platform. The &lt;code&gt;webProfile-10.0&lt;/code&gt; and &lt;code&gt;jakartaee-10.0&lt;/code&gt; Liberty features provide the Jakarta EE Web Profile and Jakarta EE Platform version 10 Liberty features respectively.  For Jakarta EE 10 features in the application client, use the &lt;code&gt;jakartaeeClient-10.0&lt;/code&gt; Liberty feature.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Using these convenience features enables developers to rapidly develop applications using all of the APIs contained in the Web Profile and Platform specifications.  Unlike the &lt;code&gt;webProfile-9.1&lt;/code&gt; Liberty feature, the &lt;code&gt;webProfile-10&lt;/code&gt; Liberty feature does not enable the XML Binding feature, because XML Binding is not a Web Profile component specification. If your application relies on XML Binding APIs, you must explicitly enable the &lt;code&gt;xmlBinding-4.0&lt;/code&gt; Liberty feature when using the &lt;code&gt;webProfile-10.0&lt;/code&gt; Liberty feature.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the Jakarta EE 10 beta features in your application’s &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-10.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 10 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-10.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To run Jakarta EE 10 features on the Application Client Container in your application&amp;#8217;s &lt;code&gt;client.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt; &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaeeClient-10.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information see the &lt;a href=&quot;https://jakarta.ee/specifications/platform/10/&quot;&gt;Jakarta EE Platform 10 Specification&lt;/a&gt; and the &lt;a href=&quot;https://jakarta.ee/specifications/webprofile/10/&quot;&gt;Jakarta EE Web Profile 10 Specification&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;authentication&quot;&gt;Application Authentication 3.0 (Jakarta Authentication 3.0)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Authentication defines a general low-level SPI for authentication mechanisms, which are controllers that interact with a caller and a container&amp;#8217;s environment to obtain and validate the caller&amp;#8217;s credentials and pass an authenticated identity (such as name and groups) to the container.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Multiple enhancements are made available in Jakarta Authentication 3.0, including methods to add and remove a single server auth module, and the addition of default methods to &lt;code&gt;ServerAuth&lt;/code&gt; and &lt;code&gt;ClientAuth&lt;/code&gt; modules.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the Jakarta Authentication 3.0 feature by enabling the &lt;code&gt;appAuthentication-3.0&lt;/code&gt; feature in the server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;appAuthentication-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, see the &lt;a href=&quot;https://github.com/jakartaee/specifications/blob/master/authentication/3.0/_index.md&quot;&gt;Jakarta Authentication 3.0&lt;/a&gt; specification.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;authorization&quot;&gt;Application Authorization 2.1 (Jakarta Authorization 2.1)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Authorization defines a low-level SPI for authorization modules, which are repositories of permissions facilitating subject based security by determining whether a given subject has a given permission, and algorithms to transform security constraints for specific containers (such as Jakarta Servlet or Jakarta Enterprise Beans) into these permissions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Jakarta Authorization 2.1 specification provides enhancements to the Jakarta Authorization 2.0 specification by the addition of new methods to read permissions.  One such addition is the ability to get the &lt;code&gt;PolicyConfiguration&lt;/code&gt;, which is used for authorization.  Prior to Jakarta Authorization 2.1, the spec did not have the flexibility to read permissions from the &lt;code&gt;PolicyConfiguration&lt;/code&gt; and required complex wrapper code to get the &lt;code&gt;PolicyConfiguration&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the Jakarta Authorization 2.1 feature by using the &lt;code&gt;appAuthorization-2.1&lt;/code&gt; feature in the server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;appAuthorization-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information see the &lt;a href=&quot;https://github.com/jakartaee/specifications/blob/master/authorization/2.1/_index.md&quot;&gt;Jakarta Authorization 2.1&lt;/a&gt; specification.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;security&quot;&gt;Application Security 5.0 (Jakarta Security 3.0)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Application Security 5.0 enables support for securing the server runtime environment and applications using Jakarta Security 3.0. The Jakarta Security 3.0 specification allows using built-in authentication mechanisms and identity stores as well as providing your own custom implementations for authenticating users to protected resources. The specification introduces a new built-in authentication mechanism based on the Authorization Code Flow of the OpenID Connect Core 1.0 specification.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Security 3.0 allows using the new &lt;code&gt;@OpenIdAuthenticationMechanismDefinition&lt;/code&gt; annotation to configure a built-in OpenID Connect authentication mechanism to function as an OpenID Connect client, or Relying Party (RP), so that you can use an OpenID Connect Provider (OP) as a single sign-on identity provider. It also introduces the &lt;code&gt;OpenIdContext&lt;/code&gt; bean and various APIs for handling the access token, identity token, and refresh token.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can use the &lt;code&gt;@OpenIdAuthenticationMechanismDefinition&lt;/code&gt; annotation in a Web or JAX-RS application to enable an OpenID Connect client for that application. The following example shows a servlet with a minimal &lt;code&gt;@OpenIdAuthenticationMechanismDefinition&lt;/code&gt; annotation when the OP is a Liberty OP:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@WebServlet&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/OidcAnnotatedServlet&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;annotation&quot;&gt;@OpenIdAuthenticationMechanismDefinition&lt;/span&gt;(
&lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; providerURI = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;https://localhost:8920/oidc/endpoint/OP&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
 &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt;clientId = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clientId&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
 &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt;clientSecret = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clientSecret&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
 &lt;span class=&quot;error&quot;&gt; &lt;/span&gt; &lt;span class=&quot;error&quot;&gt; &lt;/span&gt;            redirectURI = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;https://localhost:8940/MyApp/Callback&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                claimsDefinition = &lt;span class=&quot;annotation&quot;&gt;@ClaimsDefinition&lt;/span&gt;(callerNameClaim = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sub&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, callerGroupsClaim = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;groupIds&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;))
&lt;span class=&quot;annotation&quot;&gt;@DeclareRoles&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;annotation&quot;&gt;@ServletSecurity&lt;/span&gt;(&lt;span class=&quot;annotation&quot;&gt;@HttpConstraint&lt;/span&gt;(rolesAllowed = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;))
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;OidcAnnotatedServlet&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; HttpServlet {
&lt;span class=&quot;error&quot;&gt;…&lt;/span&gt;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the Application Security 5.0 (Jakarta Security 3.0) feature by using the &lt;code&gt;appSecurity-5.0&lt;/code&gt; feature in the server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;appSecurity-5.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about the &lt;code&gt;@OpenIdAuthenticationMechanismDefinition&lt;/code&gt; annotation and its attributes, refer to the &lt;a href=&quot;https://jakarta.ee/specifications/security/3.0/jakarta-security-spec-3.0.html#openid-connect-annotation&quot;&gt;2.4.4. OpenID Connect Annotation&lt;/a&gt; section of the Jakarta Security 3.0 specification. Please refer to &lt;a href=&quot;https://javadoc.io/doc/jakarta.security.enterprise/jakarta.security.enterprise-api/latest/jakarta.security/module-summary.html&quot;&gt;Jakarta Security Module&lt;/a&gt; for the documentation of the Jakarta Security 3.0 APIs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;faces&quot;&gt;Jakarta Faces 4.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Faces is a Model-View-Controller (MVC) framework for building web applications. It offers many convenient features, such as state management and input validation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Numerous changes have occurred since the last Jakarta Faces release. Notably, Pages (formerly JSP) support has been removed. Managed Beans support has also been removed, and developers should use CDI beans from this version forward. The namespaces also have been updated from &lt;code&gt;http://xmlns.jcp.org/jsf/*&lt;/code&gt; to &lt;code&gt;jakarta.faces.*&lt;/code&gt;. Otherwise, new attributes have been added to existing tags: &lt;code&gt;multiple&lt;/code&gt; and &lt;code&gt;accept&lt;/code&gt; for &lt;code&gt;h:inputFile&lt;/code&gt; and &lt;code&gt;onerror&lt;/code&gt; for &lt;code&gt;f:websocket&lt;/code&gt;. Developers can now create facelets programmatically rather than building them via XML. Extensionless mapping is implemented, so URLs no longer need to include &lt;code&gt;/faces&lt;/code&gt; or &lt;code&gt;.xhtml&lt;/code&gt; mappings. Two new tags have been added to create a nested collections (i.e., optgroup containing option elements): &lt;code&gt;f:selectItemGroups&lt;/code&gt; and &lt;code&gt;f:selectItemGroup&lt;/code&gt;.  These are just some significant changes, but there are many more.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;faces-4.0&lt;/code&gt; feature uses MyFaces, but if you want to use an alternative Faces implementation, such as Mojarra 4.0, you can use the &lt;code&gt;facesContainer-4.0&lt;/code&gt; feature instead. The Faces API and implementation jars just need to be included in the application &lt;code&gt;WEB-INF/lib&lt;/code&gt; folder.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the Jakarta Faces 4.0 feature by using the &lt;code&gt;faces-4.0&lt;/code&gt; feature in the server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;faces-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the Jakarta Faces 4.0 feature, add &lt;code&gt;faces-4.0&lt;/code&gt; to the server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;facesContainer-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can find more information regarding the many changes in Faces 4.0 in the &lt;a href=&quot;https://balusc.omnifaces.org/2021/11/whats-new-in-faces-40.html&quot;&gt;What&amp;#8217;s new in Faces 4.0?&lt;/a&gt; article.  The Javadoc, specification documentation, and other information can be found on the &lt;a href=&quot;https://jakarta.ee/specifications/faces/4.0/&quot;&gt;Faces 4.0&lt;/a&gt; page.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;mp6&quot;&gt;MicroProfile 6.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile 6.0 enables applications to use MicroProfile APIs together with Jakarta EE 10 Core Profile. The complete list of MicroProfile 6.0 specifications includes:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/coreprofile/10/&quot;&gt;Jakarta EE 10 Core Profile&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-config/releases/tag/3.0.2&quot;&gt;MicroProfile Config 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-fault-tolerance/releases/tag/4.0.2&quot;&gt;MicroProfile Fault Tolerance 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-metrics/releases/tag/5.0&quot;&gt;MicroProfile Metrics 5.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-health/releases/tag/4.0.1&quot;&gt;MicroProfile Health 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-telemetry/releases/tag/1.0&quot;&gt;MicroProfile Telemetry 1.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-open-api/releases/tag/3.1&quot;&gt;MicroProfile OpenAPI 3.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-jwt-auth/releases/tag/2.1&quot;&gt;MicroProfile JWT Authentication 2.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-rest-client/releases/tag/3.0.1&quot;&gt;MicroProfile Rest Client 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following specifications in MicroProfile 6.0 release are either new or have some major or minor update when compared to MicroProfile 5.0:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile Telemetry 1.0 (new spec; find out more in the &lt;a href=&quot;/blog/2022/09/01/java-19-22.0.0.10-beta.html#microprofile&quot;&gt;22.0.0.10-beta post&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile Metrics 5.0 (major update; find out more in the &lt;a href=&quot;/blog/2022/10/27/22.0.0.12-beta.html#metrics&quot;&gt;22.0.0.12-beta post&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile OpenAPI 3.1 (minor update; find out more in the &lt;a href=&quot;/blog/2022/08/04/jakarta-core-profile-22009-beta.html#microprofile&quot;&gt;22.0.0.9-beta post&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile JWT 2.1 (minor update; find out more in the &lt;a href=&quot;/blog/2022/10/27/22.0.0.12-beta.html#jwt&quot;&gt;22.0.0.12-beta post&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile 6.0 has the following backward incompatible changes compared to MicroProfile 5.0:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Incompatible changes from MicroProfile Metrics&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile OpenTracing replaced by MicroProfile Telemetry&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Includes Jakarta EE 10 Core Profile instead of the five specifications (CDI, Jakarta Restful Web Services, JSON-B, JSON-P and Annotations) in Jakarta EE 9.1&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;It&amp;#8217;s also worth noting that MicroProfile Metrics 5.0 has &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-metrics-5.0.0-RC4/microprofile-metrics-spec-5.0.0-RC4.html#_incompatible_changes&quot;&gt;incompatible changes&lt;/a&gt; compared to MicroProfile Metrics 4.0.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the MicroProfile 6 feature by using the &lt;code&gt;microProfile-6.0&lt;/code&gt; feature in the server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;microProfile-6.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To find out more, take a look at the &lt;a href=&quot;https://github.com/eclipse/microprofile/releases/tag/6.0-RC3&quot;&gt;MicroProfile 6.0 Release&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;maxFfdcAge&quot;&gt;Configurable maximum FFDC age&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty provides First Failure Data Capture(FFDC) capability which instantly collects information about events and conditions that might lead up to a failure.  In certain scenarios, the number of files in the FFDC directory can grow to a very large amount. Currently, Open Liberty automatically purges FFDC files in excess of 500 and this value is not configurable. This beta release introduces new functionality which automatically purges FFDC log files after they reach a configured age. This is done through a new configuration attribute, &lt;code&gt;maxFfdcAge&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;code&gt;maxFfdcAge&lt;/code&gt; is the maximum desired age before an FFDC file is deleted. At midnight everyday, any FFDC file that has reached the maximum configured age will be deleted. Specify a positive integer followed by a unit of time, which can be days (&lt;code&gt;d&lt;/code&gt;), hours (&lt;code&gt;h&lt;/code&gt;), or minutes (&lt;code&gt;m&lt;/code&gt;). For example, specify 2 days as &lt;code&gt;2d&lt;/code&gt;. You can include multiple values in a single entry. For example, &lt;code&gt;2d6h&lt;/code&gt; is equivalent to 2 days and 6 hours.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Example server.xml configuration:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;logging&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;maxFfdcAge&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;2d&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 19, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, you can install the All Beta Features package using:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.tools&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;liberty-maven-plugin&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.3.4&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;22.0.0.13-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try.  For example, for Jakarta EE 10 and MicroProfile 6, you would include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.microprofile&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;microprofile&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;6.0-RC3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.platform&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta.jakartaee-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;10.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[22.0.0.13-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 06 Dec 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/12/06/22.0.0.13-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/12/06/22.0.0.13-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>security</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta EE with Liberty Tools for Eclipse IDE</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Since &lt;a href=&quot;https://openliberty.io/blog/2022/08/01/liberty-tools-eclipse.html&quot;&gt;introducing Liberty Tools for Eclipse IDE&lt;/a&gt; in August, we&amp;#8217;ve continued to add new features with each new early release.
Currently at &lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-eclipse/releases/tag/liberty-tools-0.4.0.202210251348&quot;&gt;version 0.4&lt;/a&gt;, Liberty Tools now supports developing Jakarta EE applications and editing Liberty&amp;#8217;s &lt;code&gt;bootstrap.properties&lt;/code&gt; and &lt;code&gt;server.env&lt;/code&gt; files.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let&amp;#8217;s take a closer look.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;develop-jakarta-ee-applications&quot;&gt;Develop Jakarta EE applications&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Integration with the Eclipse Language Server for Jakarta EE (Eclipse LSP4Jakarta) helps you intuitively develop with &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Jakarta EE&lt;/a&gt;. Features such as autocompletion, quick-fixes and type-ahead seamlessly integrate into your day-to-day development, making it easy to find the right methods and annotations for your application.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-eclipse-jakarta-quick-fix.gif&quot; alt=&quot;Jakarta Quick Fix&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Additionally, pre-configured annotations, methods and even full classes can be added to your application automatically with code snippets. These snippets get you up and running fast without having to worry about syntax, annotations or referencing example code.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-eclipse-jakarta-snippet.gif&quot; alt=&quot;Jakarta Hover&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;edit-liberty-server-config&quot;&gt;Edit Liberty server config&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty Tools now supports config assist and auto-completion when you edit &lt;code&gt;bootstrap.properties&lt;/code&gt; and &lt;code&gt;server.env&lt;/code&gt; files. You can easily look up the properties and values you need without leaving your IDE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/liberty-tools-eclipse-bootstrap.png&quot; alt=&quot;Liberty Bootstrap Properties&quot; width=&quot;100%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;try-it-out&quot;&gt;Try it out!&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Like what you see? Check out &lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-eclipse&quot;&gt;Liberty Tools for Eclipse&lt;/a&gt; to try the early release out for yourself, give feedback, and see what&amp;#8217;s coming next as we prepare for v1.0.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Jakarta community is always looking for contributors. Check out the &lt;a href=&quot;https://github.com/eclipse/lsp4jakarta&quot;&gt;Language Server for Jakarta EE&lt;/a&gt; to contribute to the project!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 04 Nov 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/11/04/liberty-tools-eclipse-jakarta-ls.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/11/04/liberty-tools-eclipse-jakarta-ls
          
        </guid>
        
        <category>announcements</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>More Jakarta EE 10 and MicroProfile 6 features make their debut in Open Liberty 22.0.0.12-beta!</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As we progress towards full Jakarta EE 10 compliance, the 22.0.0.12-beta release includes six new Jakarta EE 10 specifications, alongside the ones that were included in previous beta releases.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Batch 2.1 provides improved CDI integration while Jakarta XML Web Services 4.0 now incorporates Jakarta Web Services Metadata.  Jakarta Pages 3.1 provides developers an option to raise Exceptions for undefined Expression Language Identifiers, while Jakarta Tags 3.0 includes Tag URI renaming when referencing tag libraries. Jakarta Messaging 3.1 makes connection factory and destination definition annotations repeatable, while Jakarta WebSocket 2.1 allows for the registration of endpoints outside of the deployment phase.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;But this beta includes more than just Jakarta EE 10 features; two new MicroProfile 6.0 features are also included! MicroProfile JSON Web Token 2.1 includes simplified JWT validation and MicroProfile Metrics 5.0 provides user-defined metric registry scopes.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 22.0.0.12-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jakarta EE 10:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#pages&quot;&gt;Option to raise Exceptions for undefined Expression Language Identifiers (Jakarta Pages 3.1 and Jakarta Tags 3.0)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#websocket&quot;&gt;Register endpoints outside of the deployment phase (Jakarta WebSocket 2.1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#batch&quot;&gt;Improved CDI integration (Jakarta Batch 2.1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#messaging&quot;&gt;Connection factory and destination definition annotations are now repeatable (Jakarta Messaging 3.1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#xmlws&quot;&gt;Jakarta Web Services Metadata (Jakarta XML Web Services 4.0)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile 6.0:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jwt&quot;&gt;Simplified JWT Validation (MicroProfile JSON Web Token 2.1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#metrics&quot;&gt;User-defined metric registry scopes (MicroProfile Metrics 5.0)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For a full list of new and updated MicroProfile 6.0 features in Open Liberty, see the &lt;a href=&quot;/blog/2022/12/06/22.0.0.13-beta.html#mp6&quot;&gt;22.0.0.13-beta post&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;pages&quot;&gt;Option to raise Exceptions for undefined Expression Language Identifiers (Jakarta Pages 3.1 and Jakarta Tags 3.0)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Pages is a template engine that allows developers to mix various content, such as HTML, XML, and Java code, and translate it into a Jakarta Servlet. Jakarta Standard Tag Library allows for tags to encapsulate common functionality used in many web applications. The Open Liberty &lt;code&gt;pages-3.1&lt;/code&gt; feature is an implementation of both the Jakarta Pages 3.1 and Jakarta Standard Tag Library 3.0 specifications. It includes new features, behavior clarifications, and deprecations from the previous 3.0 version.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new &lt;code&gt;pages-3.1&lt;/code&gt; feature allows developers to identify undefined Expression Language variables by using a new option, which raises a &lt;code&gt;PropertyNotFoundException&lt;/code&gt; and can be set in one of two ways. The &lt;code&gt;errorOnELNotFound&lt;/code&gt; attribute is set as a page or tag directive.  The  &lt;code&gt;&amp;lt;error-on-el-not-found&amp;gt;&lt;/code&gt; element is set in  the web.xml file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, imported packages and classes were only available to the scripting environment (i.e. scriptlet tags). However, with version 3.1, they are also available in the Expression Language environment within the page. Default imports (such as &lt;code&gt;jakarta.servlet&lt;/code&gt;, &lt;code&gt;jakarta.servlet.jsp&lt;/code&gt;, &lt;code&gt;jakarta.servlet.jsp.http&lt;/code&gt;) are consistent between both environments. Related changes included internal refactoring of the &lt;code&gt;ScopedAttributeELResolver&lt;/code&gt; to create &lt;code&gt;ImportELResolver&lt;/code&gt; and the addition of the &lt;code&gt;NotFoundELResolver&lt;/code&gt;, which always resolves the requested value and returns &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Other significant changes include the deprecation of the &lt;code&gt;isThreadSafe&lt;/code&gt; directive, the &lt;code&gt;jsp:plugin&lt;/code&gt; (including the related &lt;code&gt;jsp:params&lt;/code&gt; and &lt;code&gt;jsp:fallback&lt;/code&gt;) actions, and any methods which overrode &lt;code&gt;ELResolver.getFeatureDescriptors()&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As for Jakarta Tags 3.0, the largest change includes the Tag URI renaming when referencing tag libraries. For example, &lt;code&gt;jakarta.tags.core&lt;/code&gt; now replaces the &lt;code&gt;&lt;a href=&quot;http://xmlns.jcp.org/jsp/jstl/core&quot; class=&quot;bare&quot;&gt;http://xmlns.jcp.org/jsp/jstl/core&lt;/a&gt;&lt;/code&gt; URI when importing the core tag library.  However, the implementation kept older URIs for backwards compatibility.  The remaining changes related to general clean up of the documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the new Jakarta Server Pages 3.1 and Jakarta Standard Tag Library 3.0 features, add the &lt;code&gt;pages-3.1&lt;/code&gt; feature to your server.xml:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;pages-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about Jakarta Server Pages and Jakarta Standard Tag Library, refer to the following links:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/pages.html&quot;&gt;Feature Documentation: Jakarta Server Pages&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/pages/3.1/&quot;&gt;Specification: Jakarta Server Pages 3.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/tags/3.0/&quot;&gt;Specification: Jakarta Standard Tag Library 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/pages/3.1/apidocs/jakarta.servlet.jsp/module-summary.html&quot;&gt;Javadoc: Jakarta Server Pages 3.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/tags/3.0/apidocs/jakarta.servlet.jsp.jstl/module-summary.html&quot;&gt;Javadoc: Jakarta Standard Tag Library 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;websocket&quot;&gt;Register endpoints outside of the deployment phase (Jakarta WebSocket 2.1)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta WebSocket allows communication via the WebSocket protocol, allowing for full-duplex communication between endpoints.  This means that a single, persisted connection is made across the endpoints, allowing both the server and client to continuously and simultaneously push information to each other.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta WebSocket 2.1 is the latest version of the specification and provides several new features and behavior clarifications aimed at improving WebSocket development. Firstly, when setting up dependencies, developers are likely to notice the API JARs are refactored into client and server JARs. However, both APIs are available as part of the &lt;code&gt;websocket-2.1&lt;/code&gt; feature.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;HTTP connection upgrades to the WebSocket protocol can now occur via the &lt;a href=&quot;https://jakarta.ee/specifications/websocket/2.1/apidocs/server/jakarta/websocket/server/servercontainer#upgradeHttpToWebSocket(java.lang.Object,java.lang.Object,jakarta.websocket.server.ServerEndpointConfig,java.util.Map)&quot;&gt;&lt;code&gt;ServerContainer.upgradeHttpToWebSocket()&lt;/code&gt; method​&lt;/a&gt; rather than IBM&amp;#8217;s specific &lt;a href=&quot;https://www.ibm.com/docs/api/v1/content/SSD28V_liberty/com.ibm.websphere.javadoc.liberty.doc/com.ibm.websphere.appserver.api.wsoc_1.0-javadoc/com/ibm/websphere/wsoc/WsWsocServerContainer.html#doUpgrade(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse,javax.websocket.server.ServerEndpointConfig,java.util.Map)&quot;&gt;&lt;code&gt;WsWsocServerContainer.doUpgrade()&lt;/code&gt; method&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Another change regards the &lt;code&gt;Session#getUserProperties()&lt;/code&gt; method. The returned map is now a copy per endpoint instance, per WebSocket session. Additionally, the server session&amp;#8217;s user properties are initially populated by the &lt;code&gt;ServerEndpointConfig.getUserProperties()&lt;/code&gt; method, so endpoints can retrieve properties set in the &lt;a href=&quot;https://jakarta.ee/specifications/websocket/2.1/apidocs/server/jakarta/websocket/server/serverendpointconfig.configurator#modifyHandshake(jakarta.websocket.server.ServerEndpointConfig,jakarta.websocket.server.HandshakeRequest,jakarta.websocket.HandshakeResponse)&quot;&gt;ServerEndpointConfig.Configurator.modifyHandshake() method​&lt;/a&gt;. This is similar to the client session as the user properties are a shallow copy from the &lt;a href=&quot;https://jakarta.ee/specifications/websocket/2.1/apidocs/server/jakarta/websocket/EndpointConfig.html#getUserProperties()&quot;&gt;&lt;code&gt;EndpointConfig.getUserProperties()&lt;/code&gt;&lt;/a&gt; method.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Lastly, there were many clarifications in the spec, such as requiring the &lt;a href=&quot;https://jakarta.ee/specifications/websocket/2.1/apidocs/server/jakarta/websocket/session#getRequestURI()&quot;&gt;Session.getRequestURI()&lt;/a&gt; method to return the whole URI. These clarifications can be viewed on the &lt;a href=&quot;https://jakarta.ee/specifications/websocket/2.1/&quot;&gt;Jakarta WebSocket 2.1&lt;/a&gt; page.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the Jakarta WebSocket 2.1 feature by using the &lt;code&gt;websocket-2.1&lt;/code&gt; feature in the server.xml file,&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;websocket-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about Jakarta WebSocket, refer to the following links:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/websocket.html&quot;&gt;Feature Documentation: Jakarta WebSocket&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/websocket/2.1/jakarta-websocket-spec-2.1.html&quot;&gt;Specification: Jakarta WebSocket&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/websocket/2.1/apidocs/client&quot;&gt;Client Javadoc: Jakarta WebSocket&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/websocket/2.1/apidocs/server&quot;&gt;Server Javadoc: Jakarta WebSocket&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;batch&quot;&gt;Improved CDI integration (Jakarta Batch 2.1)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The updates in Jakarta Batch 2.1 primarily focus on improved integration with Context Dependency Injection (CDI). Discovery of Batch artifacts is now standardized via CDI, whereas before it was not fully defined in the specification.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, the default &lt;code&gt;JobOperator&lt;/code&gt; was only made available from a static factory method, &lt;code&gt;BatchRuntime.getJobOperator()&lt;/code&gt;. With Jakarta Batch 2.1, the default &lt;code&gt;JobOperator&lt;/code&gt; is provided as a CDI bean unless one is defined by the user application, if an injectable field is available as defined by:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
JobOperator jobOperator;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, the &lt;code&gt;@BatchProperty&lt;/code&gt; annotation allowed for injection of String-type values only, but is now expanded to most other primitive types. For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt; &lt;span class=&quot;annotation&quot;&gt;@BatchProperty&lt;/span&gt;(name=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;p1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; p1;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This property can have other types in Jakarta Batch 2.1, including &lt;code&gt;Boolean&lt;/code&gt;, &lt;code&gt;Integer&lt;/code&gt;, &lt;code&gt;Long&lt;/code&gt;, &lt;code&gt;Float&lt;/code&gt;, and &lt;code&gt;Double&lt;/code&gt;. For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt; &lt;span class=&quot;annotation&quot;&gt;@BatchProperty&lt;/span&gt;(name=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;p1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class=&quot;predefined-type&quot;&gt;Integer&lt;/span&gt; p1;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;batch-2.1&lt;/code&gt; feature is the implementation of Jakarta Batch 2.1 for use with other Jakarta EE 10 features. It can be activated by including the &lt;code&gt;batch-2.1&lt;/code&gt; feature directly, or by including &lt;code&gt;batchManagement-1.0&lt;/code&gt; along with another Jakarta EE 10 feature. For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;batchManagement-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-6.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information regarding Jakarta Batch 2.1, refer to the following links:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/batch.html&quot;&gt;Feature Documentation: Jakarta Batch&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/batch/2.1/jakarta-batch-spec-2.1.html&quot;&gt;Specification: Jakarta Batch 2.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;messaging&quot;&gt;Connection factory and destination definition annotations are now repeatable (Jakarta Messaging 3.1)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Messaging is a set of APIs to standardize message communication between applications, defining how the messages are created, sent, received, and interpreted.  Jakarta Messaging 3.1 provides minor changes and enhancements to the specification.  Two noteworthy updates are the requirement for Java 11 and making the &lt;code&gt;@JMSConnectionFactoryDefinition&lt;/code&gt; and &lt;code&gt;@JMSDestinationDefinition&lt;/code&gt; annotations repeatable.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the new Jakarta Messaging 3.1 feature, add the &lt;code&gt;messaging-3.1&lt;/code&gt; feature to your server.xml:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;messaging-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about Jakarta Messaging, refer to the following links:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/messaging.html&quot;&gt;Feature Documentation: Jakarta Messaging&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/messaging/3.1/jakarta-messaging-spec-3.1.html&quot;&gt;Specification: Jakarta Messaging&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;xmlws&quot;&gt;Jakarta Web Services Metadata incorporated into XML Web Services 4.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta XML Web Services 4.0 is a set of APIs that allows applications to deploy SOAP-based web services on the Jakarta EE 10 platform. This set of APIs includes both the XML Web Services 4.0 specification, which now incorporates the Jakarta Web Services Metadata specification, as well as the Jakarta SOAP with Attachments 3.0 specification.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Although the changes introduced in XML Web Services 4.0 are relatively minor, they do include the requirement for Java SE 11, as well as incorporating the Jakarta Web Services Metadata specification into XML Web Services 4.0.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the new Jakarta XML Web Services 4.0 feature, add the &lt;code&gt;xmlWS-4.0&lt;/code&gt; feature to your server.xml:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;xmlWS-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about Jakarta XML Web Services, refer to the following links:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/xmlWS.html&quot;&gt;Feature Documentation: Jakarta XML Web Services&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/xml-web-services/4.0/jakarta-xml-ws-spec-4.0.html&quot;&gt;Specification: Jakarta XML Web Services&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jwt&quot;&gt;Simplified JWT Validation (MicroProfile JSON Web Token 2.1)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The MicroProfile JSON Web Token 2.1 specification allows the use of a JWT to authenticate and authorize requests to a service. The specification simplifies managing the validation of the JWT by introducing three new MicroProfile Config properties, along with corresponding &lt;code&gt;mpJwt&lt;/code&gt; attributes.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mp-jwt-verify-token-age&quot;&gt;mp.jwt.verify.token.age&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;mp.jwt.verify.token.age&lt;/code&gt; property allows you to specify the number of &lt;strong&gt;seconds&lt;/strong&gt; since the JWT token was issued. The &lt;code&gt;iat&lt;/code&gt; (issued at) claim must be present in the JWT and the configured number of seconds since &lt;code&gt;iat&lt;/code&gt; must not have elapsed. If it has elapsed, then the request is rejected with an Unauthorized (401) response.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new &lt;code&gt;tokenAge&lt;/code&gt; attribute of the &lt;code&gt;mpJwt&lt;/code&gt; element overrides the &lt;code&gt;mp.jwt.verify.token.age&lt;/code&gt; property.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mp-jwt-verify-clock-skew&quot;&gt;mp.jwt.verify.clock.skew&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;mp.jwt.verify.clock.skew&lt;/code&gt; property allows you to specify the clock skew in &lt;strong&gt;seconds&lt;/strong&gt; used during the token expiry and age verification. The default value is 0 seconds. In order to use this new property, set a negative value for the &lt;code&gt;clockSkew&lt;/code&gt; attribute of the &lt;code&gt;mpJwt&lt;/code&gt; element since the &lt;code&gt;mpJwt&lt;/code&gt; element already has a default value of 5 minutes for the &lt;code&gt;clockSkew&lt;/code&gt; attribute. For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;mpJwt&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myMpJwt&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;clockSkew&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If &lt;code&gt;clockSkew&lt;/code&gt; is not specified or it has a value greater than 0, then it will override the &lt;code&gt;mp.jwt.verify.clock.skew&lt;/code&gt; property.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mp-jwt-decrypt-key-algorithm&quot;&gt;mp.jwt.decrypt.key.algorithm&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;mp.jwt.decrypt.key.algorithm&lt;/code&gt; property allows you to specify the Key Management Algorithm for decrypting the Content Encryption Key (CEK) when receiving JWE tokens. There is no default value. The &lt;code&gt;alg&lt;/code&gt; header parameter must be present in the JWE and must be the same value as the &lt;code&gt;mp.jwt.decrypt.key.algorithm&lt;/code&gt; property. If it is not the same value, then the request is rejected with an Unauthorized (401) response. For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;mp.jwt.decrypt.key.algorithm=RSA-OAEP&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new &lt;code&gt;keyManagementKeyAlgorithm&lt;/code&gt; attribute of the &lt;code&gt;mpJwt&lt;/code&gt; element overrides the &lt;code&gt;mp.jwt.decrypt.key.algorithm&lt;/code&gt; property.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the MicroProfile JSON Web Token 2.1 feature by using the &lt;code&gt;mpJwt-2.1&lt;/code&gt; feature in the server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpJwt-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information regarding MicroProfile JSON Web Token, refer to the following links:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-jwt.html&quot;&gt;Guide: Securing microservices with JSON Web Tokens&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/mpJwt.html&quot;&gt;Feature Documentation: MicroProfile JSON Web Token&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/microprofile-config-properties.html#jwt&quot;&gt;Configuration Documentation: MicroProfile JSON Web Token&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-jwt-auth/blob/master/spec/src/main/asciidoc/microprofile-jwt-auth-spec.asciidoc&quot;&gt;Specification: MicroProfile JWT&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;metrics&quot;&gt;User-defined metric registry scopes (MicroProfile Metrics 5.0)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The MicroProfile Metrics 5.0 feature is the implementation of the Eclipse MicroProfile Metrics 5.0 release and is compatible to run only with other Jakarta EE 10 features. This latest version of MicroProfile Metrics includes both new functionality and significant changes to the functionality in MicroProfile Metrics 4.0 (i.e. the Open Liberty &lt;code&gt;mpMetrics-4.0&lt;/code&gt; feature).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Before we cover the new, lets first quickly go over the changes to existing functionality.  Most notable is the removal of the &lt;code&gt;Meter&lt;/code&gt;, &lt;code&gt;ConcurrentGauge&lt;/code&gt; and &lt;code&gt;SimpleTimer&lt;/code&gt; metrics. A consequence of this change is that the &lt;code&gt;REST.request&lt;/code&gt; metric, which was previously backed by a &lt;code&gt;SimpleTimer&lt;/code&gt; metric, is now a &lt;code&gt;Timer&lt;/code&gt; metric. For the publishing of metrics, only the Prometheus format is now available, and the JSON formatted output has been removed. Additionally, the metrics endpoint for a specific metric registry scope and metric is no longer accessed through a tree hierarchy, but rather through query params. For example, &lt;code&gt;/metrics/base/jvm.uptime&lt;/code&gt; is accessed through  &lt;code&gt;/metrics?scope=base&amp;amp;metric=jvm.uptime&lt;/code&gt;. The &lt;code&gt;/metrics?scope=base&lt;/code&gt; endpoint by itself retrieves the metrics for the base metric registry.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;New in this release is the introduction of user-defined custom scopes. Prior to this release, there was only the base, vendor and application scopes and only the application scope could be used to register metrics. Now, metrics can be registered to a user-defined metric registry scope in one of the following two ways.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;scope-attribute-in-a-the-metric-annotations&quot;&gt;Scope attribute in a the metric annotations&lt;/h4&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;@Counted(name = &amp;quot;myCounter&amp;quot;, scope =&amp;quot;customScope&amp;quot;)
public void foo(){
   ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;inject-a-metric-registry-with-a-custom-scope-using-the-new-registryscope-annotation&quot;&gt;Inject a metric registry with a custom scope using the new &lt;code&gt;@RegistryScope&lt;/code&gt; annotation&lt;/h4&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;@Inject
@RegistryScope(scope=&amp;quot;customScope&amp;quot;)
MetricRegistry metricRegistry;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;admonitionblock note&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;icon&quot;&gt;
&lt;i class=&quot;fa icon-note&quot; title=&quot;Note&quot;&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class=&quot;content&quot;&gt;
The &lt;code&gt;@RegistryType&lt;/code&gt; injection qualifier is still available, but is now deprecated.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Furthermore, the &lt;code&gt;mp.metrics.smallrye.timer.precision&lt;/code&gt; and &lt;code&gt;mp.metrics.smallrye.histogram.precision&lt;/code&gt; MicroProfile Config properties are introduced in this release. These properties specify the percentile accuracy used by the &lt;code&gt;Timer&lt;/code&gt; and &lt;code&gt;Histogram&lt;/code&gt; metrics.  The valid values are 1-5. The default value is &lt;code&gt;3&lt;/code&gt;. The higher the number, the greater the precision, but the greater the memory usage.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These only the most notable and impactful changes. There are further changes to the API that are not covered in this blog.  For a comprehensive list of changes to the MicroProfile Metrics technology, go to the &lt;a href=&quot;https://github.com/eclipse/microprofile-metrics&quot;&gt;Eclipse MicroProfile Metrics project page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the MicroProfile Metrics 5.0 feature by using the &lt;code&gt;mpMetrics-5.0&lt;/code&gt; feature in the server.xml file,&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpMetrics-5.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about MicroProfile Metrics, refer to the following links:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-metrics.html&quot;&gt;Guide: Providing metrics from a microservice&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/mpMetrics.html&quot;&gt;Feature Documentation: MicroProfile JSON Web Token&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/microprofile-config-properties.html#metrics&quot;&gt;Configuration Documentation: MicroProfile Metrics&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-metrics/blob/master/spec/src/main/asciidoc/microprofile-metrics-spec.asciidoc&quot;&gt;Specification: MicroProfile Metrics&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 19, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;22.0.0.12-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[22.0.0.12-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 27 Oct 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/10/27/22.0.0.12-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/10/27/22.0.0.12-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>security</category>
        
        <category>metrics</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Liberty InstantOn startup for cloud native Java applications</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This article was published when Liberty InstantOn was still beta. Liberty InstantOn moved out of beta as of the &lt;a href=&quot;/blog/2023/06/29/rapid-startup-instanton.html&quot;&gt;Liberty 23.0.0.6 release&lt;/a&gt;. For the latest information about Liberty InstantOn, see &lt;a href=&quot;https://openliberty.io/docs/latest/instanton.html&quot;&gt;Faster startup for containerized applications with Open Liberty InstantOn&lt;/a&gt; in the Open Liberty docs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Do you want cloud-native Java applications that can start up in milliseconds, without compromising on throughput, memory, development-production parity, or Java language features? The Open Liberty 22.0.0.11-beta brings you InstantOn, an exciting new feature that provides incredibly fast startup times for MicroProfile and Jakarta EE applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In serverless environments, application startup times are important. InstantOn application instances can scale to zero when the application is not in use. Scaling to zero can help reduce the overall cloud costs for deployed applications by reducing the overall number of application instances when there are no ongoing requests. When activity picks up for the application, new instances can start up quickly, without introducing high latency for the user.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;how-open-liberty-enables-instanton-startup&quot;&gt;How Open Liberty enables InstantOn startup&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable InstantOn, Open Liberty uses new features of the &lt;a href=&quot;https://www.eclipse.org/openj9/&quot;&gt;OpenJ9&lt;/a&gt; JVM and a Linux technology called Checkpoint/Restore In Userspace &lt;a href=&quot;https://criu.org/&quot;&gt;CRIU&lt;/a&gt; to take a checkpoint of the application process as it starts. This checkpoint is a snapshot of the running application process that can be persisted and then quickly restored to bring the application process back into the state it was in when the checkpoint was taken. This process enables the Liberty instance, along with any configured applications, to be restored multiple times into distinct instances of your application.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To see just how fast InstantOn startup is, skip to the &quot;&lt;a href=&quot;#benchmark&quot;&gt;How fast is it?&lt;/a&gt;&quot; section. For more details on the advantages of this approach, see the &lt;a href=&quot;https://blog.openj9.org/2022/09/26/fast-jvm-startup-with-openj9-criu-support/&quot;&gt;Fast JVM startup with OpenJ9 CRIU Support&lt;/a&gt; blog post and this earlier &lt;a href=&quot;/blog/2020/02/12/faster-startup-Java-applications-criu.html&quot;&gt;Open Liberty blog post&lt;/a&gt; where we first discussed the potential of CRIU for faster startup of Java applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty InstantOn feature makes it easy for you to try it out by providing a new &lt;code&gt;checkpoint&lt;/code&gt; action, which can be executed against your existing Open Liberty server configurations. With the &lt;code&gt;checkpoint&lt;/code&gt; action, you specify a phase at which you want the Liberty startup process to stop and save a checkpoint.  When Liberty is launched, it will detect the saved checkpoint process and resume the process from the state that it was saved in during the &lt;code&gt;checkpoint&lt;/code&gt; action.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;set-up-the-example-application-project&quot;&gt;Set up the example application project&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Before we get into the details of how the &lt;code&gt;checkpoint&lt;/code&gt; action works, let&amp;#8217;s set up a working example. For this example, we will have a look at the &lt;a href=&quot;/guides/getting-started.html&quot;&gt;Getting started with Open Liberty&lt;/a&gt; guide. If you want to follow along, start by cloning the &lt;a href=&quot;https://github.com/openliberty/guide-getting-started.git&quot;&gt;Git repository&lt;/a&gt; for this guide and use the projects that are provided inside:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;git clone https://github.com/openliberty/guide-getting-started.git
cd guide-getting-started&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We will work within the &lt;code&gt;finish/&lt;/code&gt; directory for this demonstration. To try out the application, run the following Maven goal to build the application and deploy it to Open Liberty:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;cd finish
mvn liberty:run&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After you see the following message, your application server is ready:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;The defaultServer server is ready to run a smarter planet.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out the service at the &lt;a href=&quot;http://localhost:9080/dev/system/properties&quot; class=&quot;bare&quot;&gt;http://localhost:9080/dev/system/properties&lt;/a&gt; URL.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After you finish checking out the application, stop the Open Liberty server by pressing CTRL+C in the command-line session where you ran the server.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To build the WAR for the application run the following :&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;mvn package&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This command builds a &lt;code&gt;target/guide-getting-started.war&lt;/code&gt; archive. We can now include this WAR in a container image that uses the InstantOn feature.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;containerizing-the-application&quot;&gt;Containerizing the application&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For an application to use Open Liberty InstantOn support, it must first be containerized using the Open Liberty beta InstantOn image. For general information about how to containerize applications with Open Liberty, see the &lt;a href=&quot;/guides/containerize.html&quot;&gt;Containerizing microservices&lt;/a&gt; guide or the &lt;a href=&quot;/guides/containerize-podman.html&quot;&gt;Containerizing microservices with Podman&lt;/a&gt; guide. If you are unfamiliar with Podman, follow the Podman guide first because the Open Liberty InstantOn support currently requires the use of Podman. Support for Docker should come later, once Docker supports the capabilities that CRIU requires.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;containerize-an-application-using-the-open-liberty-beta-instanton-image&quot;&gt;Containerize an application using the Open Liberty Beta InstantOn image&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Liberty InstantOn beta image contains the prerequisites for building an application container image with a checkpoint server process.  Applications can use the Liberty InstantOn beta image as a base to build their own application container images and from that create their own application container image with a checkpoint process. This involves the following steps:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#dockerfile&quot;&gt;Create the Dockerfile for the application&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#app-image&quot;&gt;Build the application container image&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#checkpoint-app&quot;&gt;Checkpoint an application in-container&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#checkpoint-image&quot;&gt;Create the application checkpoint image&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;prerequisites-to-checkpointrestore-a-containerized-application&quot;&gt;Prerequisites to checkpoint/restore a containerized application&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Currently, the beta of Open Liberty InstantOn only supports running on x86-64/amd64 architectures. To build and run container images that use &lt;code&gt;criu&lt;/code&gt;, the host Operating System needs a few prerequisites installed. All our testing was done on RHEL 8.6 and RHEL 9.0. Other Linux distributions and versions might be possible if they have the necessary prerequisites. The following conditions are required:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The kernel must support the Linux &lt;a href=&quot;https://man7.org/linux/man-pages/man7/capabilities.7.html&quot;&gt;CAP_CHECKPOINT_RESTORE&lt;/a&gt; capability. This capability was introduced in kernel version 5.9, but was backported to RHEL kernel versions used in RHEL 8.6.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The latest available version of Podman for the Linux distribution must be installed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Podman must be configured to use the &lt;code&gt;crun&lt;/code&gt; or &lt;code&gt;runc&lt;/code&gt; container runtime.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you use the &lt;code&gt;runc&lt;/code&gt; container runtime, then version 1.1.3 or higher is required so that you have the recent &lt;a href=&quot;https://github.com/opencontainers/runc/pull/3451&quot;&gt;fix&lt;/a&gt; to &lt;code&gt;runc&lt;/code&gt;. This fix enables the successful mount of &lt;code&gt;/proc/sys/kernel/ns_last_pid&lt;/code&gt; in the container.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;dockerfile&quot;&gt;Create the Dockerfile for the application&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For the &lt;a href=&quot;/guides/getting-started.html&quot;&gt;Getting started with Open Liberty&lt;/a&gt; example, the first step is to create a &lt;code&gt;Dockerfile&lt;/code&gt; that provides the instructions to create a containerized version of the application. Note that &lt;code&gt;podman&lt;/code&gt; also supports using the &lt;code&gt;Containerfile&lt;/code&gt; format for building container images.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For this example, we will use an official image from the IBM Container Registry (ICR), &lt;code&gt;icr.io/appcafe/open-liberty:beta&lt;/code&gt;, as the parent image. This image is tagged with the word &lt;code&gt;beta&lt;/code&gt;, meaning it includes all the Liberty beta features as well as all the Liberty features from the &lt;code&gt;full&lt;/code&gt; image. The image is tagged with &lt;code&gt;instanton&lt;/code&gt;, meaning it includes all the prerequisites for producing a checkpoint process image, such as the necessary &lt;code&gt;criu&lt;/code&gt; binary files.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;Dockerfile&lt;/code&gt; for the getting-started application already exists at &lt;code&gt;finish/Dockerfile&lt;/code&gt;. Edit the existing &lt;code&gt;finish/Dockerfile&lt;/code&gt; and change the &lt;code&gt;FROM&lt;/code&gt; instruction to use the &lt;code&gt;icr.io/appcafe/open-liberty:beta&lt;/code&gt; parent image. After you save the &lt;code&gt;Dockerfile&lt;/code&gt;, it should look something like this:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Dockerfile&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM icr.io/appcafe/open-liberty:beta

ARG VERSION=1.0
ARG REVISION=SNAPSHOT

LABEL \
  org.opencontainers.image.authors=&amp;quot;Your Name&amp;quot; \
  org.opencontainers.image.vendor=&amp;quot;IBM&amp;quot; \
  org.opencontainers.image.url=&amp;quot;local&amp;quot; \
  org.opencontainers.image.source=&amp;quot;https://github.com/OpenLiberty/guide-getting-started&amp;quot; \
  org.opencontainers.image.version=&amp;quot;$VERSION&amp;quot; \
  org.opencontainers.image.revision=&amp;quot;$REVISION&amp;quot; \
  vendor=&amp;quot;Open Liberty&amp;quot; \
  name=&amp;quot;system&amp;quot; \
  version=&amp;quot;$VERSION-$REVISION&amp;quot; \
  summary=&amp;quot;The system microservice from the Getting Started guide&amp;quot; \
  description=&amp;quot;This image contains the system microservice running with the Open Liberty runtime.&amp;quot;

COPY --chown=1001:0 src/main/liberty/config/ /config/
COPY --chown=1001:0 target/*.war /config/apps/

RUN configure.sh&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;app-image&quot;&gt;Building the application container image&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For &lt;code&gt;criu&lt;/code&gt; to be able to take a checkpoint of and restore a process, the &lt;code&gt;criu&lt;/code&gt; binary must be granted additional &lt;a href=&quot;https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html/container_security_guide/linux_capabilities_and_seccomp&quot;&gt;Linux capabilities&lt;/a&gt;. In particular, for Open Liberty, it needs to be granted &lt;code&gt;cap_checkpoint_restore&lt;/code&gt;, &lt;code&gt;cap_net_admin&lt;/code&gt; and &lt;code&gt;cap_sys_ptrace&lt;/code&gt;. The Open Liberty InstantOn beta image includes the &lt;code&gt;criu&lt;/code&gt; binary with the necessary capabilities already granted to the &lt;code&gt;criu&lt;/code&gt; binary file. For the &lt;code&gt;criu&lt;/code&gt; binary to be given access to its assigned capabilities at run time, the container that is running &lt;code&gt;criu&lt;/code&gt; must also be granted the necessary capabilities when it is launched. You can grant these capabilities to the container in one of two ways:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;Use a privileged container using the &lt;code&gt;--privileged&lt;/code&gt; option&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Assign specific capabilities using &lt;code&gt;--cap-add&lt;/code&gt; options&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When you use Docker, the daemon typically has root authority. This authority allows it to grant any requested capabilities when it launches a container. With Podman, there is no daemon, so the user who launches the container must have the authority to grant it the necessary Linux capabilities. You have this authority when you run as root or use &lt;code&gt;sudo&lt;/code&gt; to run the &lt;code&gt;podman&lt;/code&gt; commands. For the purposes of this example, we assume you are running the &lt;code&gt;podman&lt;/code&gt; commands as the root user.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With that understanding, we can now build the container image by using the &lt;code&gt;podman build&lt;/code&gt; command. From the &lt;code&gt;finish/&lt;/code&gt; directory, run the following command to build the container image for the application:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Build the application container image&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;podman build -t getting-started .&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This command creates the &lt;code&gt;getting-started&lt;/code&gt; container image.  However, this container image does not contain any checkpoint image files that can be used for InstantOn startup. You can run this application container image with the following command:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Run the application container&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;podman run --name getting-started --rm -p 9080:9080 getting-started&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Note the amount of time Liberty takes to report it has been started and check out the service running in the container at the &lt;a href=&quot;http://localhost:9080/dev/system/properties&quot; class=&quot;bare&quot;&gt;http://localhost:9080/dev/system/properties&lt;/a&gt; URL. After you finish checking out the application, stop the running container by pressing CTRL+C in the command-line session where you ran the &lt;code&gt;podman run&lt;/code&gt; command.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;checkpoint-app&quot;&gt;Checkpoint an application in-container&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty has three phases during the startup process where a checkpoint can occur:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;features&lt;/code&gt; - This is the earliest phase where a checkpoint can happen.  The checkpoint occurs after all of the configured Open Liberty features are started, but before any processing occurs for the installed applications. Note that this checkpoint phase has been removed, see &lt;a href=&quot;/blog/2023/02/10/instant-on-beta-update.html&quot;&gt;New enhancements for Liberty InstantOn in 23.0.0.2-beta&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;beforeAppStart&lt;/code&gt; - The checkpoint happens after processing the configured application metadata.  If the application has any components that get run as part of the application starting, the checkpoint is taken before executing any code from the application.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;afterAppStart&lt;/code&gt; - This is the last phase where a checkpoint can happen, so it has the potential to provide the fastest startup time when restoring the application instance. The checkpoint happens after all configured applications are reported as started.  This phase happens before opening any ports for listening to incoming requests for the applications.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;afterAppStart&lt;/code&gt; phase typically provides the quickest startup time for an application, but it also might cause some application code to run before the server process checkpoint happens.  This might lead to undesired behavior when restoring the checkpoint process if the application holds on to some state that should not be restored into more than one concurrent instance of the application.  For example, connecting to an outside resource such as a database before the checkpoint is taken results in a failure to restore many instances of such a process since this would try to restore the same connection multiple times. However, If your application initialization does not perform operations such as opening database connections, you might be able to use the &lt;code&gt;afterAppStart&lt;/code&gt; phase for the checkpoint.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After an application container image is built, it can be used to checkpoint the application process at one of the previously described checkpoint phases (&lt;code&gt;features&lt;/code&gt;, &lt;code&gt;beforeAppStart&lt;/code&gt;, &lt;code&gt;afterAppStart&lt;/code&gt;). You can specify a phase for your checkpoint by using the &lt;code&gt;--env&lt;/code&gt; option to &lt;code&gt;podman run&lt;/code&gt; to set the value for &lt;code&gt;WLP_CHECKPOINT&lt;/code&gt; to one of the available checkpoint phases. For this example, use the &lt;code&gt;afterAppStart&lt;/code&gt; phase by running the following &lt;code&gt;podman&lt;/code&gt; command:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Perform a checkpoint in container&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;podman run \
  --name getting-started-checkpoint-container \
  --privileged \
  --env WLP_CHECKPOINT=afterAppStart \
  getting-started&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;--privileged&lt;/code&gt; option is required to perform the &lt;code&gt;criu&lt;/code&gt; checkpoint in-container.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;WLP_CHECKPOINT&lt;/code&gt; environment variable is used to specify the checkpoint phase. For the getting-started example the &lt;code&gt;afterAppStart&lt;/code&gt; checkpoint phase will provide the fastest restore time.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This will start the container with the application running on Open Liberty.  After Open Liberty starts, it performs the checkpoint at the phase specified by the &lt;code&gt;WLP_CHECKPOINT&lt;/code&gt; environment variable. After the container process data has been persisted, the container will stop, leaving you with a stopped container that contains the checkpoint process data. The output will look something like this:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Process checkpoint output&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;Performing checkpoint --at=afterAppStart

Launching defaultServer (Open Liberty 22.0.0.11-beta/wlp-1.0.69.cl221020220912-1100) on Eclipse OpenJ9 VM, version 17.0.5-ea+2 (en_US)
CWWKE0953W: This version of Open Liberty is an unsupported early release version.
[AUDIT   ] CWWKE0001I: The server defaultServer has been launched.
[AUDIT   ] CWWKG0093A: Processing configuration drop-ins resource: /opt/ol/wlp/usr/servers/defaultServer/configDropins/defaults/checkpoint.xml
[AUDIT   ] CWWKG0093A: Processing configuration drop-ins resource: /opt/ol/wlp/usr/servers/defaultServer/configDropins/defaults/keystore.xml
[AUDIT   ] CWWKG0093A: Processing configuration drop-ins resource: /opt/ol/wlp/usr/servers/defaultServer/configDropins/defaults/open-default-port.xml
[AUDIT   ] CWWKZ0058I: Monitoring dropins for applications.
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://f5edff273d9c:9080/ibm/api/
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://f5edff273d9c:9080/metrics/
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://f5edff273d9c:9080/health/
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://f5edff273d9c:9080/dev/
[AUDIT   ] CWWKZ0001I: Application guide-getting-started started in 0.986 seconds.
[AUDIT   ] CWWKC0451I: A server checkpoint was requested. When the checkpoint completes, the server stops.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This process currently cannot be done as part of a &lt;code&gt;podman build&lt;/code&gt; step because Podman (and Docker) do not provide a way to grant the container image build the necessary Linux capabilities for &lt;code&gt;criu&lt;/code&gt; to perform the process checkpoint.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;checkpoint-image&quot;&gt;Create the application checkpoint image&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;So far, we have created the checkpoint process data for the getting-started application and stored it in a stopped container named &lt;code&gt;getting-started-checkpoint-container&lt;/code&gt;. The final step is to create a new container image that contains the checkpoint process data. When this container image is started, it will resume the application process right from the point that the checkpoint was created, resulting in an InstantOn application. You can create the new image by running the following &lt;code&gt;podman commit&lt;/code&gt; operation:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Commit the checkpoint to an image&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;podman commit getting-started-checkpoint-container getting-started-instanton&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now we have two application images named &lt;code&gt;getting-started&lt;/code&gt; and &lt;code&gt;getting-started-instanton&lt;/code&gt;. Starting a container with the &lt;code&gt;getting-started-instanton&lt;/code&gt; container image will show a much faster startup time than the original &lt;code&gt;getting-started&lt;/code&gt; image.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;running-the-instanton-application-image&quot;&gt;Running the instanton application image&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Typically, an application container can be started from an application container image with a command like the following:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;podman run --rm -p 9080:9080 getting-started-instanton&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;However, this command will fail because &lt;code&gt;criu&lt;/code&gt; needs some elevated privileges in order to be able to restore the process in-container. When Liberty fails to restore the checkpoint process, it will recover by launching without the checkpoint image and log the following message:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;CWWKE0957I: Restoring the checkpoint server process failed. Check the /logs/checkpoint/restore.log log to determine why the checkpoint process was not restored. Launching the server without using the checkpoint image.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;running-with-privileged-option&quot;&gt;Running with &lt;code&gt;--privileged&lt;/code&gt; option&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To grant all the required privileges available you can choose to launch a privileged container with the following command:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;podman run --rm --privileged -p 9080:9080 getting-started-instanton&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If successful, you will see output like the following:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;[AUDIT   ] CWWKZ0001I: Application guide-getting-started started in 0.059 seconds.
[AUDIT   ] CWWKC0452I: The Liberty server process resumed operation from a checkpoint in 0.088 seconds.
[AUDIT   ] CWWKF0012I: The server installed the following features: [cdi-3.0, checkpoint-1.0, concurrent-2.0, distributedMap-1.0, jndi-1.0, json-1.0, jsonb-2.0, jsonp-2.0, monitor-1.0, mpConfig-3.0, mpHealth-4.0, mpMetrics-4.0, restfulWS-3.0, restfulWSClient-3.0, servlet-5.0, ssl-1.0, transportSecurity-1.0].
[AUDIT   ] CWWKF0011I: The defaultServer server is ready to run a smarter planet. The defaultServer server started in 0.098 seconds.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;running-with-an-unprivileged-container&quot;&gt;Running with an unprivileged container&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Running fully privileged containers is not recommended.  The best practice is to instead reduce the elevated privileges down to only what is required to run the container. You can use the following command to grant the container the necessary privileges without running a fully &lt;code&gt;--privileged&lt;/code&gt; container:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;title&quot;&gt;podman run with unconfined --security-opt options&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;podman run \
  --rm \
  --cap-add=CHECKPOINT_RESTORE \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_PTRACE \
  --security-opt seccomp=unconfined \
  --security-opt systempaths=unconfined \
  --security-opt apparmor=unconfined \
  -p 9080:9080 \
  getting-started-instanton&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;--cap-add&lt;/code&gt; options grant the container the three Linux capabilities that &lt;code&gt;criu&lt;/code&gt; requires. The &lt;code&gt;--security-opt&lt;/code&gt; options are necessary to grant &lt;code&gt;criu&lt;/code&gt; access to the required system calls and access to &lt;code&gt;/proc/sys/kernel/ns_last_pid&lt;/code&gt; from the host.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;running-with-an-unprivileged-container-with-confined-security&quot;&gt;Running with an unprivileged container with confined security&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can further simplify the checkpoint process by reducing the need for the &lt;code&gt;--security-opt&lt;/code&gt; options that use &lt;code&gt;unconfined&lt;/code&gt;. By default, &lt;code&gt;podman&lt;/code&gt; does not grant access to all the system calls that &lt;code&gt;criu&lt;/code&gt; needs (defaults specified in the file &lt;code&gt;/usr/share/containers/seccomp.json&lt;/code&gt;).  First, you need an additional configuration file that grants all the required system calls that &lt;code&gt;criu&lt;/code&gt; needs to the container. Second, the host &lt;code&gt;/proc/sys/kernel/ns_last_pid&lt;/code&gt; needs to be mounted. You can do both these steps with the following command:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;title&quot;&gt;podman run with limited --security-opt&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;podman run \
  --rm \
  --cap-add=CHECKPOINT_RESTORE \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_PTRACE \
  --security-opt seccomp=criuRequiredSysCalls.json \
  -v /proc/sys/kernel/ns_last_pid:/proc/sys/kernel/ns_last_pid \
  -p 9080:9080 \
  getting-started-instanton&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;--security-opt seccomp=&lt;/code&gt; option refers to a file called &lt;a href=&quot;#sys-calls-json&quot;&gt;&lt;code&gt;criuRequiredSysCalls.json&lt;/code&gt;&lt;/a&gt;. This file specifies the system calls required by &lt;code&gt;criu&lt;/code&gt;.
The &lt;code&gt;-v&lt;/code&gt; option mounts the host &lt;code&gt;/proc/sys/kernel/ns_last_pid&lt;/code&gt; for access by the container.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Depending on your Linux distribution, Podman might use &lt;code&gt;runc&lt;/code&gt; or &lt;code&gt;crun&lt;/code&gt; by default. To check what container runtime is configured for your Podman installation, run the command &lt;code&gt;podman info&lt;/code&gt; and look at the &lt;code&gt;ociRuntime&lt;/code&gt; section. If &lt;code&gt;runc&lt;/code&gt; is used, make sure you are using version 1.1.3 or higher. For this method to work, you must have a version of &lt;code&gt;runc&lt;/code&gt; that is 1.1.3 or greater.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Depending on how up to date your RHEL 8.6 or RHEL 9.0 installation is, you might find that the &lt;code&gt;--security-opt&lt;/code&gt; for specifying the &lt;code&gt;criuRequiredSysCalls.json&lt;/code&gt; is unnecessary. At the time of writing, the most up-to-date versions of RHEL 8.6 and RHEL 9.0 include a Podman that grants the required system calls to the containers it launches by default. This default makes specifying the &lt;code&gt;--security-opt seccomp=criuRequiredSysCalls.json&lt;/code&gt; unnecessary.&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;sys-calls-json&quot; class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;title&quot;&gt;criuRequiredSysCalls.json&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;{
        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultAction&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ERRNO&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultErrnoRet&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;1&lt;/span&gt;,
        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;archMap&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;architecture&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_X86_64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;subArchitectures&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_X86&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_X32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ]
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;architecture&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_AARCH64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;subArchitectures&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_ARM&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ]
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;architecture&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_MIPS64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;subArchitectures&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_MIPS&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_MIPS64N32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ]
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;architecture&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_MIPS64N32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;subArchitectures&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_MIPS&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_MIPS64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ]
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;architecture&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_MIPSEL64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;subArchitectures&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_MIPSEL&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_MIPSEL64N32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ]
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;architecture&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_MIPSEL64N32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;subArchitectures&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_MIPSEL&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_MIPSEL64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ]
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;architecture&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_S390X&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;subArchitectures&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_S390&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ]
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;architecture&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ARCH_RISCV64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;subArchitectures&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;value&quot;&gt;null&lt;/span&gt;
                }
        ],
        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;syscalls&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;accept&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;accept4&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;access&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;adjtimex&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;alarm&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;brk&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;capget&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;capset&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;chdir&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;chmod&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;chown&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;chown32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clock_adjtime&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clock_adjtime64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clock_getres&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clock_getres_time64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clock_gettime&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clock_gettime64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clock_nanosleep&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clock_nanosleep_time64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;close_range&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;copy_file_range&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;creat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;dup&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;dup2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;dup3&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;epoll_create&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;epoll_create1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;epoll_ctl&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;epoll_ctl_old&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;epoll_pwait&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;epoll_pwait2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;epoll_wait&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;epoll_wait_old&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;eventfd&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;eventfd2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;execve&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;execveat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;exit_group&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;faccessat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;faccessat2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fadvise64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fadvise64_64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fallocate&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fanotify_mark&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fchdir&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fchmod&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fchmodat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fchown&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fchown32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fchownat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fcntl&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fcntl64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fdatasync&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fgetxattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;flistxattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;flock&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fork&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fremovexattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fsetxattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fstat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fstat64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fstatat64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fstatfs&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fstatfs64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fsync&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ftruncate&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ftruncate64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;futex&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;futex_time64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;futex_waitv&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;futimesat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getcpu&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getcwd&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getdents&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getdents64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getegid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getegid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;geteuid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;geteuid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getgid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getgid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getgroups&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getgroups32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getitimer&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getpeername&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getpgid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getpgrp&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getpid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getppid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getpriority&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getrandom&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getresgid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getresgid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getresuid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getresuid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getrlimit&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;get_robust_list&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getrusage&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getsid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getsockname&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getsockopt&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;get_thread_area&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;gettid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;gettimeofday&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getuid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getuid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;getxattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;inotify_add_watch&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;inotify_init&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;inotify_init1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;inotify_rm_watch&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;io_cancel&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ioctl&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;io_destroy&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;io_getevents&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;io_pgetevents&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;io_pgetevents_time64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ioprio_get&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ioprio_set&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;io_setup&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;io_submit&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;io_uring_enter&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;io_uring_register&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;io_uring_setup&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ipc&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;kill&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;landlock_add_rule&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;landlock_create_ruleset&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;landlock_restrict_self&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;lchown&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;lchown32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;lgetxattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;linkat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;listen&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;listxattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;llistxattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;_llseek&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;lremovexattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;lseek&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;lsetxattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;lstat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;lstat64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;madvise&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;membarrier&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;memfd_create&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;memfd_secret&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mincore&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mkdir&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mkdirat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mknod&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mknodat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mlock&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mlock2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mlockall&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mmap&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mmap2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mprotect&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mq_getsetattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mq_notify&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mq_open&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mq_timedreceive&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mq_timedreceive_time64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mq_timedsend&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mq_timedsend_time64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mq_unlink&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mremap&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;msgctl&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;msgget&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;msgrcv&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;msgsnd&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;msync&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;munlock&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;munlockall&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;munmap&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;nanosleep&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;newfstatat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;_newselect&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;openat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;openat2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;pause&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;pidfd_open&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;pidfd_send_signal&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;pipe&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;pipe2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;poll&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ppoll&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ppoll_time64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;prctl&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;pread64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;preadv&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;preadv2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;prlimit64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;process_mrelease&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;pselect6&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;pselect6_time64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;pwrite64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;pwritev&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;pwritev2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;readahead&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;readlink&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;readlinkat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;readv&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;recv&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;recvfrom&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;recvmmsg&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;recvmmsg_time64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;recvmsg&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;remap_file_pages&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;removexattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;rename&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;renameat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;renameat2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;restart_syscall&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;rmdir&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;rseq&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;rt_sigaction&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;rt_sigpending&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;rt_sigprocmask&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;rt_sigqueueinfo&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;rt_sigreturn&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;rt_sigsuspend&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;rt_sigtimedwait&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;rt_sigtimedwait_time64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;rt_tgsigqueueinfo&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sched_getaffinity&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sched_getattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sched_getparam&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sched_get_priority_max&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sched_get_priority_min&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sched_getscheduler&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sched_rr_get_interval&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sched_rr_get_interval_time64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sched_setaffinity&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sched_setattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sched_setparam&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sched_setscheduler&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sched_yield&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;seccomp&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;select&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;semctl&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;semget&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;semop&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;semtimedop&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;semtimedop_time64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sendfile&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sendfile64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sendmmsg&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sendmsg&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sendto&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setfsgid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setfsgid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setfsuid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setfsuid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setgid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setgid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setgroups&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setgroups32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setitimer&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setpgid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setpriority&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setregid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setregid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setresgid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setresgid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setresuid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setresuid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setreuid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setreuid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setrlimit&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;set_robust_list&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setsid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setsockopt&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;set_thread_area&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;set_tid_address&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setuid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setuid32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setxattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;shmat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;shmctl&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;shmdt&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;shmget&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;shutdown&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sigaltstack&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;signalfd&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;signalfd4&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sigprocmask&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sigreturn&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;socketcall&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;socketpair&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;splice&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;stat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;stat64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;statfs&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;statfs64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;statx&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;symlink&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;symlinkat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sync&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sync_file_range&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;syncfs&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sysinfo&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;tee&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;tgkill&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;timer_create&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;timer_delete&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;timer_getoverrun&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;timer_gettime&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;timer_gettime64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;timer_settime&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;timer_settime64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;timerfd_create&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;timerfd_gettime&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;timerfd_gettime64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;timerfd_settime&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;timerfd_settime64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;times&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;tkill&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;truncate&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;truncate64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ugetrlimit&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;umask&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;uname&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;unlink&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;unlinkat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;utime&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;utimensat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;utimensat_time64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;utimes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;vfork&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;vmsplice&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;wait4&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;waitid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;waitpid&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;writev&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arch_prctl&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;chroot&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clone&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clone3&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fallocate&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fanotify_init&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fsconfig&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fsmount&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fsopen&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;guarded_storage&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;kcmp&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;lseek&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mmap&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mount&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;open_by_handle_at&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;openat&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;pivot_root&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;preadv&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;process_vm_readv&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ptrace&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;readdir&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;s390_runtime_instr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setns&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sigaction&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;signal&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;syscall&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;umount&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;umount2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;unshare&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;userfaultfd&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;process_vm_readv&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;process_vm_writev&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ptrace&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;minKernel&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;4.8&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;personality&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                {
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;0&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;0&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;op&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_CMP_EQ&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                }
                        ]
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;personality&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                {
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;0&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;8&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;op&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_CMP_EQ&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                }
                        ]
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;personality&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                {
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;0&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;131072&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;op&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_CMP_EQ&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                }
                        ]
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;personality&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                {
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;0&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;131080&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;op&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_CMP_EQ&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                }
                        ]
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;personality&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                {
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;0&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;4294967295&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;op&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_CMP_EQ&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                }
                        ]
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sync_file_range2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;swapcontext&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arches&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ppc64le&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arm_fadvise64_64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arm_sync_file_range&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sync_file_range2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;breakpoint&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;cacheflush&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;set_tls&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arches&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arm&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arm64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arch_prctl&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arches&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;amd64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;x32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;modify_ldt&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arches&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;amd64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;x32&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;x86&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;s390_pci_mmio_read&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;s390_pci_mmio_write&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;s390_runtime_instr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arches&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;s390&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;s390x&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;riscv_flush_icache&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arches&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;riscv64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;open_by_handle_at&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_DAC_READ_SEARCH&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;bpf&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clone&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clone3&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fanotify_init&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fsconfig&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fsmount&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fsopen&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;fspick&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;lookup_dcookie&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mount&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mount_setattr&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;move_mount&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;name_to_handle_at&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;open_tree&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;perf_event_open&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;quotactl&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;quotactl_fd&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setdomainname&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;sethostname&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;setns&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;syslog&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;umount&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;umount2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;unshare&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYS_ADMIN&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clone&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                {
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;0&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;2114060288&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;op&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_CMP_MASKED_EQ&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                }
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;excludes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYS_ADMIN&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ],
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arches&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;s390&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;s390x&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clone&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                {
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;1&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;2114060288&lt;/span&gt;,
                                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;op&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_CMP_MASKED_EQ&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                }
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;comment&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;s390 parameter ordering for clone is different&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;arches&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;s390&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;s390x&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        },
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;excludes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYS_ADMIN&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clone3&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ERRNO&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;errnoRet&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;integer&quot;&gt;38&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;excludes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYS_ADMIN&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;reboot&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYS_BOOT&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;chroot&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYS_CHROOT&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;delete_module&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;init_module&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;finit_module&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYS_MODULE&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;acct&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYS_PACCT&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;kcmp&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;pidfd_getfd&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;process_madvise&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;process_vm_readv&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;process_vm_writev&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ptrace&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYS_PTRACE&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;iopl&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ioperm&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYS_RAWIO&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;settimeofday&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;stime&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;clock_settime&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYS_TIME&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;vhangup&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYS_TTY_CONFIG&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;get_mempolicy&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mbind&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;set_mempolicy&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYS_NICE&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                },
                {
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;names&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;syslog&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                        ],
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SCMP_ACT_ALLOW&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                        &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {
                                &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;caps&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: [
                                        &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CAP_SYSLOG&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                                ]
                        }
                }
        ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;benchmark&quot;&gt;How fast is it?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We tested multiple applications to show how startup time is reduced with InstantOn.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/HotswapProjects/pingperf-quarkus/&quot;&gt;Pingperf&lt;/a&gt; is a very simple ping-type application involve a single REST endpoint.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/johnaohara/quarkusRestCrudDemo/&quot;&gt;Rest crud&lt;/a&gt; is a bit more complicated, and involves JPA and a remote database.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/blueperf/acmeair-mainservice-java#acme-air-main-service---javaliberty/&quot;&gt;AcmeAir Microservice Main&lt;/a&gt; makes use of the MicroProfile features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These experiments were run on a 24 core system. I used &lt;code&gt;taskset -c&lt;/code&gt; to allocate 4 CPUs to the Liberty process running in container. The InstantOn times were taken using the &lt;code&gt;afterAppStart&lt;/code&gt; checkpoint phase. Startup time is measured from the time the Liberty server startup is initiated to the time the server is ready to accept requests, as denoted by the message &lt;strong&gt;&quot;The &amp;lt;server name&amp;gt; server is ready to run a smarter planet.&quot;&lt;/strong&gt; in the messages.log. The time it takes to start the container itself up has been filtered out. InstantOn versus normal startup times for these applications are shown here in milliseconds. Your results may vary based on your environment, hardware and software installed on your system, and other factors. Lower is better:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/instantonperf.png&quot; alt=&quot;Startup Performance&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;InstantOn offers a large startup savings of up to 90% depending on the application. All applications are not the same, so you might see different results with your applications.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;what-is-next&quot;&gt;What is next?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This post described the details of using Open Liberty InstantOn beta to produce an application container image with InstantOn startup times. This support currently allows for only Open Liberty features that are included as part of the Liberty webProfile-8.0, webProfile-9.1, microProfile-4.1 and microProfile-5.0 umbrella features. We hope to expand that to include future versions of webProfile and microProfile, as well as to expand support to the Jakarta full profile features (e.g. jakarta-8.0, jakarta-9.1, jakarta-10.0).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With InstantOn, you can build very fast startup application containers that can be deployed with scale-to-zero as an option. We look forward to a future blog post that describes how to deploy Open Liberty InstantOn in cloud environments such as Red Hat OpenShift Container Platform (OCP) and Kubernetes (k8s) with technologies that can auto-scale applications to zero, such as Knative.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 29 Sep 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/09/29/instant-on-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/09/29/instant-on-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>beta</category>
        
        <category>docker</category>
        
        <category>jakarta-ee</category>
        
        <category>kubernetes</category>
        
        <category>developer-experience</category>
        
        <category>performance-enhancements</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>InstantOn with checkpoint/restore in Open Liberty 22.0.0.11-beta!</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 22.0.0.11-beta provides an exciting new capability called InstantOn, which provides incredibly fast startup times and can help reduce the overall cloud costs for cloud-native applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Since the 22.0.0.9-beta release, which included the Jakarta EE 10 Core Profile, Open Liberty has continued to beta more and more Jakarta EE 10 features. This beta release introduces various developer experience and performance enhancements available through the following new Jakarta EE 10 features: Servlet 6.0, Mail 2.1, Connectors 2.1 and Persistance 3.1.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 22.0.0.11-beta includes the following new beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#instanton&quot;&gt;InstantOn with checkpoint/restore&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 10 Updates&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#servlet&quot;&gt;Set any cookie attribute (Jakarta Servlet 6.0)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mail&quot;&gt;Simpler Jakarta Mail code compilation (Jakarta Mail 2.1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#connectors&quot;&gt;Ensure correctness of data types (Jakarta Connectors 2.1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#persistence&quot;&gt;JPQL and Criteria API enhancements (Jakarta Persistence 3.1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;instanton&quot;&gt;InstantOn with checkpoint/restore&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Traditionally, starting an application can take several seconds, and sometimes minutes, before the application can service its first request. Longer startup times inhibit an application&amp;#8217;s ability to scale to zero when deployed in a cloud environment such as Kubernetes, which in turn can drive up costs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty&amp;#8217;s InstantOn capability is an innovative way to drastically reduce that startup time by using &lt;a href=&quot;https://criu.org/Main_Page&quot;&gt;checkpoint/restore&lt;/a&gt;. Restoring an application from a checkpoint process can be up to 10 times faster than starting the Liberty application from the beginning.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, see the &lt;a href=&quot;/blog/2022/09/29/instant-on-beta.html&quot;&gt;Liberty InstantOn startup for cloud native Java applications&lt;/a&gt; blog post.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 10 Updates&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the 22.0.0.11-beta release, Open Liberty adds four more Jakarta EE 10 features: Mail 2.1, Servlet 6.0, Connectors 2.1 and Persistance 3.1. These four features join the Jakarta EE 10 features from previous beta releases, including those that make up the &lt;a href=&quot;/blog/2022/08/04/jakarta-core-profile-22009-beta.html&quot;&gt;Jakarta EE 10 Core Profile&lt;/a&gt;.  To review all the previous beta content, take a look at the recent &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;servlet&quot;&gt;Set any cookie attribute (Jakarta Servlet 6.0)&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty Jakarta Servlet 6.0 (&lt;code&gt;servlet-6.0&lt;/code&gt;) feature is an implementation of the Jakarta EE 10 Servlet 6.0 specification. It includes a number of new features, specification clarifications, and deprecation features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Before Jakarta Servlet 6.0, only a few specific methods could be set for an application&amp;#8217;s cookie attributes. This meant that an application could not easily set a new attribute, such as the recent browser security &lt;code&gt;SameSite&lt;/code&gt; attribute.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;One of the new features in Jakarta Servlet 6.0 is the ability to set any attribute using a cookie&amp;#8217;s &lt;code&gt;setAttribute&lt;/code&gt; method. In addition, Jakarta Servlet 6.0 also introduces some new request APIs to aid the application&amp;#8217;s debugging. Application developers can track or refer to a request using the &lt;code&gt;ServletRequest()&lt;/code&gt; &lt;code&gt;getRequestId()&lt;/code&gt; method or obtain details of the network connection that is being used by the request by calling &lt;code&gt;ServletRequest()&lt;/code&gt; &lt;code&gt;getServletConnection()&lt;/code&gt; method.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the feature by adding &lt;code&gt;servlet-6.0&lt;/code&gt; to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-6.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://jakarta.ee/specifications/servlet/6.0/&quot;&gt;Jakarta Servlet 6.0 Specification and Javadocs&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mail&quot;&gt;Simpler Jakarta Mail code compilation (Jakarta Mail 2.1)&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Mail 2.1 support allows your Jakarta EE 10 applications to send, read, and edit E-Mail from mail servers via the Jakarta Mail APIs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The biggest change to the Jakarta Mail 2.1 specification is the removal of the direct dependency of the specification APIs on the reference implementation. This means that, in certain cases, there is no longer a need to compile your Jakarta Mail code against both the specification and the reference implementation (provided you aren&amp;#8217;t making any direct calls to the reference implementation in your code).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To facilitate this improvement, Jakarta Mail 2.1 also introduces the &lt;a href=&quot;https://jakarta.ee/specifications/mail/2.1/apidocs/jakarta.mail/jakarta/mail/util/streamprovider&quot;&gt;jakarta.mail.util.StreamProvider&lt;/a&gt; utility interface, which can be easily obtained with the &lt;code&gt;jakarta.mail.Session.getStreamProvider()&lt;/code&gt; method. You can then use the &lt;code&gt;StreamProviders&lt;/code&gt; instance to obtain encoded/decoded streams for any of the encoding/decoding methods that Jakarta Mail 2.1 supports.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the feature by adding &lt;code&gt;mail-2.1&lt;/code&gt; to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mail-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about the Jakarta Mail 2.1 specification, check out the &lt;a href=&quot;https://eclipse-ee4j.github.io/mail/&quot;&gt;Jakarta Mail&lt;/a&gt; project website.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;connectors&quot;&gt;Ensure correctness of data types (Jakarta Connectors 2.1)&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Connectors standardizes how connectors to various enterprise information systems interact with the container and applications. Jakarta Connectors 2.1 enables you to use the latest release of the &lt;a href=&quot;https://github.com/eclipse-ee4j/jca-api&quot;&gt;Jakarta resource specification&lt;/a&gt; in your application.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The main update to Jakarta Connectors in this minor feature version update is the addition of Java generics support to the &lt;code&gt;jakarta.resource.cci.ResourceFactory&lt;/code&gt;, &lt;code&gt;jakarta.resource.cci.IndexedRecord&lt;/code&gt;, and &lt;code&gt;jakarta.resource.cci.MappedRecord&lt;/code&gt; classes. This helps avoid compiler warnings and also helps ensure correctness of data types during development time.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the feature by adding &lt;code&gt;connectors-2.1&lt;/code&gt; to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;connectors-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;All other &lt;code&gt;resourceAdapter&lt;/code&gt; configurations within server.xml can remain unchanged for current applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can find out more about this specific update with the following links:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse-ee4j/jca-api&quot;&gt;Spec Project&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://mvnrepository.com/artifact/jakarta.resource/jakarta.resource-api&quot;&gt;Spec API&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/connectors/2.1/apidocs/jakarta.resource/module-summary.html&quot;&gt;Spec Javadoc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;persistence&quot;&gt;JPQL and Criteria API enhancements (Jakarta Persistence 3.1)&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Persistence API (JPA) is a richly featured API that provides an object-model approach to persisting, fetching, and modifying data stored on a relational database system. Prior to the introduction of JPA in Java EE 5, in order to interact with database storage, you had to use EJB bean or container managed entities, or raw JDBC.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Persistence 3.1 is a minor version update but introduces some great new capabilities. You can now take advantage of the &lt;code&gt;AutoClosable&lt;/code&gt; interface, introduced in Java 7, which allows for resources declared in a try-with-resources block to be automatically closed upon the completion of that try block.  Other new features include the ability to use fields of type &lt;code&gt;java.lang.UUID&lt;/code&gt; as &lt;code&gt;@Id&lt;/code&gt; types and enhancements to Java Persistence Query Language (JPQL) and Criteria API.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the feature by adding &lt;code&gt;persistence-3.1&lt;/code&gt; to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;persistence-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 19, Java SE 18, Java SE 17, Java SE 11, and Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;22.0.0.11-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[22.0.0.11-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 29 Sep 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/09/29/22.0.0.11-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/09/29/22.0.0.11-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>docker</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        <category>performance-enhancements</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Open Liberty: A brief history in maker projects of a cloud-native Java runtime</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Five years ago, in 2017, &lt;a href=&quot;https://openliberty.io/blog/2017/09/19/open-sourcing-liberty.html&quot;&gt;IBM published the source code of Liberty&lt;/a&gt;, its cloud-native Java runtime, on GitHub as &lt;a href=&quot;https://github.com/openliberty/open-liberty&quot;&gt;the Open Liberty project&lt;/a&gt;. Liberty was actually born five years earlier, in 2012 (we recently celebrated its 10th birthday), to address the need for a small footprint, extensible, and easily configurable Java runtime that could run on the cloud as well as in a data centre. Liberty was designed to provide &lt;a href=&quot;https://developer.ibm.com/articles/why-cloud-native-java-developers-love-liberty/&quot;&gt;a friendly experience to developers&lt;/a&gt; as well as to be powerful and flexible at runtime.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;At the time, Java runtimes were mostly big and serious, but Liberty was different and Liberty&amp;#8217;s development team were inspired to make it fun. The crafters and makers in the team got to work on physical projects that used or represented Liberty in creative ways.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;the-first-java-runtime-on-a-raspberry-pi&quot;&gt;The first Java runtime on a Raspberry Pi&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty was &lt;a href=&quot;https://youtu.be/cBV4tgLgDwg&quot;&gt;the first Java runtime to run on a Raspberry Pi&lt;/a&gt;. Even before Liberty&amp;#8217;s first release, &lt;a href=&quot;https://twitter.com/sjmaple&quot;&gt;Simon Maple&lt;/a&gt; (Liberty&amp;#8217;s first developer advocate) and Ozzy Osbourne (not that one; &lt;a href=&quot;https://twitter.com/OzzyDweller&quot;&gt;this one&lt;/a&gt;) &lt;a href=&quot;https://youtu.be/cBV4tgLgDwg&quot;&gt;ran Liberty on a pre-release Raspberry Pi&lt;/a&gt;, which had just &lt;a href=&quot;https://en.wikipedia.org/wiki/Raspberry_Pi#Raspberry_Pi&quot;&gt;700 Mhz of processing power and 256 MB of memory&lt;/a&gt;. Simon went on to demonstrate Liberty&amp;#8217;s applicability to the early Internet of Things by running Liberty and &lt;a href=&quot;https://mqtt.org&quot;&gt;MQTT&lt;/a&gt; on a Raspberry Pi to &lt;a href=&quot;https://youtu.be/rH_SmgmyVUo&quot;&gt;remotely control a smart house 50 miles away&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/crafters-libertypi.png&quot; alt=&quot;Running Liberty on the Raspberry Pi in 2012&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Running Liberty on the Raspberry Pi in 2012. Photo by Simon Maple.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Running Liberty on a Raspberry Pi and other hardware with limited resources sparked the imaginations of the makers within the development team.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;early-liberty-conference-demos-of-java-ee-on-liberty&quot;&gt;Early Liberty conference demos of Java EE on Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;One much-travelled Liberty conference demo was the &lt;a href=&quot;https://github.com/WASdev/skunkworks.libertycar&quot;&gt;remote-controlled Liberty Car&lt;/a&gt;, the creation of Simon&amp;#8217;s successor, &lt;a href=&quot;https://twitter.com/tom_will_banks&quot;&gt;Tom Banks&lt;/a&gt; (also responsible for &lt;a href=&quot;https://youtu.be/BLkjVzc5u6E&quot;&gt;creating a Minecraft user interface to Liberty&lt;/a&gt;) and Ozzy. Tom replaced the guts of a remote-controlled car with a Raspberry Pi running Liberty plus a WiFi access point.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/crafters-liberty-car.jpeg&quot; alt=&quot;Remote controlled car with embedded Arduino running Liberty&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Remote controlled car with embedded Arduino running Liberty.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Any conference attendee could connect and control the car from their own smartphone, demonstrating, among other things, the responsiveness of &lt;a href=&quot;https://www.infoq.com/news/2013/06/ee7-websocket-support/&quot;&gt;2013&amp;#8217;s Java EE 7 WebSocket technology&lt;/a&gt;. Java EE, not then known for its small, lightweight footprint, ran easily on the limited hardware resources. Tom&amp;#8217;s Liberty Car project matured into a conference game where attendees could race multiple Liberty Cars around a large race-track. Check out the &lt;a href=&quot;https://www.youtube.com/watch?v=LnmjAUEhfX8&quot;&gt;YouTube video&lt;/a&gt; where Tom talks through how it works.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;wearable-and-throwable-infrastructures&quot;&gt;Wearable and throwable infrastructures&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty can run with only a tiny footprint, making it friendly to both developer laptops and the cloud. This was enabled by its original OSGi architecture, which meant that any app running on Liberty could start with just minimal capabilities and then add and remove features on the fly at run time as needed by the app, including features of the recently released Java EE 7.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Queen of &lt;a href=&quot;https://www.manning.com/books/enterprise-osgi-in-action&quot;&gt;Enterprise OSGi&lt;/a&gt; and the unconventional conference demo, &lt;a href=&quot;https://hollycummins.com/about/&quot;&gt;Holly Cummins&lt;/a&gt; briefly made &lt;em&gt;wearing&lt;/em&gt; a Java runtime as a hat into a thing. She sewed a Raspberry Pi into a chef&amp;#8217;s hat and ran Liberty on it. She then wore it when presenting at conferences to show that you can take servers with you to run outside of big data centres, for example in disaster zones or other environments where there isn&amp;#8217;t the usual internet infrastructure.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/crafters-holly-hat-jfokus.jpg&quot; alt=&quot;Holly presenting in her chef&amp;#8217;s hat at JFokus&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Holly presenting in her chef&amp;#8217;s hat at JFokus. Photo by Kate Stanley.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://www.youtube.com/watch?v=OE5SLt7UlJk&quot;&gt;YouTube video&lt;/a&gt; where Holly talks about her wearable Java runtime.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After a couple of years of sporting a chef&amp;#8217;s hat at Enterprise Java conferences, Holly went further with her Java runtime crafting and made &lt;a href=&quot;https://www.infoq.com/presentations/arduino-app-server/&quot;&gt;a cuddly throwable Java runtime&lt;/a&gt;. This was an actual cuddly ball with LEDs and a Raspberry Pi embedded in it. She would throw the ball into the audience part-way through her talk and encourage them to chuck it around the room during her presentations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/crafters-holly-ball-qcon.JPG&quot; alt=&quot;Holly about to throw her app server ball whilst presenting at QCon&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Holly about to throw her app server ball whilst presenting at QCon.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;cloud-native-java-microservices-games&quot;&gt;Cloud-native Java microservices games&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As the industry moved to microservices, Enterprise Java evolved into the more microservices-friendly &lt;a href=&quot;https://microprofile.io/&quot;&gt;Eclipse MicroProfile&lt;/a&gt; and &lt;a href=&quot;https://projects.eclipse.org/projects/ee4j.jakartaee-platform&quot;&gt;Eclipse Jakarta EE&lt;/a&gt;, for which the Liberty development team are actively involved in developing and implementing specifications. So Liberty crafters and makers moved to building demos with microservice architectures rather than single-server applications. Open Liberty&amp;#8217;s new bright space-related branding also lent itself well to 3D-printed spaceships and space-themed games (and &lt;a href=&quot;/blog/2021/09/24/liberty-bikes.html&quot;&gt;a virtual bike racing game&lt;/a&gt;).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/crafters-shellcar.jpeg&quot; alt=&quot;3D-printed spaceship shell for a toy car&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;3D-printed spaceship shell for a toy car by Martin Holder and Mike Bettle-Shaffer. Photo by Mike Bettle-Shaffer.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2022/02/16/space-sentry-challenge.html&quot;&gt;Space Sentry&lt;/a&gt; was a game built by &lt;a href=&quot;https://github.com/pgunapal&quot;&gt;Prashanth Gunapalasingam&lt;/a&gt; and &lt;a href=&quot;https://github.com/fwji&quot;&gt;Frank Ji&lt;/a&gt; on Java microservices. Players controlled a laser that was mounted on top of a 3D-printed spaceship to fire at 3D-printed targets. The movements were handled by Lego and Arduinos that communicated over Wi-Fi with three microservices running in Open Liberty containers on a Raspberry Pi.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The three microservices communicated with each other using REST APIs (JAX-RS and MicroProfile Rest Client), and used other &lt;a href=&quot;/blog/2019/03/28/microprofile22-liberty-19003.html&quot;&gt;MicroProfile 2.2&lt;/a&gt; features such as MicroProfile Config, MicroProfile Health, and MicroProfile Metrics to configure and monitor the services and to post results on the leaderboard.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/crafters-spacesentry.png&quot; alt=&quot;Space Sentry spaceship and laser&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Space Sentry spaceship and laser. Photo by the Space Sentry team.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The next generation of space-themed microservices-based games came more recently in the form of Space Rover.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/space-rover-mission#readme&quot;&gt;Space Rover&lt;/a&gt; is a shiny, open source game that has a Java microservices architecture and uses &lt;a href=&quot;/blog/2021/11/26/jakarta-ee-9.1-210012.html&quot;&gt;Jakarta EE 9.1&lt;/a&gt; and &lt;a href=&quot;/blog/2022/01/18/microprofile5-22001.html&quot;&gt;MicroProfile 5.0&lt;/a&gt; APIs. It has a physical board, made by &lt;a href=&quot;https://github.com/ellen-lau&quot;&gt;Ellen Lau&lt;/a&gt; from wood and acrylic sheets with LED lights that mark out the asteroids on the board and give feedback when the Space Rover drives over the asteroid and when it completes the level. The 3D-printed Space Rover, also made by Prashanth, runs on a chassis with wheels and it rolls around the board in response to hand gestures captured by a webcam.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/crafters-spacerover-gameboard-v2.png&quot; alt=&quot;Space Rover game board&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Space Rover game board. Photo by the Space Rover team.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/crafters-spacerover-scoreboard.jpg&quot; alt=&quot;Space Rover scoreboard&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Space Rover scoreboard.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Space Rover&amp;#8217;s services make extensive use of web sockets to communicate between the components of the game (Jakarta WebSocket 2.0) and other &lt;a href=&quot;https://jakarta.ee/release/9.1/&quot;&gt;Jakarta EE 9.1&lt;/a&gt; technologies including REST endpoints and HTTP endpoints for communicating with the leaderboard and handling the game statistics (Jakarta JAX-RS 3.0), and database injections for interacting with the leaderboard database (Jakarta CDI 3.0).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://microprofile.io/compatible/5-0/&quot;&gt;MicroProfile 5.0&lt;/a&gt; technologies are used to check the status of the services and database (MicroProfile Health 4.0); to configure connections to different services and database (MicroProfile Config 3.0); to retry connection attempts to the database when there are problems (MicroProfile Fault Tolerance 4.0); to record JVM metrics on the Game service and track the latency of the Game service for the health check test (MicroProfile Metrics 4.0); to generate an HTTP client to send game end statistics to the leaderboard (MicroProfile Rest Client 3.0); and to provide REST API documentation and a UI for demonstration (MicroProfile OpenAPI 3.0).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://github.com/OpenLiberty/space-rover-mission/blob/main/images/architecture.png&quot;&gt;&lt;img src=&quot;/img/blog/crafters-spacerover-architecture.png&quot; alt=&quot;Space Rover&amp;#8217;s microservices architecture&quot; width=&quot;70%&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Space Rover architecture diagram by the Space Rover team.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Ellen, Prashanth, and team take Space Rover to conferences around the world (including Atlanta, Texas, Chicago, UK, and Ireland) where they invite attendees to use hand gestures to drive the Space Rover around the board without running into asteroids.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;inspired-by-open-liberty&quot;&gt;Inspired by Open Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;And finally, Open Liberty has also inspired projects like this Open Liberty logo made by Christopher Regan from wood and acrylic on a laser cutter:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/crafters-lasercutlogo.jpg&quot; alt=&quot;Open Liberty lasercut logo&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Open Liberty lasercut logo. Photo by Christopher Regan&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;And an Open Liberty mug rug can brighten up your desk and provide somewhere to host your tea and biscuits (or your Java and cookies, if you prefer). If you want to make your own mug rug, you can &lt;a href=&quot;https://github.com/lauracowen/openliberty-rugmug/tree/main/pdfs&quot;&gt;find the template and some instructions in GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/crafters-rug-mug-quilt.jpg&quot; alt=&quot;Open Liberty logo rug mug with tea and biscuits&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Open Liberty logo mug rug mini quilt.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;liberty-today&quot;&gt;Liberty today&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty, the cloud-native Java runtime, celebrates its 5th birthday as an open source project. It continues to be the upstream source for &lt;a href=&quot;https://www.ibm.com/cloud/websphere-liberty&quot;&gt;IBM&amp;#8217;s commercial Liberty runtime&lt;/a&gt; and the development team continues to contribute to and support &lt;a href=&quot;https://microprofile.io/&quot;&gt;Eclipse MicroProfile&lt;/a&gt;, &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Eclipse Jakarta EE&lt;/a&gt;, &lt;a href=&quot;https://www.eclipse.org/openj9/&quot;&gt;Eclipse OpenJ9&lt;/a&gt;, and other related open source projects.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty&amp;#8217;s crafters and makers will no doubt continue to develop creative new ideas alongside their day jobs. If you have created something of your own (like Roberto and his son who &lt;a href=&quot;https://github.com/onebeartoe/lizard-enclosure&quot;&gt;monitored their lizard enclosure using Liberty&lt;/a&gt;), let us know!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you would like to learn more about Liberty, &lt;a href=&quot;/blog/2022/04/12/guides-updated-mp5-jakartaee9.html&quot;&gt;try our guides&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;All photos were taken by Laura Cowen unless otherwise noted.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Wed, 21 Sep 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/09/21/history-maker-projects.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/09/21/history-maker-projects
          
        </guid>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Try out Eclipse Cargo Tracker, an enterprise-level Jakarta EE application, with Open Liberty</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As one of the top Java framework choices for enterprise-level applications, Jakarta EE is at the center of projects all over the globe. The &lt;a href=&quot;https://eclipse-ee4j.github.io/cargotracker/&quot;&gt;Eclipse Cargo Tracker&lt;/a&gt; open-source application was designed to replicate a complex enterprise application by using core Jakarta EE features with professional development standards. Now, you can get a taste of Open Liberty in an industrial environment by running Cargo Tracker with an Open Liberty server, all on your own computer.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;the-cargo-tracker-application&quot;&gt;The Cargo Tracker application&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Cargo Tracker simulates an industrially-developed freight tracking web application built with Jakarta EE 8 and domain-driven design principles. The application uses key Jakarta EE features, including Faces, CDI, Enterprise Beans, Bean Validation, RESTful Web Services, and JSON Binding. It also uses Persistence, along with Batch and Messaging.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Cargo Tracker books, tracks, updates, and routes cargo objects. Messaging events are logged to update cargo locations, while persistence ensures that cargo status is not changed or removed when the application is shut down. Each portion of Cargo Tracker represents a step in a real-life shipment process: the customer tracks their cargo using the Public Tracking interface, the shipping company schedules and routes deliveries using the Administration interface, and port handlers log arriving and departing cargo using the Mobile Event Logger.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/cargo-tracker-home.png&quot; alt=&quot;Cargo Tracker Home Page&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/cargo-tracker-map.png&quot; alt=&quot;Cargo Tracker Map&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;try-out-cargo-tracker-with-open-liberty&quot;&gt;Try out Cargo Tracker with Open Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Feel free to give Cargo Tracker with Open Liberty a try on your own! Cargo Tracker supports Java SE 8, 11, and 17. &lt;a href=&quot;https://developer.ibm.com/languages/java/semeru-runtimes/downloads&quot;&gt;IBM Semeru Runtime&lt;/a&gt; is the preferred Java runtime when using Open Liberty. Before you clone the application to your machine, install any required JDKs and ensure that your JAVA_HOME system variable is set to a compatible version. To access the repository remotely you&amp;#8217;ll need to install &lt;a href=&quot;https://git-scm.com/book/en/v2/Getting-Started-Installing-Git&quot;&gt;Git&lt;/a&gt; if you haven&amp;#8217;t already. Finally, you will need to install &lt;a href=&quot;https://maven.apache.org/download.cgi&quot;&gt;Maven&lt;/a&gt; to build and run the application.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can clone the Open Liberty branch of the Cargo Tracker project to your local machine by running:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;git clone https://github.com/eclipse-ee4j/cargotracker.git -b liberty-experimental&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can also visit the &lt;a href=&quot;https://github.com/eclipse-ee4j/cargotracker/tree/liberty-experimental&quot;&gt; Git repository for the Open Liberty branch of the Cargo Tracker project&lt;/a&gt; to take a peek at the code.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To get started, choose one of the following setup methods:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#maven_setup&quot;&gt;Maven command line setup&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#eclipse_setup&quot;&gt;Eclipse IDE setup&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;maven_setup&quot;&gt;Maven command line setup&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After cloning the project, you can quickly start Cargo Tracker through the command line with Maven. Navigate to the project base directory (where the pom.xml file is located) and run:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;mvn -P openliberty liberty:dev&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The application should start without any thrown exceptions. Startup messages, such as the message-driven bean activation warnings, are cosmetic and can be safely ignored.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_dark&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/cargo-tracker-maven-start.png&quot; alt=&quot;Cargo Tracker Maven Output&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;eclipse_setup&quot;&gt;Eclipse IDE setup&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You&amp;#8217;ll need Eclipse IDE version 2022-03 or later to run the application. Either the &quot;Eclipse IDE for Java Developers&quot; or &quot;Eclipse IDE for Enterprise Java and Web Developers&quot; package will work.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After you clone the project, import it into Eclipse by selecting the &lt;strong&gt;File&lt;/strong&gt; menu and then &lt;strong&gt;Import&lt;/strong&gt;. Choose the &lt;strong&gt;Existing Maven Projects&lt;/strong&gt; option inside the Import menu.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_dark&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/cargo-tracker-eclipse-import.png&quot; alt=&quot;Cargo Tracker Eclipse Import&quot; width=&quot;60%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the next step, select the repository base folder as the root directory and check the pom.xml under the &lt;strong&gt;Maven Projects&lt;/strong&gt; tab. Select &lt;strong&gt;Finish&lt;/strong&gt; to complete the import process.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_dark&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/cargo-tracker-eclipse-config.png&quot; alt=&quot;Cargo Tracker Eclipse Configuration&quot; width=&quot;60%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re working inside the Eclipse IDE, you&amp;#8217;ll need to install IBM&amp;#8217;s Liberty Tools feature. Follow the steps in the &lt;a href=&quot;https://github.com/OpenLiberty/liberty-tools-eclipse/blob/main/docs/installation/installation.md&quot;&gt;installation guide&lt;/a&gt; to access some convenient new resources and operations that are specific to Liberty. This &lt;a href=&quot;https://openliberty.io/blog/2022/08/01/liberty-tools-eclipse.html&quot;&gt;blog post&lt;/a&gt; covers the feature&amp;#8217;s capabilities in more detail, but for now we&amp;#8217;ll focus on the Liberty Dashboard.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To run Cargo Tracker, right-click the &lt;code&gt;cargo-tracker&lt;/code&gt; project and select the &lt;strong&gt;Start&amp;#8230;&amp;#8203;&lt;/strong&gt; option, which is second in the list.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_dark&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/cargo-tracker-eclipse-start.png&quot; alt=&quot;Cargo Tracker Eclipse Start&quot; width=&quot;60%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can then run &lt;a href=&quot;https://openliberty.io/docs/latest/development-mode.html&quot;&gt;dev mode&lt;/a&gt; with the Open Liberty profile active by typing in &lt;code&gt;-Popenliberty&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_dark&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/cargo-tracker-eclipse-parameters.png&quot; alt=&quot;Cargo Tracker Eclipse Parameters&quot; width=&quot;60%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After starting with the custom parameters for the Open Liberty profile, the application should start inside the Eclipse terminal.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;avoid-trouble-set-environment-variables&quot;&gt;Avoid trouble - set environment variables&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Since the Liberty Tools feature uses the well-known environment variables: &lt;code&gt;PATH&lt;/code&gt; and &lt;code&gt;JAVA_HOME&lt;/code&gt;, you will encounter problems if these variables are not set within your Eclipse IDE process, e.g. the &lt;code&gt;mvn&lt;/code&gt; executable might not be found.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;One tip to address this on Mac OS in particular is to restart Eclipse through Finder by right-clicking your Eclipse application and choosing &lt;strong&gt;Show Package Contents&lt;/strong&gt;. Enter the newly displayed Contents folder, select MacOS, and then run Eclipse by clicking the executable.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/cargo-tracker-eclipse-macos.png&quot; alt=&quot;Cargo Tracker Eclipse MacOS&quot; width=&quot;60%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;access-the-application&quot;&gt;Access the application&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Once the application is running, you can access it through a browser of your choice at &lt;a href=&quot;http://localhost:8080/cargo-tracker/&quot; class=&quot;bare&quot;&gt;http://localhost:8080/cargo-tracker/&lt;/a&gt; and start experimenting with it. You can track routed cargo through the Public Tracking interface, book and route cargo through the Administration interface (shown in the following image), and update cargo object events using the Mobile Event Logger. You can stop the server at any time by using &lt;code&gt;CTRL-C&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/cargo-tracker-dashboard.png&quot; alt=&quot;Cargo Tracker Dashboard&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about of each of the interfaces, can check out the &lt;a href=&quot;https://github.com/eclipse-ee4j/cargotracker/blob/liberty-experimental/README.md#exploring-the-application&quot;&gt;Exploring the Application&lt;/a&gt; section of the project README.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/eclipse-ee4j/cargotracker/blob/liberty-experimental/README.md&quot;&gt;README.md&lt;/a&gt; also contains step by step instructions for starting the application along with detailed explanations for each of the interface options on the home page.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;nice-work-where-to-next&quot;&gt;Nice work! Where to next?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You&amp;#8217;ve just set up Cargo Tracker and experienced Open Liberty with an enterprise-level application on your own machine! Check out the &lt;a href=&quot;https://openliberty.io/guides/&quot;&gt;Open Liberty guides&lt;/a&gt; for more information on using Jakarta EE and MicroProfile with Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse-ee4j/cargotracker&quot;&gt;Original Payara version of Cargo Tracker&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse-ee4j/cargotracker/blob/liberty-experimental/README.md&quot;&gt;README.MD&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/&quot;&gt;Open Liberty guides&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Wed, 24 Aug 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/08/24/open-liberty-with-cargo-tracker.html</link>
        <guid isPermaLink="true">
          
            /blog/2023/10/20/open-liberty-with-cargo-tracker-ee10.html
          
        </guid>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta EE 10 Core Profile debuts in Open Liberty 22.0.0.9-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 22.0.0.9-beta brings you the hot-off-the-press &lt;a href=&quot;https://jakarta.ee/specifications/coreprofile/10/&quot;&gt;Jakarta EE 10 Core Profile&lt;/a&gt;. Jakarta EE 10 will be the first release to provide updates to the specifications since Java EE 8 in 2017. Jakarta EE 10 Core Profile is a subset of the specifications. The Core Profile is specifically aimed at lightweight runtimes, like Open Liberty, that are optimised for running cloud-native Java microservices. While the whole Jakarta EE 10 release is just around the corner, Open Liberty 22.0.0.9-beta provides a preview of the Core Profile subset of features for you to start exploring now.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As well as Jakarta EE 10 Core Profile, we&amp;#8217;ve included in this beta two other Jakarta EE features: Jakarta EE 10 Expression Language 5.0, which means you can access any annotations present on a particular method using the &lt;code&gt;getAnnotations()&lt;/code&gt; method, and more; and Jakarta Concurrency 3.0, which enhances the set of parallel and reactive programming models available to applications, and more.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;But it’s not only Jakarta EE features in this release: MicroProfile OpenAPI 3.1 provides the ability to specify optional authentication for operations and multiple annotation enhancements, and Password Utilities 1.1 no longer forcefully federates stand-alone user registries.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 22.0.0.9-beta includes the following beta features (along with &lt;a href=&quot;/docs/latest/reference/feature/feature-overview.html&quot;&gt;all GA features&lt;/a&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jakarta EE 10 Core Profile:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#restful&quot;&gt;Support for multipart/form-data content type (Jakarta RESTful Web Services 3.1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#json&quot;&gt;Enhanced JSON string parsing and new serialization/deserialization options (Jakarta JSON Processing 2.1 and Jakarta JSON Binding 3.0)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#cdi&quot;&gt;Support for build compatible extensions and observable container state events (Jakarta CDI 4.0)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta EE 10:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#expression&quot;&gt;Access any available annotations using getAnnotations() (Jakarta Expression Language 5.0)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#concurrency&quot;&gt;Enhanced parallel and reactive programming models available to applications (Jakarta Concurrency 3.0)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#microprofile&quot;&gt;Document APIs where authentication is optional or complex (MicroProfile OpenAPI 3.1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#password&quot;&gt;Stand-alone user registries no longer forcefully federated (Password Utilities 1.1)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;restful&quot;&gt;Support for multipart/form-data content type (RESTful Web Services 3.1)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta RESTful Web Services 3.1 (also known as Jakarta Rest 3.1 and formerly known as JAX-RS) is now available in the Open Liberty 22.0.0.9 beta. The 3.1 implementation is based on RESTEasy and is  an EE10 technology, which uses the &lt;code&gt;jakarta.*&lt;/code&gt; package name. For more information on the changes in this release, see the &lt;a href=&quot;https://jakarta.ee/specifications/restful-ws/3.1/jakarta-restful-ws-spec-3.1.html#changes-since-3.0-release&quot;&gt;Changes Since 3.0 Release section&lt;/a&gt; of the &lt;a href=&quot;https://jakarta.ee/specifications/restful-ws/3.1/jakarta-restful-ws-spec-3.1.html&quot;&gt;Jakarta RESTful Web Services Spec&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Give it a try - and if you encounter any issues, please let us know!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable RESTful Web Services 3.1 by using the &lt;code&gt;restfulWS-3.1&lt;/code&gt; feature in your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;restfulWS-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you only need a RESTful client,  use the &lt;code&gt;restfulWSClient-3.1&lt;/code&gt; feature instead:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;restfulWSClient-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To learn more about RESTful Web Services or see what is coming in future releases, visit the &lt;a href=&quot;https://projects.eclipse.org/projects/ee4j.rest&quot;&gt;EE4J community page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;json&quot;&gt;Enhanced JSON string parsing and new serialization/deserialization options (JSON Processing 2.1 and JSON Binding 3.0)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Jakarta JSON Processing specification enables you to parse and generate JSON strings. The Jakarta JSON Binding specification is built on top of JSON Processing and enables you to serialize and deserialize Java objects into JSON.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Jakarta JSON Processing specification has been updated with enhancements for handling duplicate keys when parsing JSON, and better handling of the &lt;code&gt;java.lang.Number&lt;/code&gt; superclass when generating JSON strings. The Jakarta JSON Binding specification has been updated to support polymorphism.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty provides default implementations for both Jakarta JSON Processing and Binding. For JSON Processing, we provide the Parsson implementation. For JSON Binding, we provide the Yasson implementation.
To get these default implementations you can enable the &lt;code&gt;jsonp-2.1&lt;/code&gt; and &lt;code&gt;jsonb-3.0&lt;/code&gt; features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jsonb-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jsonp-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you want to use a third-party Jakarta JSON Processing 2.1 or Binding 3.0 implementation, you can enable the &lt;code&gt;jsonpContainer-2.1&lt;/code&gt; or &lt;code&gt;jsonbContainer-3.0&lt;/code&gt; features. The JSON Container features require you to configure a Basic Extensions using Liberty Libraries (BELLs) element that points to your third-party implementation(s).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jsonbContainer-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jsonpContainer-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myJsonBindingProvider&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;file&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${path.to.json.binding.provider}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;bell&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;libraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myJsonBindingProvider&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myJsonProcessingProvider&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;file&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${path.to.json.processing.provider}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;bell&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;libraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myJsonProcessingProvider&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Note that enabling either the JSON-B 3.0 feature (&lt;code&gt;jsonb-3.0&lt;/code&gt;) or the JSON-B Container 3.0 (&lt;code&gt;jsonbContainer-3.0&lt;/code&gt;) feature automatically enables the JSON-P 2.1 feature (&lt;code&gt;jsonp-2.1&lt;/code&gt;), unless you have enabled the JSON-P Container 2.1 feature (&lt;code&gt;jsonpContainer-2.1&lt;/code&gt;) in order to provide a third-party implementation of JSON-P.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can find out more about this specific update and the wider technology with the following links:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/json-p-b.html&quot;&gt;Open Liberty JSON-P and JSON-B Documentation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://javaee.github.io/jsonp/getting-started.html&quot;&gt;Jakarta JSON Processing - Getting Started&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://javaee.github.io/jsonb-spec/getting-started.html&quot;&gt;Jakarta JSON Binding - Getting Started&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/rest-client-java.html&quot;&gt;Open Liberty REST Client Guide&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;cdi&quot;&gt;Support for build compatible extensions and observable container state events (CDI 4.0)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;CDI allows objects to be bound to lifecycle contexts, to be injected, to be associated with interceptors and decorators, and to interact in a loosely coupled fashion by firing and observing events.
Highlights of CDI 4.0 include support for build compatible extensions and observable container state events. This update also brings in new Jakarta EE 10 versions of the Jakarta Annotations and Jakarta Interceptors APIs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;build-compatible-extensions&quot;&gt;Build compatible extensions&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previous versions of CDI allowed users to provide Portable Extensions to customize the CDI application initialization lifecycle. These Build Compatible Extensions make implementing extensions amenable to build-time processing. To implement a Build Compatible Extension, provide an implementation of the &lt;code&gt;BuildCompatibleExtension&lt;/code&gt; interface, declared via &lt;code&gt;META-INF/services&lt;/code&gt;. The implementation can provide methods annotated with one of the extension annotations, each of which corresponds to the extension execution phases:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;@Discovery&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;@Enhancement&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;@Registration&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;@Synthesis&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;@Validation&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For example, as part of the &lt;code&gt;Enhancement&lt;/code&gt; phase, this implementation adds an additional &lt;code&gt;MyQualifier&lt;/code&gt; annotation to the &lt;code&gt;MyService&lt;/code&gt; type:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;MyExtension&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;implements&lt;/span&gt; BuildCompatibleExtension {
    &lt;span class=&quot;annotation&quot;&gt;@Enhancement&lt;/span&gt;(type=MyService.class)
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; addMyQualifier(ClassConfig clazz) {
        clazz.addAnnotation(MyQualifier.class)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;startup-and-shutdown-events&quot;&gt;Startup and Shutdown events&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Two new observable container state events are now available: Startup and Shutdown. Applications can listen for these events to be notified when the CDI container is starting up and being shut down.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@ApplicationScoped&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;MyObserver&lt;/span&gt; {
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; observeStartup(&lt;span class=&quot;annotation&quot;&gt;@Observes&lt;/span&gt; Startup startupEvent) { {
        &lt;span class=&quot;predefined-type&quot;&gt;System&lt;/span&gt;.out.println(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CDI Container is starting&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
    }

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; observeShutdown(&lt;span class=&quot;annotation&quot;&gt;@Observes&lt;/span&gt; Shutdown shutdownEvent) { {
        &lt;span class=&quot;predefined-type&quot;&gt;System&lt;/span&gt;.out.println(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;CDI Container is stopping&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can control the order of multiple observer methods by using the &lt;code&gt;@Priority&lt;/code&gt; annotation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;empty-beans-xml-files&quot;&gt;Empty beans.xml files&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In previous versions of CDI, an empty &lt;code&gt;beans.xml&lt;/code&gt; file indicated that an archive should be treated as an explicit bean archive (the equivalent of &lt;code&gt;bean-discovery-mode=&quot;all&quot;&lt;/code&gt;). In CDI 4.0, an empty &lt;code&gt;beans.xml&lt;/code&gt; now causes an archive to be treated as an implicit bean archive (the equivalent of &lt;code&gt;bean-discovery-mode=&quot;annotated&quot;&lt;/code&gt;). If necessary, you can &lt;a href=&quot;#cdiConfiguration&quot;&gt;set the emptyBeansXmlCDI3Compatibility configuration option&lt;/a&gt; to enable compatibility with previous versions.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;unversioned-beans-xml-files&quot;&gt;Unversioned beans.xml files&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In previous versions of CDI, a non-empty &lt;code&gt;beans.xml&lt;/code&gt; file that did not include a &lt;code&gt;version&lt;/code&gt; attribute defaulted to &lt;code&gt;bean-discovery-mode=&quot;all&quot;&lt;/code&gt;. In CDI 4.0, it defaults to &lt;code&gt;bean-discovery-mode=&quot;annotated&quot;&lt;/code&gt;. However, you should properly version all &lt;code&gt;beans.xml&lt;/code&gt; files, as shown in the following configuration example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;preprocessor&quot;&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;beans&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;xmlns:xsi&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;attribute-name&quot;&gt;xmlns&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;https://jakarta.ee/xml/ns/jakartaee&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;attribute-name&quot;&gt;xsi:schemaLocation&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_4_0.xsd&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;attribute-name&quot;&gt;version&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;4.0&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;attribute-name&quot;&gt;bean-discovery-mode&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;annotated&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/beans&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;programmatic-lookup-of-beans-and-instances&quot;&gt;Programmatic lookup of beans and instances&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A new Handle API is now available to make programmatic inspection of Bean metadata easier. This avoids the need to create instances before they are actually required. You can obtain a &lt;code&gt;Handle&lt;/code&gt; using the Instance API:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Handle&lt;/span&gt;&amp;lt;T&amp;gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; AutoCloseable {
        T get();
        Bean&amp;lt;T&amp;gt; getBean();
        &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; destroy();
        &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; close();
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;removed-apis&quot;&gt;Removed APIs&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following previously deprecated CDI APIs have been removed:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;@New&lt;/code&gt; qualifier - replaced by &lt;code&gt;@Dependent&lt;/code&gt; beans.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Bean#isNullable()&lt;/code&gt; - has not been used by the implementation since CDI 1.1.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;BeanManager#fireEvent()&lt;/code&gt; - Use &lt;code&gt;BeanManager.getEvent()&lt;/code&gt; instead.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;BeanManager#createInjectionTarget(AnnotatedType)&lt;/code&gt; - replaced by &lt;code&gt;BeanManager#getInjectionTargetFactory(AnnotatedType)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;BeforeBeanDiscovery#addAnnotatedType(AnnotatedType)&lt;/code&gt; - replaced by &lt;code&gt;BeforeBeanDiscovery#addAnnotatedType(AnnotatedType, String)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;cdiConfiguration&quot;&gt;Configuration&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Liberty &lt;code&gt;&amp;lt;cdi12&amp;gt;&lt;/code&gt; &lt;code&gt;server.xml&lt;/code&gt; configuration element has been superseded by a new &lt;code&gt;&amp;lt;cdi&amp;gt;&lt;/code&gt; element, which applies to CDI versions 1.2 and later. For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;cdi&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;enableImplicitBeanArchives&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;emptyBeansXmlCDI3Compatibility&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;enableImplicitBeanArchives&lt;/code&gt; attribute is the same as it was in previous versions.&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If set to &lt;code&gt;true&lt;/code&gt;, which is the default, then archives that do not contain a &lt;code&gt;beans.xml&lt;/code&gt; file are treated as Implicit Bean Archives and scanned for classes that have bean defining annotations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If set to &lt;code&gt;false&lt;/code&gt;, then archives that do not contain a &lt;code&gt;beans.xml&lt;/code&gt; file are not scanned for annotated classes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;emptyBeansXmlCDI3Compatibility&lt;/code&gt; attribute applies only to CDI 4.0.&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If set to &lt;code&gt;true&lt;/code&gt;, then an archive that contains an empty &lt;code&gt;beans.xml&lt;/code&gt; file is treated as an explicit bean archive, as it was in CDI 3.0 and earlier.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If set to &lt;code&gt;false&lt;/code&gt;, which is the default, then an archive that contains an empty &lt;code&gt;beans.xml&lt;/code&gt; file is treated as an implicit bean archive. This is equivalent to setting &lt;code&gt;bean-discovery-mode=&quot;annotated&quot;&lt;/code&gt;..&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use the CDI 4.0 feature, add &lt;code&gt;cdi-4.0&lt;/code&gt; to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;cdi-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;expression&quot;&gt;Access any available annotations using getAnnotations() (Expression Language 5.0)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta EE 10 Expression Language 5.0 includes a number of new features, deprecations, and specification clarifications.  One of the new features is the addition of the &lt;a href=&quot;https://jakarta.ee/specifications/expression-language/5.0/apidocs/jakarta.el/jakarta/el/methodreference&quot;&gt;MethodReference&lt;/a&gt;, a new class that allows developers to access any annotations present on a particular method using the &lt;code&gt;getAnnotations()&lt;/code&gt; method.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable Expression Language 5.0, add the &lt;code&gt;expressionLanguage-5.0&lt;/code&gt; feature to the list of features in your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;expressionLanguage-5.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;More information about Expression Language 5.0 can be found in:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/expression-language/5.0/jakarta-expression-language-spec-5.0.html#changes-between-5-0-and-4-0&quot;&gt;Changes between the Expression Language 4.0 and Expression Language 5.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/expression-language/5.0/&quot;&gt;Expression Language 5.0 specification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/expressionLanguage.html&quot;&gt;Open Liberty Expression Language feature documentation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;concurrency&quot;&gt;Enhanced parallel and reactive programming models available to applications (Concurrency 3.0)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Jakarta Concurrency specification enhances the set of parallel and reactive programming models available to applications, enabling tasks and completion stage actions to run with the thread context of the submitter.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Concurrency 3.0 includes the following enhancements:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Resource definition annotations that put applications in control of defining the concurrency constraints and thread context types that the application requires&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Context-aware completion stages that are managed by the container&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Asynchronous methods that are backed by context-aware completion stages&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Improvements to Triggers for customizing the scheduling of business logic according to dates and times within one&amp;#8217;s own time zone&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Standardized integration for third-party providers of thread context&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the &lt;code&gt;concurrent-3.0&lt;/code&gt; feature in &lt;code&gt;server.xml&lt;/code&gt;, along with other Jakarta EE 10 beta features that you wish to use in combination with it, for example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;concurrent-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- other features that are used in the examples: --&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;cdi-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jdbc-4.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jndi-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;restfulWS-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can still configure &lt;code&gt;&amp;lt;managedExecutorService&amp;gt;&lt;/code&gt; and other Concurrency resource types in your &lt;code&gt;server.xml&lt;/code&gt; file as you did for previous versions of the feature.  However, In Concurrency 3.0 you can define those resources within application components.
With the CDI feature enabled, methods that return a &lt;code&gt;CompletionStage&lt;/code&gt; or &lt;code&gt;CompletableFuture&lt;/code&gt; can be designated to run asynchronously by annotating them with &lt;code&gt;@Asynchronous&lt;/code&gt;. For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.enterprise.concurrent.Asynchronous&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.inject.Singleton&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.sql&lt;/span&gt;.*;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.concurrent.CompletableFuture&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.concurrent.CompletionException&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.naming.InitialContext&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.naming.NamingException&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.sql.DataSource&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@Singleton&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;AccountsBean&lt;/span&gt; {

    &lt;span class=&quot;annotation&quot;&gt;@Asynchronous&lt;/span&gt;(executor = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:module/concurrent/MyExecutor&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    CompletableFuture&amp;lt;&lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Account&amp;gt;&amp;gt; findOverdue(&lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; minDaysLate) {
        &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Account&amp;gt; overdueAccounts = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;ArrayList&lt;/span&gt;&amp;lt;Account&amp;gt;();
        &lt;span class=&quot;keyword&quot;&gt;try&lt;/span&gt; {
            &lt;span class=&quot;comment&quot;&gt;// Resource reference lookup requires context of the application component,&lt;/span&gt;
            &lt;span class=&quot;predefined-type&quot;&gt;DataSource&lt;/span&gt; db = &lt;span class=&quot;predefined-type&quot;&gt;InitialContext&lt;/span&gt;.doLookup(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:comp/env/jdbc/account-db-ref&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
            ...
            return Asynchronous.Result.complete(overdueAccounts);
        } &lt;span class=&quot;keyword&quot;&gt;catch&lt;/span&gt; (&lt;span class=&quot;exception&quot;&gt;NamingException&lt;/span&gt; | &lt;span class=&quot;exception&quot;&gt;SQLException&lt;/span&gt; x) {
            &lt;span class=&quot;keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; CompletionException(x);
        }
    }

    ...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When the application invokes the asynchronous method, the container intercepts the invocation and hands back a completion stage representing its eventual completion, which is arranged by the &lt;code&gt;ManagedExecutorService&lt;/code&gt;.  For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;    &lt;span class=&quot;annotation&quot;&gt;@GET&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; Response remindAboutOverdueAccounts () {
        ...
        accounts.findOverdue(&lt;span class=&quot;integer&quot;&gt;60&lt;/span&gt;).thenAccept(&lt;span class=&quot;local-variable&quot;&gt;this&lt;/span&gt;::sendReminder);
        ...
    }

    &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; sendReminder(&lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Account&amp;gt; overdue) {
        &lt;span class=&quot;keyword&quot;&gt;try&lt;/span&gt; {
            &lt;span class=&quot;comment&quot;&gt;// Resource reference lookup requires context of the application component,&lt;/span&gt;
            &lt;span class=&quot;predefined-type&quot;&gt;DataSource&lt;/span&gt; db = &lt;span class=&quot;predefined-type&quot;&gt;InitialContext&lt;/span&gt;.doLookup(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:comp/env/jdbc/customer-db-ref&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
            ...
        } &lt;span class=&quot;keyword&quot;&gt;catch&lt;/span&gt; (&lt;span class=&quot;exception&quot;&gt;NamingException&lt;/span&gt; | &lt;span class=&quot;exception&quot;&gt;SQLException&lt;/span&gt; x) {
            &lt;span class=&quot;keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; CompletionException(x);
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Maven coordinates for Concurrency 3.0 are as follows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;jakarta.enterprise.concurrent&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta.enterprise.concurrent-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.0.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more resources regarding Concurrency 3.0, reference the following links:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/concurrency/3.0/jakarta-concurrency-spec-3.0.html&quot;&gt;Concurrency 3.0 specification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/concurrency/3.0/apidocs&quot;&gt;Concurrency 3.0 Javadoc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://repo1.maven.org/maven2/jakarta/enterprise/concurrent/jakarta.enterprise.concurrent-api/3.0.0/jakarta.enterprise.concurrent-api-3.0.0.jar&quot;&gt;Concurrency 3.0 API jar&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;microprofile&quot;&gt;Document APIs where authentication is optional or complex (MicroProfile OpenAPI 3.1)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md&quot;&gt;OpenAPI specification&lt;/a&gt; standardizes a way of documenting REST APIs in a JSON or YAML format. The &lt;a href=&quot;https://microprofile.io/project/eclipse/microprofile-open-api&quot;&gt;MicroProfile OpenAPI specification&lt;/a&gt; helps you generate and serve OpenAPI documentation for your REST applications that are built by using JAX-RS or Jakarta RESTful Web Services. This can be useful for developers to test out the API during development, or for people using the API in production.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile OpenAPI 3.1 is a minor release that includes the following updates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Some Jakarta Bean Validation annotations will now be read and their restrictions will be added to object schemas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Most annotations now include an &lt;code&gt;extension&lt;/code&gt; attribute.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;@SecurityRequirementsSet&lt;/code&gt; can now be used to document operations where authentication is optional or where more than one authentication mechanism is required.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use MicroProfile OpenAPI 3.1, add the &lt;code&gt;mpOpenAPI-3.1&lt;/code&gt; feature to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpOpenAPI-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Next, deploy your rest application and then visit the &lt;code&gt;/openapi&lt;/code&gt; endpoint to view the OpenAPI documentation, or visit &lt;code&gt;/openapi/ui&lt;/code&gt; for a user interface where you can browse through it. You can enhance the documentation by using annotations to add things like textual descriptions to each method. The annotations are available as a Maven dependency:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.microprofile.openapi&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;microprofile-openapi-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.1-RC2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about MicroProfile OpenAPI, see the following links:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-openapi.html&quot;&gt;Open Liberty MicroProfile OpenAPI guide&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/documentation-openapi.html&quot;&gt;Open Liberty OpenAPI documentation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-open-api-3.1-RC2/apidocs/&quot;&gt;MicroProfile OpenAPI 3.1 Javadoc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;password&quot;&gt;Stand-alone user registries no longer forcefully federated (Password Utilities 1.1)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new &lt;code&gt;passwordUtilities-1.1&lt;/code&gt; feature no longer starts the &lt;code&gt;federatedRegistry-1.0&lt;/code&gt; feature or the Jakarta Connectors feature.
Stand-alone user registries are no longer forcefully federated, which sometimes results in slightly different behavior.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable Password Utilities 1.1, add the &lt;code&gt;passwordUtilities-1.1&lt;/code&gt; feature to the list of features in your server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;passwordUtilities-1.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about the Password Utilities, check out the &lt;a href=&quot;/docs/latest/reference/feature/passwordUtilities.html&quot;&gt;feature documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;run&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 18, Java SE 17, Java SE 11, and Java SE 8, however, the Jakarta EE 10 features are only compatible with Java SE 11 and later.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;22.0.0.9-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[22.0.0.9-beta ,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 04 Aug 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/08/04/jakarta-core-profile-22009-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/08/04/jakarta-core-profile-22009-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>security</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>View stack trace separately from messages in logged exceptions and time-based log rollover in Open Liberty 22.0.0.8</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 22.0.0.8 provides a new capability to view stack trace separately from messages in logged exceptions with new fields for Open Liberty JSON logging and for the Logstash Collector feature. This capability enables easier-to-read visualizations in downstream log analysis tools. Also new in this release is time-based log rollover, which enables you to specify a time of day for log files to roll over. This release also includes an important security vulnerability (CVE) fix, as well as many notable bug fixes.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 22.0.0.8:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#stack_trace&quot;&gt;View stack trace separately from logged messages in logging records&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#log_rollover&quot;&gt;Time-based log rollover for Liberty&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jaxws&quot;&gt;jaxws-2.2 updates to CXF 3.4&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#CVEs&quot;&gt;Security Vulnerability (CVE) Fixes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#bugs&quot;&gt;Notable bug fixes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;View the list of fixed bugs in &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A22008+label%3A%22release+bug%22&quot;&gt;22.0.0.8&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Run your apps using 22.0.0.8&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;22.0.0.8&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '[22.0.0.8,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using Docker:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM open-liberty&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://stackoverflow.com/tags/open-liberty&quot;&gt;&lt;img src=&quot;/img/blog/blog_btn_stack.svg&quot; alt=&quot;Ask a question on Stack Overflow&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;stack_trace&quot;&gt;View stack trace separately from logged messages in logging records&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The stack trace is now separated from logged messages in logging records so that log analysis tools can present them more clearly. This makes visualizations of the logs by downstream log analysis tools easier to read when you are identifying any issues encountered by the application. Previously, any logging record originating from a Java Logger object that made use of any of the methods that accept a &lt;code&gt;Throwable&lt;/code&gt; parameter would simply append the stack trace to the existing &lt;code&gt;message&lt;/code&gt; field. Keeping the &lt;code&gt;message&lt;/code&gt; field solely for the logged message and having a separate field for the stack trace and exception type enhances the effectiveness of downstream log analysis tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Java&amp;#8217;s &lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/java/util/logging/package-summary.html&quot;&gt;Logging API&lt;/a&gt; provides methods that allow you to include a &lt;code&gt;Throwable&lt;/code&gt; as a parameter. When the &lt;code&gt;Throwable&lt;/code&gt; object is used, Open Liberty&amp;#8217;s JSON logging provides two new fields, &lt;code&gt;ibm_stackTrace&lt;/code&gt; and &lt;code&gt;ibm_exceptionName&lt;/code&gt;, and the Open Liberty &lt;a href=&quot;/docs/latest/reference/feature/logstashCollector-1.0.html&quot;&gt;Logstash Collector&lt;/a&gt; feature provides two new fields, &lt;code&gt;stackTrace&lt;/code&gt; and &lt;code&gt;exceptionName&lt;/code&gt;. The stack trace fields present only the stack trace of the &lt;code&gt;Throwable&lt;/code&gt; object. The exception name fields present the type of exception of the &lt;code&gt;Throwable&lt;/code&gt; object.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For the example, we will only show the message log record for Open Liberty&amp;#8217;s JSON logging.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Application with the following code snippet:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;predefined-type&quot;&gt;Logger&lt;/span&gt; logger = &lt;span class=&quot;predefined-type&quot;&gt;Logger&lt;/span&gt;.getLogger(MyResource.class.getCanonicalName());
&lt;span class=&quot;exception&quot;&gt;Exception&lt;/span&gt; exception = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;exception&quot;&gt;IllegalArgumentException&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ouch&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
logger.log(&lt;span class=&quot;predefined-type&quot;&gt;Level&lt;/span&gt;.INFO, &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;exception message&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, exception);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previous Open Liberty JSON logging output:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;{
    &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;liberty_message&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
    &lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;
    &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;error&quot;&gt;“&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;  &lt;span class=&quot;error&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;: &lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;:&lt;span class=&quot;integer&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;:&lt;span class=&quot;integer&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;,
    ...
}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;New Open Liberty JSON logging output:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;{
    &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;liberty_message&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
    &lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;
    &lt;span class=&quot;key&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;error&quot;&gt;“&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;,
    &lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;,
    &lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;: &lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;a&lt;/span&gt;:&lt;span class=&quot;integer&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;,
    ...
}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;log_rollover&quot;&gt;Time-based log rollover for Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty provides a few different log files; a &lt;code&gt;message.log&lt;/code&gt; is created by default, and a &lt;code&gt;trace.log&lt;/code&gt; and &lt;code&gt;http_access.log&lt;/code&gt; can be enabled for tracing and &lt;code&gt;NCSA&lt;/code&gt; access logs respectively. Previously, these log files could be rolled over only by either server restart or by limiting the maximum log file size with the &lt;code&gt;maxFileSize&lt;/code&gt; logging attribute. Instead of file size-based log rollover, users may want to roll over their files at periodic times to facilitate their existing log cleaning or archival processes.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now, you can enable time-based periodic rollover of those log files at their own specified time of day by using two new optional logging configuration attributes: &lt;code&gt;rolloverInterval&lt;/code&gt; and &lt;code&gt;rolloverStartTime&lt;/code&gt;. Upon roll over, the file names are appended with a timestamp that corresponds to the time that the log was rolled over.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;rolloverInterval&lt;/code&gt; is the desired time interval between log rollovers. Set the attribute with a positive integer followed by a unit of time, which can be days (d), hours (h), or minutes (m). For example, specify 5 hours as &lt;code&gt;5h&lt;/code&gt;. You can include multiple values in a single entry. For example, &lt;code&gt;1d5h&lt;/code&gt; is equivalent to 1 day and 5 hours.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;rolloverStartTime&lt;/code&gt; is the time of day when logs first roll over and the first rollover interval duration begins. Valid values for this attribute follow a 24-hour ISO-8601 time format of HH:MM, where &lt;code&gt;00:00&lt;/code&gt; represents midnight.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The two configuration attributes are optional. If neither of the attributes are set, then time-based log rollover is not enabled. If only one of the two attributes is set, then time-based log rollover is enabled, and the other attribute is set to its default. The default value for &lt;code&gt;rolloverInterval&lt;/code&gt; is &lt;code&gt;1d&lt;/code&gt;, and the default value for &lt;code&gt;rolloverStartTime&lt;/code&gt; is &lt;code&gt;00:00&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Example &lt;code&gt;server.xml&lt;/code&gt; file configuration for log rollover in the &lt;code&gt;messages.log&lt;/code&gt; and &lt;code&gt;trace.log&lt;/code&gt; files by specifying the new attributes in the &lt;code&gt;logging&lt;/code&gt; element:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
   ...
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;logging&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;rolloverStartTime&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;00:00&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;rolloverInterval&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;1d&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    ...
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Example &lt;code&gt;server.xml&lt;/code&gt; file configuration for log rollover in the &lt;code&gt;http_access.log&lt;/code&gt; file by specifying the new attributes in the &lt;code&gt;httpAccessLogging&lt;/code&gt; element:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
   ...
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;httpAccessLogging&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;rolloverStartTime&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;00:00&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;rolloverInterval&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;1d&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;logFormat&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;%h %u %{t}W &amp;quot;%r&amp;quot; %s %b&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    ...
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Example &lt;code&gt;server.xml&lt;/code&gt; configuration for access logging, using &lt;code&gt;&amp;lt;accessLogging/&amp;gt;&lt;/code&gt; under &lt;code&gt;&amp;lt;httpEndpoint/&amp;gt;&lt;/code&gt;, which handles &lt;code&gt;http_access.log&lt;/code&gt; rollover:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
   ...
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;httpEndpoint&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultHttpEndpoint&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;accessLogging&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;rolloverStartTime&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;00:00&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;rolloverInterval&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;1d&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;logFormat&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;%h %i %u %t &amp;quot;%r&amp;quot; %s %b&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;/httpEndpoint&amp;gt;&lt;/span&gt;
    ...
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Example result of logs, rolled over every minute, with a configuration of &lt;code&gt;rolloverInterval=&quot;1m&quot;&lt;/code&gt; and &lt;code&gt;rolloverStartTime=&quot;00:00&quot;&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-left&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/log_rollover.png&quot; alt=&quot;Example logs&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about this feature, refer to the &lt;a href=&quot;/docs/latest/reference/config/httpAccessLogging.html&quot;&gt;HTTP Access Logging&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/config/logging.html&quot;&gt;Liberty Logging&lt;/a&gt;, and &lt;a href=&quot;/docs/latest/access-logging.html&quot;&gt;Liberty Access Logging&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jaxws&quot;&gt;jaxws-2.2 updates to CXF 3.4&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We&amp;#8217;ve updated &lt;code&gt;jaxws-2.2&lt;/code&gt; to use CXF 3.4, which is a major update coming all way up from CXF 2.6.2. Anyone using &lt;code&gt;jaxws-2.2&lt;/code&gt; will automatically get the update with 22.0.0.8, but don&amp;#8217;t worry, Liberty&amp;#8217;s &lt;a href=&quot;/docs/latest/zero-migration-architecture.html&quot;&gt;zero migration&lt;/a&gt; means we&amp;#8217;ve taken great care to prevent any behavior changes.
The main reason for us to make this change is to make &lt;code&gt;jaxws-2.2&lt;/code&gt; easier to maintain and keep up-to-date going forward.  We expect this to result in quicker turn around time on pulling in the latest fixes from CXF and it&amp;#8217;s related dependencies going forward and a slightly smaller runtime footprint as well!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;CVEs&quot;&gt;Security vulnerability (CVE) fixes in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;CVE&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;CVSS Score&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Vulnerability Assessment&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Versions Affected&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22476&quot;&gt;CVE-2022-22476&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;5&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Identity spoofing&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;17.0.0.3 - 22.0.0.7&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Affects the &lt;a href=&quot;/docs/latest/reference/feature/appSecurity-1.0.html&quot;&gt;App Security 1.0&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/appSecurity-2.0.html&quot;&gt;App Security 2.0&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/appSecurity-3.0.html&quot;&gt;App Security 3.0&lt;/a&gt; and &lt;a href=&quot;/docs/latest/reference/feature/appSecurity-4.0.html&quot;&gt;App Security 4.0&lt;/a&gt; features&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For a list of past security vulnerability fixes, reference the &lt;a href=&quot;/docs/latest/security-vulnerabilities.html&quot;&gt;Security vulnerability (CVE) list&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;bugs&quot;&gt;Notable bugs fixed in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We’ve spent some time fixing bugs. The following sections describe just some of the issues resolved in this release. If you’re interested, here’s the  &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A22008+label%3A%22release+bug%22&quot;&gt;full list of bugs fixed in 22.0.0.8&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/21526&quot;&gt;UI generated by openapi-3.1 feature doesn&amp;#8217;t show the link specific endpoints&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;An issue arose that when you clicked an endpoint in the UI that is generated by the &lt;code&gt;openapi-3.1 feature&lt;/code&gt;, the clicked endpoint is expanded but the URL of the browser is not changed. As the result, you could not pass a link to a specific endpoint to others for reference. The URL of the browser is expected to change to show the link to the clicked endpoint.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has since been reviewed and subsequently the affected features list have been updated once the UI is shared with the &lt;code&gt;mpOpenApi&lt;/code&gt; features. This did previously work for openapi-3.1 but had been broken by &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/pull/19535&quot;&gt;#19535&lt;/a&gt; in 22.0.0.2. This issue has now been resolved.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/21214&quot;&gt;Server start fails when directory has spaces&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;On Windows operating system, when the server working directory is specified using the &lt;code&gt;SERVER_WORKING_DIR&lt;/code&gt; environment variable and a space is present in the name of the server working directory, an attempt to start the server using the server script will hang and the server will not start.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue was due to missing quotes in the server script and has since been resolved. You can find out more information about this fix of adding quotes to server working directory test &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/pull/21234&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/21601&quot;&gt;Port MYFACES-4432 to JSF 2.3 and Faces 3.0 (Resolve request object in facelets)&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The issue occurred when using the &lt;code&gt;&quot;@FacesConfig&quot;&lt;/code&gt; annotation in a JSF 2.3 or Faces 3.0 application, the &lt;code&gt;#{request}&lt;/code&gt; object fails to resolve. An empty string is returned instead.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has now been closed as completed in &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/pull/21599&quot;&gt;#21599&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/21615&quot;&gt;EJB persistent timers that were deferred during app start do not run when app finishes starting&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;EJB Persistent Timers that get deferred due to the application not being started yet do not run after the application finishes starting.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Steps to reproduce are to have a large, slowly-starting application with a number of persistent EJB timers around from a previous run. Start the server and if timing is right, the timers will never start running.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The expected behavior is for EJB persistent timers that were deferred due to an unavailable application should run after the application becomes available again.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been resolved by running deferred tasks after the app starts in &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/pull/21616&quot;&gt;#21616&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/21664&quot;&gt;featureUpdate downloads fail in Windows, due to #20945&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The issue is caused by the inability to connect to Maven repo on Windows due to changes made in #20945. There is a need to append a forward slash (&lt;code&gt;/&lt;/code&gt;) instead of &lt;code&gt;File.separator&lt;/code&gt; for urls.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Running &lt;code&gt;featureUtility.exe installFeature&lt;/code&gt; or`featureUtility.exe installServerFeature` causes the following:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock no_copy&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;The remote repository &amp;quot;https://repo.maven.apache.org/maven2/\&amp;quot; is missing the following artifacts: [json-1.0-22.0.0.7.pom, json-1.0-22.0.0.7.esa]
[7/27/22, 11:31:52:318 PDT] Downloading required features ...
[7/27/22, 11:31:52:334 PDT] Starting installation ...
[7/27/22, 11:31:52:365 PDT] Successfully completed cleaning up temporary files.
&amp;lt;---------------------&amp;gt; Infinity%
java.lang.NullPointerException
at com.ibm.ws.install.featureUtility.FeatureUtility.installFeatures(FeatureUtility.java:483)
at com.ibm.ws.install.featureUtility.cli.InstallFeatureAction.install(InstallFeatureAction.java:241)
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)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has since been resolved by &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/pull/21667&quot;&gt;#21667&lt;/a&gt; which reverts the &lt;code&gt;File.separator&lt;/code&gt; to a forward slash and the features now install successfully.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-open-liberty-22-0-0-8-now&quot;&gt;Get Open Liberty 22.0.0.8 now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Available through &lt;a href=&quot;#run&quot;&gt;Maven, Gradle, Docker, and as a downloadable archive&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 02 Aug 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/08/02/separate-stack-trace-22008.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/08/02/separate-stack-trace-22008
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>security</category>
        
        <category>jakarta-ee</category>
        
        <category>monitoring</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Use Jakarta EE 9.1 dependencies with MicroProfile GraphQL 2.0 in Open Liberty 22.0.0.6</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 22.0.0.6 offers MicroProfile GraphQL 2.0, which incorporates Jakarta EE 9.1 dependencies, allowing the use of updated Jakarta components such as CDI 3.0, Jakarta REST 3.0, JSON-B 2.0 and more. An enhancement to JPA 2.1 provides improved Db2 query performance by altering parameter binding behavior. This release also contains a number of significant bug fixes as well as important security vulnerability (CVE) fixes.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 22.0.0.6:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#graphql&quot;&gt;Use Jakarta EE 9.1 dependencies with MicroProfile GraphQL 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#db2&quot;&gt;Improved Db2 query performance&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#cve&quot;&gt;Security Vulnerability (CVE) Fixes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#bugs&quot;&gt;Notable bug fixes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;View the list of fixed bugs in &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A22006+label%3A%22release+bug%22&quot;&gt;22.0.0.6&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Run your apps using 22.0.0.6&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;22.0.0.6&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '[22.0.0.6,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using Docker:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM open-liberty&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://stackoverflow.com/tags/open-liberty&quot;&gt;&lt;img src=&quot;/img/blog/blog_btn_stack.svg&quot; alt=&quot;Ask a question on Stack Overflow&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;graphql&quot;&gt;Use Jakarta EE 9.1 dependencies with MicroProfile GraphQL 2.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://graphql.org/&quot;&gt;GraphQL&lt;/a&gt; is an open source data query and manipulation language for APIs and a runtime that fulfills queries with existing data. You can use a GraphQL service to obtain data from multiple sources (such as APIs, databases, and other services) by making only a single request. The GraphQL service can then collate this data into a single object, which simplifies the data retrieval. This results in faster application load times and lower data transfer costs. GraphQL enables clients to better customize requests to the server. Many enterprise companies use GraphQL, including Atlassian, Coursera, Facebook, GitHub, PayPal, and Twitter.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can implement GraphQL support for applications that run on Open Liberty by enabling the &lt;a href=&quot;/docs/latest/reference/feature/mpGraphQL.html&quot;&gt;MicroProfile GraphQL feature&lt;/a&gt;. When this feature is enabled, you can define GraphQL endpoints by using annotations, similar to how you create RESTful Web Services (formerly JAX-RS) resources.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile GraphQL 2.0 incorporates Jakarta EE 9.1 dependencies. If you have been &lt;a href=&quot;/blog/2020/06/10/microprofile-graphql-open-liberty.html&quot;&gt;using MicroProfile GraphQL 1.0 in your application&lt;/a&gt; running on Open Liberty, you can continue to do so but with the updated Jakarta features such as &lt;a href=&quot;/docs/latest/reference/feature/cdi-3.0.html&quot;&gt;CDI 3.0&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/restfulWS-3.0.html&quot;&gt;restfulWS 3.0&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/jsonb-2.0.html&quot;&gt;JSON-B 2.0&lt;/a&gt;, etc. Functionally, version 2.0 behaves the same as 1.0 because it uses the same version of the underlying implementation (&lt;a href=&quot;https://github.com/smallrye/smallrye-graphql&quot;&gt;SmallRye GraphQL&lt;/a&gt;).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;d like to learn more about MicroProfile GraphQL:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Try it out with our &lt;a href=&quot;/guides/microprofile-graphql.html&quot;&gt;Optimizing REST queries for microservices with GraphQL&lt;/a&gt; guide (available in the cloud or as downloads to your laptop).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;See our &lt;a href=&quot;/docs/latest/microprofile-graphql.html&quot;&gt;Build GraphQL applications with MicroProfile GraphQL&lt;/a&gt; docs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;See our blog post on &lt;a href=&quot;/blog/2020/08/28/graphql-apis-open-liberty-20009.html&quot;&gt;how to use the GraphiQL UI and third-party Client APIs&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the MicroProfile GraphQL 2.0 feature, add it to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpGraphQL-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;db2&quot;&gt;Improved Db2 query performance&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This new JPA enhancement improves EclipseLink&amp;#8217;s Db2 and Db2 z/OS support by enabling parameter binding for JPA specification-defined functions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For Db2 and Db2 for z/OS, EclipseLink&amp;#8217;s JPQL parameter binding is disabled when function expressions (SQRT, ABS, SUBSTR, COALESCE, etc.) exist within a JPQL query. This update allows EclipseLink to bind JPQL parameters for function expressions that accept untyped parameter markers on Db2 and Db2 z/OS.
This update also allows EclipseLink to enable and disable parameter binding per expression within a query, rather than for the entirety of the query.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For Db2 and Db2 for z/OS, EclipseLink does not bind JPQL literal values as SQL parameter values. The &quot;shouldBindLiterals=true&quot; EclipseLink-specific persistence property  allows EclipseLink users to bind all literal values as parameter values. However, this property is currently ignored by EclipseLink for Db2 and Db2 for z/OS.
This enhancement allows you to use the &lt;code&gt;&quot;shouldBindLiterals=true&quot;&lt;/code&gt; EclipseLink persistence property to bind literals values as parameters on Db2 and Db2 z/OS; assuming this binding is legal according to the database.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;enabling-parameter-binding&quot;&gt;Enabling parameter binding&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To start using the new function, add the new &lt;code&gt;eclipselink.jdbc.allow-partial-bind-parameters&lt;/code&gt; persistence property to your &lt;code&gt;persistence.xml&lt;/code&gt; properties:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;persistence&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;...&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;persistence-unit&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;...&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;eclipselink.jdbc.allow-partial-bind-parameters&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;
     &lt;span class=&quot;tag&quot;&gt;&amp;lt;/persistence-unit&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/persistence&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Alternatively, in Liberty 22.0.0.2 and later, you can add the new &lt;code&gt;&amp;lt;defaultProperties&amp;gt;&lt;/code&gt; configuration to the &lt;code&gt;&amp;lt;jpa&amp;gt;&lt;/code&gt; configuration in your &lt;code&gt;server.xml&lt;/code&gt; file. This applies the &lt;code&gt;eclipselink.jdbc.allow-partial-bind-parameters&lt;/code&gt; persistence property  to all persistence units within applications that run on this server.  For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jpa-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;
    ...
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;jpa&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;defaultProperties&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;eclipselink.jdbc.allow-partial-bind-parameters&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/defaultProperties&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/jpa&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;using-parameter-binding&quot;&gt;Using parameter binding&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the application, you can take advantage of this feature with JPA JPQL queries and CriteriaBuilder API queries.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;    &lt;span class=&quot;predefined-type&quot;&gt;Query&lt;/span&gt; query = em.createQuery(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SELECT g FROM Guest g WHERE LENGTH(?1) &amp;gt; 2 AND g.lastName = TRIM(?1)&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
    query.setParameter(&lt;span class=&quot;integer&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;By default, EclipseLink generates the following SQL prepared statement on Db2 and Db2 z/OS:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;    &lt;span class=&quot;class&quot;&gt;SELECT&lt;/span&gt; FIRSTNAME, LASTNAME &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; GUEST &lt;span class=&quot;keyword&quot;&gt;WHERE&lt;/span&gt; ((LENGTH(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;) &amp;gt; &lt;span class=&quot;integer&quot;&gt;2&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;AND&lt;/span&gt; (LASTNAME = TRIM(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the new property &lt;code&gt;eclipselink.jdbc.allow-partial-bind-parameters = &quot;true&quot;&lt;/code&gt;, EclipseLink generates the following SQL prepared statement on Db2:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;    &lt;span class=&quot;class&quot;&gt;SELECT&lt;/span&gt; FIRSTNAME, LASTNAME &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; GUEST &lt;span class=&quot;keyword&quot;&gt;WHERE&lt;/span&gt; ((LENGTH(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;) &amp;gt; &lt;span class=&quot;integer&quot;&gt;2&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;AND&lt;/span&gt; (LASTNAME = TRIM(&lt;span class=&quot;error&quot;&gt;?&lt;/span&gt;)))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;and DB2 z/OS:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;    &lt;span class=&quot;class&quot;&gt;SELECT&lt;/span&gt; FIRSTNAME, LASTNAME &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; GUEST &lt;span class=&quot;keyword&quot;&gt;WHERE&lt;/span&gt; ((LENGTH(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;) &amp;gt; &lt;span class=&quot;integer&quot;&gt;2&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;AND&lt;/span&gt; (LASTNAME = TRIM(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;admonitionblock note&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;icon&quot;&gt;
&lt;i class=&quot;fa icon-note&quot; title=&quot;Note&quot;&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class=&quot;content&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Even though the property is enabled, no change is apparent for Db2 z/OS, because  using an untyped parameter marker in the LENGTH or TRIM functions is illegal on Db2 z/OS. However, many other functions exist where it is legal to use parameter markers on Db2 z/OS. This example was chosen to show the differences between the Db2 and Db2 z/OS platforms. When the property is enabled, EclipseLink knows what is legal on what platform.&lt;/p&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;    &lt;span class=&quot;predefined-type&quot;&gt;Query&lt;/span&gt; query = em.createQuery(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SELECT g FROM Guest g WHERE LENGTH(?1) &amp;gt; 2 AND g.lastName = TRIM(?1)&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
    query.setParameter(&lt;span class=&quot;integer&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;By default, EclipseLink generates the following SQL prepared statement on Db2 and Db2 z/OS:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;    &lt;span class=&quot;class&quot;&gt;SELECT&lt;/span&gt; FIRSTNAME, LASTNAME &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; GUEST &lt;span class=&quot;keyword&quot;&gt;WHERE&lt;/span&gt; ((LENGTH(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;) &amp;gt; &lt;span class=&quot;integer&quot;&gt;2&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;AND&lt;/span&gt; (LASTNAME = TRIM(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the new property &lt;code&gt;eclipselink.jdbc.allow-partial-bind-parameters&lt;/code&gt; = &lt;code&gt;&quot;true&quot;&lt;/code&gt;, EclipseLink generates the following SQL prepared statement on Db2:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;    &lt;span class=&quot;class&quot;&gt;SELECT&lt;/span&gt; FIRSTNAME, LASTNAME &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; GUEST &lt;span class=&quot;keyword&quot;&gt;WHERE&lt;/span&gt; ((LENGTH(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;) &amp;gt; &lt;span class=&quot;integer&quot;&gt;2&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;AND&lt;/span&gt; (LASTNAME = TRIM(&lt;span class=&quot;error&quot;&gt;?&lt;/span&gt;)))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;and Db2 z/OS:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;    &lt;span class=&quot;class&quot;&gt;SELECT&lt;/span&gt; FIRSTNAME, LASTNAME &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; GUEST &lt;span class=&quot;keyword&quot;&gt;WHERE&lt;/span&gt; ((LENGTH(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;) &amp;gt; &lt;span class=&quot;integer&quot;&gt;2&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;AND&lt;/span&gt; (LASTNAME = TRIM(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;However, with the addition of an existing EclipseLink property&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;eclipselink.target-database-properties&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;shouldBindLiterals=true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;EclipseLink generates the following SQL prepared statement on Db2:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;    &lt;span class=&quot;class&quot;&gt;SELECT&lt;/span&gt; FIRSTNAME, LASTNAME &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; GUEST &lt;span class=&quot;keyword&quot;&gt;WHERE&lt;/span&gt; ((LENGTH(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;) &amp;gt; &lt;span class=&quot;error&quot;&gt;?&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;AND&lt;/span&gt; (LASTNAME = TRIM(&lt;span class=&quot;error&quot;&gt;?&lt;/span&gt;)))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;and Db2 z/OS:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;    &lt;span class=&quot;class&quot;&gt;SELECT&lt;/span&gt; FIRSTNAME, LASTNAME &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; GUEST &lt;span class=&quot;keyword&quot;&gt;WHERE&lt;/span&gt; ((LENGTH(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;) &amp;gt; &lt;span class=&quot;error&quot;&gt;?&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;AND&lt;/span&gt; (LASTNAME = TRIM(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Crusher&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Notice that with the addition of the &lt;code&gt;shouldBindLiterals&lt;/code&gt; property, the literal value &lt;code&gt;2&lt;/code&gt; is bound as a parameter in the SQL string. Without the feature enabled, EclipseLink cannot enable binding for some parts of the query and instead only enables or disables for the whole query. As we can see in this example, EclipseLink can enable some parameter binding while also respecting what is legal or illegal on Db2 and Db2 z/OS.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;cve&quot;&gt;Security vulnerability (CVE) fixes in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;col style=&quot;width: 20%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;CVE&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;CVSS Score&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Vulnerability Assessment&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Versions Affected&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22475&quot;&gt;CVE-2022-22475&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;5&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Identity spoofing&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;17.0.0.3 - 22.0.0.5&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Affects the &lt;a href=&quot;/docs/latest/reference/feature/appSecurity-1.0.html&quot;&gt;App Security 1.0&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/appSecurity-2.0.html&quot;&gt;App Security 2.0&lt;/a&gt;, &lt;a href=&quot;/docs/latest/reference/feature/appSecurity-3.0.html&quot;&gt;App Security 3.0&lt;/a&gt; and &lt;a href=&quot;/docs/latest/reference/feature/appSecurity-4.0.html&quot;&gt;App Security 4.0&lt;/a&gt; features&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;a href=&quot;http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22393&quot;&gt;CVE-2022-22393&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;3.1&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Information disclosure&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;17.0.0.3 - 22.0.0.5&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Affects the &lt;a href=&quot;/docs/latest/reference/feature/adminCenter-1.0.html&quot;&gt;Admin Center 1.0&lt;/a&gt; feature&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For a list of past security vulnerability fixes, reference the &lt;a href=&quot;/docs/latest/security-vulnerabilities.html&quot;&gt;Security vulnerability (CVE) list&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;bugs&quot;&gt;Notable bugs fixed in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We’ve spent some time fixing bugs. The following sections describe just some of the issues resolved in this release. If you’re interested, here’s the  &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A22006+label%3A%22release+bug%22&quot;&gt;full list of bugs fixed in 22.0.0.6&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/21050&quot;&gt;Liberty OIDC error is being returned with incorrect characters&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, Liberty&amp;#8217;s &lt;code&gt;OIDC&lt;/code&gt; error was returned with incorrect characters. When invoking the OP&amp;#8217;s &lt;code&gt;/authorize&lt;/code&gt; endpoint with missing or incorrect parameters in traditional Chinese, the returned error message had a number of &lt;code&gt;????&lt;/code&gt; instead of Chinese characters. The same happened for other non-ascii languages.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The error page showed:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;&amp;quot;Accept-Language: zh-TW&amp;quot;
HTTP/1.1 200 OK
X-Powered-By: Servlet/3.0
Content-Language: en-DE
Transfer-Encoding: chunked
Date: Fri, 06 May 2022 08:42:36 GMT

CWOAU0033E: ????????????client_id&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has now been fixed and the page should contain the properly translated error message instead of &lt;code&gt;????????????&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/21079&quot;&gt;Refresh token is not cleaned up when a JWT access_token had been issued&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;refresh_token&lt;/code&gt; cleanup for an OIDC &lt;code&gt;end_session&lt;/code&gt; instance  is different depending on the type of access_token issued.
The Liberty OP can issue opaque or JWT &lt;code&gt;access_tokens&lt;/code&gt;. When running &lt;code&gt;end_session&lt;/code&gt;, the &lt;code&gt;refresh_token&lt;/code&gt; is removed from the cache when creating opaque &lt;code&gt;access_tokens&lt;/code&gt;, however when creating JWT &lt;code&gt;access_tokens&lt;/code&gt;, the &lt;code&gt;refresh_token&lt;/code&gt; was NOT removed. This issue has been resolved and running &lt;code&gt;end_session&lt;/code&gt; on providers that generate JWT access_tokens should invalidate the &lt;code&gt;refresh_token&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/21097&quot;&gt;Custom claims not passed to the back end&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When using MicroProfile Starter &lt;code&gt;start.microprofile.io&lt;/code&gt; to generate &lt;code&gt;service-a&lt;/code&gt; and &lt;code&gt;service-b&lt;/code&gt; running on Open Liberty, the invocation to the service &lt;code&gt;b&lt;/code&gt; no longer sent out the custom claim on invoking the JWT backend via &lt;code&gt;localhost:9080&lt;/code&gt;. This defect was caused by the changes which exposed a hidden problem in the &lt;code&gt;Claims.putAll&lt;/code&gt; method when there were claims with a null value and has since been fixed.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/21043&quot;&gt;Bump netty dependencies to 4.1.77.Final&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Netty components in Open Liberty were of the version &lt;code&gt;4.1.75.Final&lt;/code&gt; released in March 2022. The latest version &lt;code&gt;4.1.77.Final&lt;/code&gt; contains various bug fixes and improvements over the current version. These components have been updated to ensure that Open Liberty stays up to date with upstream fixes and improvements.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/20908&quot;&gt;Default session meta cache name failed with RH DataGrid&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When Liberty created &lt;code&gt;infinispan&lt;/code&gt; caches name with percent encoding, Datagrid Administration GUI Console failed to retrieve the cache name. An example would be:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;com.ibm.ws.session.meta.default_host%2FGestionPedidos&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Where &lt;code&gt;GestionPedidos&lt;/code&gt; is the application web context, &lt;code&gt;%2F&lt;/code&gt; is the encoded character for &lt;code&gt;/&lt;/code&gt;. RH DataGrid failed to retrieve the above cache name.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-open-liberty-22-0-0-6-now&quot;&gt;Get Open Liberty 22.0.0.6 now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Available through &lt;a href=&quot;#run&quot;&gt;Maven, Gradle, Docker, and as a downloadable archive&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 07 Jun 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/06/07/microprofile-graphql-2-22006.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/06/07/microprofile-graphql-2-22006
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>security</category>
        
        <category>jakarta-ee</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Introducing a hands-on technical deep dive on Liberty</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We are excited to announce the release of our newest tutorial, A Technical Deep Dive on Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A Technical Deep Dive on Liberty is an end-to-end tutorial that walks you through how to develop and deploy cloud-native Java applications in Jakarta EE and MicroProfile. The tutorial is aimed at Java developers, from Liberty novices to those more experienced with writing applications to run on Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In A Technical Deep Dive on Liberty, you will learn how to:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Build a RESTful microservice on Liberty with Jakarta EE and MicroProfile.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Easily document your REST API for developers to consume your microservice.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Externalize your configuration to make your application portable and easier to update.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Persist data to a database.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Secure your application using JSON Web Tokens (JWT) so that only authenticated and authorized applications can request information from your microservice.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add health checks to easily report the statuses of your microservice (for orchestration decision).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provide metrics to monitor activity and performance of your application.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build a container image for your Java microservice.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy the container image to Kubernetes using the Open Liberty Operator.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Test your applications easily with containers (for true-to-production testing).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you don&amp;#8217;t want to worry about local setup and prerequisites, try &lt;a href=&quot;https://ibm.biz/LibertyDeepDive&quot;&gt;A Technical Deep Dive on Liberty in our cloud-hosted environment&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Alternatively, if you prefer, you can complete &lt;a href=&quot;/guides/liberty-deep-dive.html&quot;&gt;A Technical Deep Dive on Liberty on your own laptop&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/deepdive.png&quot; alt=&quot;screen capture of the liberty deep dive UI&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;we-welcome-your-feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Tell us about your experience with A Technical Deep Dive on Liberty by responding to the questions in the &lt;strong&gt;Where to next?&lt;/strong&gt; section at the end of the tutorial. We’d love to hear from you!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 03 Jun 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/06/03/liberty-deep-dive.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/06/03/liberty-deep-dive
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>security</category>
        
        <category>docker</category>
        
        <category>metrics</category>
        
        <category>jakarta-ee</category>
        
        <category>kubernetes</category>
        
        <category>test</category>
        
        <category>monitoring</category>
        
        <category>devops</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Learn MicroProfile 5.0 and Jakarta EE 9.1 from our newly enhanced cloud-hosted guides</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To learn how to develop cloud-native Java applications and microservices on Open Liberty with MicroProfile 5.0 and Jakarta EE 9.1, you can try out our updated guides. You can run our guides in a hosted environment with enhanced interfaces, without having to worry about local setup and prerequisites. We recently updated 31 of our guides for compatibility with MicroProfile 5 and Jakarta EE 9. The Maven project &lt;code&gt;pom.xml&lt;/code&gt; and Liberty configuration &lt;code&gt;server.xml&lt;/code&gt; files in these guides are updated to use new Jakarta EE 9.1 and MicroProfile 5.0 APIs and features. Also, all Java classes now use the &lt;code&gt;jakarta&lt;/code&gt; package namespace instead of &lt;code&gt;javax&lt;/code&gt;, as shown in the following example.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/blog-2168-SNL-java-class.png&quot; alt=&quot;Java class sample&quot; width=&quot;40%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To learn more about what changed in Jakarta EE 9.1, see the &lt;a href=&quot;https://openliberty.io/docs/latest/jakarta-ee9-feature-updates.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Jakarta EE 9.1 feature updates&lt;/a&gt; documentation. To learn about the differences between MicroProfile 5.0 and 4.1, see the &lt;a href=&quot;https://openliberty.io/docs/latest/mp-41-50-diff.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Differences between MicroProfile 5.0 and 4.1&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;what-are-the-new-enhancements-in-the-cloud-hosted-guides&quot;&gt;What are the new enhancements in the cloud-hosted guides?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The cloud-hosted guides are enhanced with a new look and updated features. Whether or not you&amp;#8217;ve tried them yet, now is the time to experience how easily you can learn to build applications with MicroProfile and Jakarta EE APIs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can access any of our updated MircoProfile or Jakarta EE cloud-hosted guides by clicking one of the links at the end of this post, or choose from &lt;a href=&quot;/guides/&quot;&gt;our full collection of guides&lt;/a&gt;. After you choose a guide, click the &lt;strong&gt;Run in cloud&lt;/strong&gt; button, as shown in the following image:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/blog-2168-guide.png&quot; alt=&quot;Guide sample&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We&amp;#8217;ve enhanced these guides to make them easier to navigate and to simplify running commands and managing files.
The following screenshot shows the new look for our cloud-hosted guides. You can navigate to different sections of the guide by clicking the &lt;span class=&quot;image&quot;&gt;&lt;img src=&quot;/img/blog/blog-2168-SNL-toc-icon.png&quot; alt=&quot;table of contents icon&quot;&gt;&lt;/span&gt; &lt;strong&gt;Table of Contents&lt;/strong&gt; menu:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/blog-2168-SNL-TOC.png&quot; alt=&quot;Guide sample&quot; width=&quot;80%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can also navigate through the guide by clicking the blue progress bar after the &lt;strong&gt;Table of Contents&lt;/strong&gt; menu:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/blog-2168-SNL-progress-bar.png&quot; alt=&quot;Guide sample&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Instead of copying and pasting the commands in terminal, you can now run the commands on an active terminal by simply clicking on the &lt;strong&gt;Execute&lt;/strong&gt; &lt;code&gt;&amp;gt;_&lt;/code&gt; icon in the code window.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/blog-2168-SNL-exec.png&quot; alt=&quot;Guide sample&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can now directly open a file by clicking the &lt;strong&gt;Open &amp;#8230;&amp;#8203; in IDE&lt;/strong&gt; button, instead of browsing to it from the &lt;strong&gt;File&lt;/strong&gt; &amp;gt; &lt;strong&gt;Open&lt;/strong&gt; menu.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/blog-2168-SNL-open-file.png&quot; alt=&quot;Guide sample&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Also, you can launch an application simply by clicking the &lt;strong&gt;Visit&amp;#8230;&amp;#8203;&lt;/strong&gt; button. The application URL opens on a new browser tab.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/blog-2168-SNL-launch.png&quot; alt=&quot;Guide sample&quot; width=&quot;50%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;which-guides-are-updated&quot;&gt;Which guides are updated?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following 31 guides are updated to use MicroProfile 5.0 and Jakarta EE 9.1 features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/jpa-intro.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Accessing and persisting data in microservices using Java Persistence API (JPA)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-health.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Adding health reports to microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/social-media-login.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Authenticating users through social media providers&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/maven-intro.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Building a web application with Maven&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-fallback.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Building fault-tolerant microservices with the @Fallback annotation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/kubernetes-microprofile-health.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Checking the health of microservices on Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-config.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Configuring microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/kubernetes-microprofile-config.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Configuring microservices running in Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/rest-client-java.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Consuming a RESTful web service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/rest-client-angular.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Consuming a RESTful web service with Angular&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-rest-client.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Consuming RESTful services with template interfaces&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/containerize.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Containerizing microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/rest-hateoas.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Creating a hypermedia-driven RESTful web service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/maven-multimodules.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Creating a multi-module application&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/rest-intro.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Creating a RESTful web service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/kubernetes-intro.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Deploying microservices to Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-istio-retry-fallback.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Developing fault-tolerant microservices with Istio Retry and MicroProfile Fallback&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-openapi.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Documenting RESTful APIs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/cors.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Enabling Cross-Origin Resource Sharing (CORS)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-opentracing-jaeger.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Enabling distributed tracing in microservices with Jaeger&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/getting-started.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Getting started with Open Liberty&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/cdi-intro.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Injecting dependencies into microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/istio-intro.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Managing microservice traffic using Istio&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/mongodb-intro.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Persisting data with MongoDB&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-metrics.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Providing metrics from a microservice&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/security-intro.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Securing a web application&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-jwt.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Securing microservices with JSON Web Tokens&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/contract-testing.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Testing microservices with consumer-driven contracts&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/arquillian-managed.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Testing microservices with the Arquillian managed container&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/docker.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Using Docker containers to develop microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/bean-validation.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Validating constraints with microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;we-welcome-your-feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Tell us about your experience with our guides by responding to the questions in the &lt;strong&gt;Summary&lt;/strong&gt; section at the end of each guide. We&amp;#8217;d love to hear from you!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 12 Apr 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/04/12/guides-updated-mp5-jakartaee9.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/04/12/guides-updated-mp5-jakartaee9
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>MicroProfile, Jakarta EE, and Open Liberty at DevNexus 2022</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://devnexus.org/&quot;&gt;DevNexus&lt;/a&gt;, the longest-running and largest Java Conference in the USA will be happening this year in Atlanta, GA, from April 12-14. As in-person conferences make a comeback in 2022, this will be a great opportunity to re-connect with the Java community.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;And of course, members of the Open Liberty team will be on-site hosting multiple sessions and running demonstrations and labs in the IBM booth. If you&amp;#8217;re also going to be there, deciding which of the great talks to see can be a bit of a challenge. So we&amp;#8217;ve put together a helpful summary of the sessions on &lt;a href=&quot;https://microprofile.io/&quot;&gt;MicroProfile&lt;/a&gt;, &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Jakarta EE&lt;/a&gt; and &lt;a href=&quot;https://openliberty.io/about/&quot;&gt;Open Liberty&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_dark&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/devnexus-2022-conf-logo.png&quot; alt=&quot;DevNexus Conference Logo 2022&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;talks-at-devnexus-2022&quot;&gt;Talks at DevNexus 2022&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A selection of Jakarta EE, MicroProfile, and Open Liberty talks on Wednesday and Thursday:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;dlist&quot;&gt;
&lt;dl&gt;
&lt;dt class=&quot;hdlist1&quot;&gt;Wednesday 13th&lt;/dt&gt;
&lt;dd&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://devnexus.org/presentations/6894?iframe=no&quot;&gt;Exploring Stateful Microservices in the Cloud Native World&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty&amp;#8217;s &lt;a href=&quot;https://twitter.com/gracejansen27&quot;&gt;Grace Jansen&lt;/a&gt; and Chicago JUG&amp;#8217;s &lt;a href=&quot;https://twitter.com/mgrygles&quot;&gt;Mary Grygleski&lt;/a&gt; discuss how to handle persisting data with containerized microservices in a Cloud Native world.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://devnexus.org/presentations/6537?iframe=no&quot;&gt;Mother Nature vs Java - the security face off&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Java Evangelist &lt;a href=&quot;https://twitter.com/spoole167&quot;&gt;Steve Poole&lt;/a&gt; and Open Liberty&amp;#8217;s &lt;a href=&quot;https://twitter.com/gracejansen27&quot;&gt;Grace Jansen&lt;/a&gt; explore where software and biology overlap when it comes to security, and lessons we can learn from nature to improve our own application security.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://devnexus.org/presentations/6825?iframe=no&quot;&gt;Simple tweaks to get the most out of your JVM&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty&amp;#8217;s &lt;a href=&quot;https://twitter.com/Jamie_Lee_C&quot;&gt;Jamie Coleman&lt;/a&gt; will go through all the different JVM options and give you some easy and simple advice on how to get the most out of your JVM to save not only money but also energy on the cloud.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://devnexus.org/presentations/6646?iframe=no&quot;&gt;Landscape of MicroProfile and Jakarta EE Tools&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty&amp;#8217;s &lt;a href=&quot;https://twitter.com/yeekangc&quot;&gt;YK Chang&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/KathrynKodama&quot;&gt;Kathryn Kodama&lt;/a&gt; will examine the tools that are available to make your life easier as you code MicroProfile and Jakarta EE-based applications. These tools help developers throughout the development lifecycle, from creating a new application, working with compatible runtimes and your favourite editor, to testing your application.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://devnexus.org/presentations/6730?iframe=no&quot;&gt;Using byte-code analysis to modernize your Java EE applications&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty&amp;#8217;s &lt;a href=&quot;https://twitter.com/CTHigh&quot;&gt;Cindy High&lt;/a&gt; will demonstrate how to analyze your Java EE applications using a simple command-line tool that will provide reports on your application structure and detailed analysis of potential issues when moving to a new Java SE or EE level or to cloud environments.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/dd&gt;
&lt;dt class=&quot;hdlist1&quot;&gt;Thursday 14th&lt;/dt&gt;
&lt;dd&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://devnexus.org/presentations/6794?iframe=no&quot;&gt;MicroProfile - The Current and The Future&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Java Champion &lt;a href=&quot;https://twitter.com/emilyfhjiang&quot;&gt;Emily Jiang&lt;/a&gt; is going to bring you up to date with the latest MicroProfile release and then briefly discuss the future road map for MicroProfile. Come along to listen in or ask questions.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;join-us&quot;&gt;Join us&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;All conference attendees are invited to join us at the IBM booth where you can check out our new Space Rover demo, challenge yourself with one or more Quick Labs, and get some great SWAG. IBMers will also be available at the Eclipse Foundation booth.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We&amp;#8217;d love to see you at these key activities!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;dlist&quot;&gt;
&lt;dl&gt;
&lt;dt class=&quot;hdlist1&quot;&gt;Jakarta EE Reception - Tuesday, April 12 @ 17:00 to 19:30 (room #412)&lt;/dt&gt;
&lt;dd&gt;
&lt;p&gt;Join the Jakarta EE community for some great discussions on the ever-changing landscape in enterprise Java and the future of cloud-native innovation that Jakarta EE represents, while enjoying drinks and snacks on IBM.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt class=&quot;hdlist1&quot;&gt;Book Signing - Wednesday, April 13 @ 15:20 (IBM Booth)&lt;/dt&gt;
&lt;dd&gt;
&lt;p&gt;Join IBMer, Java Champion, and co-author of a new eBook, “Practical cloud-native Java development with MicroProfile”, &lt;a href=&quot;https://twitter.com/emilyfhjiang&quot;&gt;Emily Jiang&lt;/a&gt; as she signs and gives away copies of this popular publication.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt class=&quot;hdlist1&quot;&gt;Open Liberty Space Rover Challenge - Daily at the IBM Booth&lt;/dt&gt;
&lt;dd&gt;
&lt;p&gt;Navigate the planets and get your rover safely to your destination in the stars. Take control of a spaceship and use hand signals to direct its flight from planet to planet. Climb the rankings on your way to become top cadet in Star Academy. Our Space Rover Challenge leverages a variety of technologies, including hardware, and modern Java technology. While you&amp;#8217;re with us, ask our developers about the underlying technologies they&amp;#8217;ve used to create the demo, including Open Liberty, also known as “the most flexible server runtime in the cosmos”, Jakarta EE, MicroProfile, and OpenJ9.&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_dark&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/Rover-v1.jpg&quot; alt=&quot;IBM Space Rover&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Check out &lt;a href=&quot;https://developer.ibm.com/events/devnexus-2022-atlanta-ga-april-12-14/&quot;&gt;IBM&amp;#8217;s presence at DevNexus&lt;/a&gt; as well as the &lt;a href=&quot;https://devnexus.org/schedule?iframe=no&quot;&gt;full schedule&lt;/a&gt; on the &lt;a href=&quot;https://devnexus.org&quot;&gt;conference website&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Mon, 04 Apr 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/04/04/nexus-conf.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/04/04/nexus-conf
          
        </guid>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Meet our open source champions: Emily Jiang</title>
        <description></description>        
        <pubDate>Wed, 23 Feb 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/redirected.html</link>
        <guid isPermaLink="true">
          
            https://newsroom.eclipse.org/eclipse-newsletter/2022/january/committer-profile-emily-jiang
          
        </guid>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Concurrency 3.0 for Jakarta EE 10 in Open Liberty 22.0.0.3-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Although only a few short months have passed since we announced Jakarta EE 9.1 support in Open Liberty 21.0.0.12, we&amp;#8217;re already implementing Jakarta EE 10 features. Concurrency 3.0 marks our first Jakarta EE 10 beta feature, available in Open Liberty 22.0.0.3-beta. Concurrency 3.0 introduces a variety of new enhancements including resource definition annotations that put applications in control of defining the concurrency constraints and thread context types that the application requires, context-aware completion stages that are managed by the container, and more.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;all-beta-features-package&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta features package for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; contains all Open Liberty beta features and GA features and functions.  This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.
If you try the beta package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#concurrency&quot;&gt;Concurrency 3.0 for Jakarta EE 10&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;concurrency&quot;&gt;Concurrency 3.0 for Jakarta EE 10&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Jakarta Concurrency specification enhances the set of parallel and reactive programming models available to applications, enabling tasks and completion stage actions to run with the thread context of the submitter.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Concurrency 3.0 includes the following enhancements:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Resource definition annotations that put applications in control of defining the concurrency constraints and thread context types that the application requires.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Context-aware completion stages that are managed by the container.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Asynchronous methods that are backed by context-aware completion stages.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Improvements to Triggers for customizing the scheduling of business logic according to dates and times within one&amp;#8217;s own time zone.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Standardized integration for third-party providers of thread context.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;While in beta, Open Liberty allows this Jakarta EE 10 feature to be used alongside Jakarta EE 9 features so that you can try it out with existing applications. Enable the &lt;code&gt;concurrent-3.0&lt;/code&gt; feature in your &lt;code&gt;server.xml&lt;/code&gt;,&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;concurrent-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can still configure &lt;code&gt;&amp;lt;managedExecutorService&amp;gt;&lt;/code&gt; and other Concurrency resource types in &lt;code&gt;server.xml&lt;/code&gt; as you did for previous versions of the feature.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;However, Conurrency 3.0 gives you the ability to define those resources within application components:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.enterprise.concurrent.ContextServiceDefinition.ALL_REMAINING&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.enterprise.concurrent.ContextServiceDefinition.APPLICATION&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.enterprise.concurrent.ContextServiceDefinition.SECURITY&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.enterprise.concurrent.ContextServiceDefinition.TRANSACTION&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.annotation.Resource&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.enterprise.concurrent.ContextServiceDefinition&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.enterprise.concurrent.ManagedExecutorDefinition&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.enterprise.concurrent.ManagedExecutorService&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.inject.Inject&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.servlet.http&lt;/span&gt;.*;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.sql&lt;/span&gt;.*;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.concurrent.CompletionException&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@ContextServiceDefinition&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/concurrent/AppContextOnly&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
        propagated = APPLICATION,
        cleared = { TRANSACTION, SECURITY },
        unchanged = ALL_REMAINING)
&lt;span class=&quot;annotation&quot;&gt;@ManagedExecutorDefinition&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:module/concurrent/MyExecutor&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
        context = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:app/concurrent/AppContextOnly&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
        maxAsync = &lt;span class=&quot;integer&quot;&gt;5&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;MyServlet&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; HttpServlet {
    &lt;span class=&quot;annotation&quot;&gt;@Resource&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:module/env/concurrent/MyExecutorRef&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
              lookup = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:module/concurrent/MyExecutor&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    ManagedExecutorService myExecutor;

    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt; AccountsBean accounts;
    ...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the CDI feature enabled, methods that return a &lt;code&gt;CompletionStage&lt;/code&gt; or &lt;code&gt;CompletableFuture&lt;/code&gt; can be designated to run asynchronously by annotating them with &lt;code&gt;@Asynchronous&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.enterprise.concurrent.Asynchronous&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;jakarta.inject.Singleton&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.sql&lt;/span&gt;.*;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.concurrent.CompletableFuture&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.concurrent.CompletionException&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.naming.InitialContext&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.naming.NamingException&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.sql.DataSource&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@Singleton&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;AccountsBean&lt;/span&gt; {

    &lt;span class=&quot;annotation&quot;&gt;@Asynchronous&lt;/span&gt;(executor = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:module/concurrent/MyExecutor&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    CompletableFuture&amp;lt;&lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Account&amp;gt;&amp;gt; findOverdue(&lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; minDaysLate) {
        &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Account&amp;gt; overdueAccounts = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;ArrayList&lt;/span&gt;&amp;lt;Account&amp;gt;();
        &lt;span class=&quot;keyword&quot;&gt;try&lt;/span&gt; {
            &lt;span class=&quot;comment&quot;&gt;// Resource reference lookup requires context of the application component,&lt;/span&gt;
            &lt;span class=&quot;predefined-type&quot;&gt;DataSource&lt;/span&gt; db = &lt;span class=&quot;predefined-type&quot;&gt;InitialContext&lt;/span&gt;.doLookup(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:comp/env/jdbc/account-db-ref&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
            ...
            return Asynchronous.Result.complete(overdueAccounts);
        } &lt;span class=&quot;keyword&quot;&gt;catch&lt;/span&gt; (&lt;span class=&quot;exception&quot;&gt;NamingException&lt;/span&gt; | &lt;span class=&quot;exception&quot;&gt;SQLException&lt;/span&gt; x) {
            &lt;span class=&quot;keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; CompletionException(x);
        }
    }

    ...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When the application invokes the asynchronous method, the container intercepts the invocation and hands back a completion stage representing its eventual completion, which is arranged by the &lt;code&gt;ManagedExecutorService&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doGet(HttpServletRequest req, HttpServletResponse res) {
        ...
        accounts.findOverdue(&lt;span class=&quot;integer&quot;&gt;60&lt;/span&gt;).thenAccept(&lt;span class=&quot;local-variable&quot;&gt;this&lt;/span&gt;::sendReminder);
        ...
    }

    &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; sendReminder(&lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Account&amp;gt; overdue) {
        &lt;span class=&quot;keyword&quot;&gt;try&lt;/span&gt; {
            &lt;span class=&quot;comment&quot;&gt;// Resource reference lookup requires context of the application component,&lt;/span&gt;
            &lt;span class=&quot;predefined-type&quot;&gt;DataSource&lt;/span&gt; db = &lt;span class=&quot;predefined-type&quot;&gt;InitialContext&lt;/span&gt;.doLookup(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:comp/env/jdbc/customer-db-ref&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
            ...
        } &lt;span class=&quot;keyword&quot;&gt;catch&lt;/span&gt; (&lt;span class=&quot;exception&quot;&gt;NamingException&lt;/span&gt; | &lt;span class=&quot;exception&quot;&gt;SQLException&lt;/span&gt; x) {
            &lt;span class=&quot;keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; CompletionException(x);
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Concurrency 3.0 specification hasn&amp;#8217;t been published yet because Jakarta EE 10 is still under development. However, you can preview a draft of it at the &lt;a href=&quot;https://github.com/eclipse-ee4j/concurrency-api/blob/2abe74ce30589ef53e248009fcb446491fd42a27/specification/src/main/asciidoc/jakarta-concurrency.adoc&quot;&gt;concurrency-api GitHub page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Similarly, the API jar will not be available on Maven until the specification is released, but in the meantime, you can check out the &lt;a href=&quot;http://public.dhe.ibm.com/ibmdl/export/pub/software/olrepo/io/openliberty/jakarta/enterprise/concurrent/jakarta.enterprise.concurrent-api/3.0.0.20220120/&quot;&gt;draft copy.&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;repositories&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;repository&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;id&amp;gt;&lt;/span&gt;ibmdhe&lt;span class=&quot;tag&quot;&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;IBM_DHE File Server&lt;span class=&quot;tag&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;url&amp;gt;&lt;/span&gt;https://public.dhe.ibm.com/ibmdl/export/pub/software/olrepo&lt;span class=&quot;tag&quot;&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/repository&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/repositories&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.jakarta.enterprise.concurrent&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jakarta.enterprise.concurrent-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.0.0.20220120&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 17, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;22.0.0.3-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[22.0.0.3-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 17 Feb 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/02/17/concurrency-3.0-22003-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/02/17/concurrency-3.0-22003-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Enhancements to JPA persistence properties and a number of significant bug fixes in Open Liberty 22.0.0.2</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 22.0.0.2 adds the ability to declare default JPA persistence properties to all container-managed persistence contexts as part of the Liberty configuration. This release also provides a number of significant bug fixes.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 22.0.0.2:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jpa&quot;&gt;Define JPA persistence properties at server scope&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;View the list of fixed bugs in &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A22002+label%3A%22release+bug%22&quot;&gt;22.0.0.2&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Run your apps using 22.0.0.2&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;22.0.0.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '[22.0.0.2,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using Docker:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM open-liberty&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://stackoverflow.com/tags/open-liberty&quot;&gt;&lt;img src=&quot;/img/blog/blog_btn_stack.svg&quot; alt=&quot;Ask a question on Stack Overflow&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;jpa&quot;&gt;Define JPA persistence properties at server scope&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This new JPA enhancement adds the ability to declare default JPA persistence properties to all container-managed persistence contexts as a Liberty &lt;code&gt;server.xml&lt;/code&gt; configuration.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, to set persistence property for all &lt;code&gt;persistence.xml&lt;/code&gt; configuration files, you had to update each &lt;code&gt;persistence.xml&lt;/code&gt; file in all applications. This could end up requiring hundreds of manual updates and/or rebuilding of applications.
With this enhancement, you can specify persistence properties in the &lt;code&gt;server.xml&lt;/code&gt; file that will propagate to all container-managed persistence units for all applications installed on that server.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To start using the new feature, add the new &lt;code&gt;defaultProperties&lt;/code&gt; element to the &lt;code&gt;jpa&lt;/code&gt; element configuration in your &lt;code&gt;server.xml&lt;/code&gt; file. Use this element to specify the persistence properties that you want to apply to all container-managed persistence units:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;persistenceContainer-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;jpa&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;defaultPersistenceProvider&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;org.hibernate.jpa.HibernatePersistenceProvider&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;defaultProperties&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;javax.persistence.lock.timeout&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;4000&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;hibernate.dialect&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;org.hibernate.dialect.Oracle12cDialect&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/defaultProperties&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/jpa&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jpa-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;jpa&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;defaultProperties&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;javax.persistence.lock.timeout&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;12345&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;eclipselink.cache.shared.default&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/defaultProperties&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/jpa&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Technical description&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These &lt;code&gt;defaultProperties&lt;/code&gt; integration-level persistence properties will be supplied to the persistence provider specified when the &lt;code&gt;PersistenceProvider.createContainerEntityManagerFactory&lt;/code&gt; method is called by the JPA Container.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;According to the JPA specification (3.4.4.3):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;If the same property or hint is specified more than once, the following order of overriding applies, in order of decreasing precedence:

* argument to method of EntityManager, Query, or TypedQuery interface
* specification to NamedQuery (annotation or XML)
* argument to createEntityManagerFactory method
* specification in persistence.xml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means these new &lt;code&gt;defaultProperties&lt;/code&gt; persistence property values will override any properties with the same name that are specified in a &lt;code&gt;persistence.xml&lt;/code&gt; file. However, property values specified through PersistenceContext annotation, or the &lt;code&gt;persistence-context-ref&lt;/code&gt; deployment descriptor element, or &lt;code&gt;Query Hints&lt;/code&gt; property will override these &lt;code&gt;defaultProperties&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information check out the &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/15979&quot;&gt;GitHub issue&lt;/a&gt; for this feature.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;bugs&quot;&gt;Notable bugs fixed in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We’ve spent some time fixing bugs. The following sections describe just some of the issues resolved in this release. If you’re interested, here’s the  &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A22002+label%3A%22release+bug%22&quot;&gt;full list of bugs fixed in 22.0.0.2&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19545&quot;&gt;OpenIdConnectClient cookies not getting deleted after logout&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, OpenID Connect nonce cookies could accumulate over multiple logins and not be cleared after logout. Instead, we would expect all cookies to be cleared after logout or on next login instead of accumulating. This issue was caused by not using the correct cookie name when clearing the nonce cookie and has now been fixed.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19831&quot;&gt;The output of ./wlp/bin/productInfo featureInfo missing new lines&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In Open Liberty 22.0.0.1, the output of &lt;code&gt;./wlp/bin/productInfo featureInfo&lt;/code&gt; was missing new line characters.
For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;acmeCA-2.0adminCenter-1.0appClientSupport-1.0appSecurity-1.0appSecurity-2.0appSecurity-3.0appSecurityClient-1.0audit-1.0batch-1.0batchManagement-1.0beanValidation-1.1beanValidation-2.0bells-1.0cdi-1.2cdi-2.0cloudant-1.0concurrent-1.0constra ...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;There are now line breaks between each of the feature names, as shown below:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;acmeCA-2.0
adminCenter-1.0
appClientSupport-1.0
appSecurity-1.0
appSecurity-2.0
appSecurity-3.0
appSecurityClient-1.0
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19860&quot;&gt;Updating MicroProfile versions on server.xml causes issues with install manager&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, updating to MicroProfile 5.0 in the &lt;code&gt;server.xml&lt;/code&gt; and &lt;code&gt;pom.xml&lt;/code&gt; would cause issues with the install manager. After resolving the features which are needed, the &lt;code&gt;RepositoryResolver&lt;/code&gt; has to create lists of which features to install. There&amp;#8217;s a list of everything needed for each requested feature and one for each auto-feature. When creating the install lists, it traversed the dependencies but stopped traversing when it founds a dependency which was installed. If &lt;code&gt;distributedMap-1.0&lt;/code&gt; is installed but &lt;code&gt;distributedMapInternal-1.0&lt;/code&gt; is not, it stops traversing dependencies when it hits &lt;code&gt;distributedMap-1.0&lt;/code&gt; and &lt;code&gt;distributedMapInternal-1.0&lt;/code&gt; is not added to the list. This bug was fixed by tracing down the entire dependency tree, building the list and finally removing any features which are already installed.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19826&quot;&gt;MP Fault Tolerance annotations at the class level of a Rest Client interface are ignored&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A bug was discovered which led to MP Fault Tolerance annotations to be ignored when annotated at the class level of a Rest Client interface. However it would be picked up if annotated at method level. This issue was fixed by updating the rest client builder to check for fault tolerance annotations on the interface as well as on the method when deciding whether to add the &lt;code&gt;@FaultTolerance&lt;/code&gt; annotation.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19177&quot;&gt;(JPA 2.2) EclipseLink: Deliver Bug #412391&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;JPA 2.2 has been updated to fix the EclipseLink bug &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=412391&quot;&gt;#412391&lt;/a&gt; - static weaving output failing silently on runtime when subclass entity has the same attribute as superclass entity.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19897&quot;&gt;&quot;ERROR: Input redirection is not supported, exiting the process immediately&quot; reported with Open Liberty as a service on Win&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When running Open Liberty as a service on Windows, the following error was output when the timeout/retry logic was executed on start or stop:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;ERROR: Input redirection is not supported, exiting the process immediately.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The expected behaviour would be for the server start script to loop the specified number of times, waiting for the server to start properly &lt;strong&gt;without&lt;/strong&gt; echoing the &lt;code&gt;ERROR&lt;/code&gt; message to the console. This issue has been fixed by updating the &lt;code&gt;server.bat&lt;/code&gt; with ping command as opposed to timeout command. This behaviour should no longer occur.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/18941&quot;&gt;NullPointerException in JSP after upgrade&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A bug was introduced in 21.0.0.9 which caused apps to crash with a NullPointerException. This issue has now been fixed, as it was caused by a &lt;code&gt;taglib&lt;/code&gt; referencing a &lt;code&gt;tld&lt;/code&gt; file that didn&amp;#8217;t exist.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-open-liberty-22-0-0-2-now&quot;&gt;Get Open Liberty 22.0.0.2 now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Available through &lt;a href=&quot;#run&quot;&gt;Maven, Gradle, Docker, and as a downloadable archive&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 15 Feb 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/02/15/jpa-22002.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/02/15/jpa-22002
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>jakarta-ee</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>MicroProfile 5.0, JWE support in OIDC and Social Media Login, and many more exciting new features in Open Liberty 22.0.0.1</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 22.0.0.1 offers many exciting new features including MicroProfile 5.0, enabling applications to use MicroProfile APIs together with Jakarta EE 9.1. Other enhancements include MicroProfile RestClient&amp;#8217;s implementation switching from Apache CXF to RESTEasy, MicroProfile OpenAPI receiving an update to support multiple applications, and JWE support being added to OpenID Connect Client and Social Media Login. Several other features and many bug fixes are also included in 22.0.0.1, as well as the introduction of signature files for our downloadable release binaries.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 22.0.0.1:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp5&quot;&gt;MicroProfile 5.0&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mpRestClient&quot;&gt;MicroProfile Rest Client 3.0 - Switching to RESTEasy&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mpOpenApi&quot;&gt;Support multiple applications in mpOpenApi-2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jwe&quot;&gt;Support JWE for OpenID Connect Client and Social Media Login&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#block_classes&quot;&gt;Block Loading of Classes with Known Vulnerabilities&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#release_packages&quot;&gt;Release packages are now signed&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#expansion_variables&quot;&gt;Using expansion variables in server.env&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jvm&quot;&gt;JVM Working Directory&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#stale_connection_identification&quot;&gt;Customizing Stale Connection Identification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#deployment_descriptor_parsing&quot;&gt;Improvements to Deployment Descriptor Parsing&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;View the list of fixed bugs in &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A22001+label%3A%22release+bug%22&quot;&gt;22.0.0.1&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Run your apps using 22.0.0.1&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;22.0.0.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '[22.0.0.1,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using Docker:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM open-liberty&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://stackoverflow.com/tags/open-liberty&quot;&gt;&lt;img src=&quot;/img/blog/blog_btn_stack.svg&quot; alt=&quot;Ask a question on Stack Overflow&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;mp5&quot;&gt;MicroProfile 5.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile 5.0 enables applications to use MicroProfile APIs together with Jakarta EE 9.1. MicroProfile 5.0, which includes Config 3.0, Fault Tolerance 4.0, Rest Client 3.0, Health 4.0, Metrics 4.0, Open Tracing 3.0, Open API 3.0, and JWT propagation 2.0, does not provide any other functional updates except aligning with the Jakarta namespace.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mpRestClient&quot;&gt;MicroProfile Rest Client 3.0 - Switching to RESTEasy&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Although all features included in MicroProfile 5 received updates to make them compatible with Jakarta EE 9, Rest Client 3.0 deserves extra attention as its Open Liberty implementation is switching to RESTEasy (previously it used Apache CXF).  This change brings with it some behavior and property changes (most of which are already documented as &lt;a href=&quot;/docs/latest/reference/jaxrs-dif.html&quot;&gt;differences&lt;/a&gt; between jaxrs-2.1 and restfulWS-3.0).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Add the feature to the &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;microProfile-5.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;mpOpenApi&quot;&gt;Support multiple applications in mpOpenApi-2.0&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile OpenAPI helps you document the REST endpoints of your application by creating and serving documentation in the OpenAPI format.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile OpenAPI can now create OpenAPI documentation for more than one application. Previously, only the first deployed web module which included a JAX-RS application would be documented. When two or more web modules containing JAX-RS applications are deployed, the MicroProfile OpenAPI feature can now create documentation for each of them and then merge that documentation together.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable this functionality, you must set the MicroProfile Config property &lt;code&gt;mp.openapi.extensions.liberty.merged.include=all&lt;/code&gt;, e.g. by adding this to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;variable&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mp.openapi.extensions.liberty.merged.include&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With this property set, deploy several JAX-RS applications and visit &lt;code&gt;/openapi/ui&lt;/code&gt; on your Open Liberty server where you should see documentation for all the applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following MP Config properties can be used to configure this feature:&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 25%;&quot;&gt;
&lt;col style=&quot;width: 25%;&quot;&gt;
&lt;col style=&quot;width: 25%;&quot;&gt;
&lt;col style=&quot;width: 25%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Name&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Description&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Default&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Values&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;code&gt;mp.openapi.extensions.liberty.merged.include&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;List of modules which should be included in the merged OpenAPI documentation&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;code&gt;first&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;all&lt;/code&gt; (to include all applications)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;first&lt;/code&gt; (to include only the first web module deployed, matching the previous behavior)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;comma-separated list of &lt;code&gt;&amp;lt;appname&amp;gt;&lt;/code&gt; (to include individual applications) and &lt;code&gt;&amp;lt;appname&amp;gt;/&amp;lt;modulename&amp;gt;&lt;/code&gt; (to include individual modules within an EAR)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;code&gt;mp.openapi.extensions.liberty.merged.exclude&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;List of modules which should be excluded from the merged OpenAPI documentation&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Takes priority over the list of included modules&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;code&gt;none&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;none&lt;/code&gt; (to exclude nothing)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;comma-separated list of &amp;lt;appname&amp;gt; (to exclude individual applications) and &amp;lt;appname&amp;gt;/&amp;lt;modulename&amp;gt; (to exclude individual modules within an EAR)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;code&gt;mp.openapi.extensions.liberty.merged.info&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;This property sets the info section of the final Open API document&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;N/A&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The value must be a valid OpenAPI info section in JSON format. If this property is set, the info section in the final OpenAPI document is replaced with the value of the property. This replacement is made after any merging is completed.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;/docs/latest/documentation-openapi.html#multi-module&quot;&gt;openAPI multi-module documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jwe&quot;&gt;Support JWE for OpenID Connect Client and Social Media Login&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With this release, the OpenID Connect Client 1.0 and Social Media Login 1.0 features support receiving tokens in the JSON Web Encryption (&lt;code&gt;JWE&lt;/code&gt;) format. A &lt;code&gt;JWE&lt;/code&gt; is a way to represent encrypted content using &lt;code&gt;JSON&lt;/code&gt;. In addition to supporting &lt;code&gt;JWE&lt;/code&gt;, the OpenID Connect Client 1.0 feature provides an option to temporarily cache access token validation results for inbound propagation. Both features add support for the &lt;code&gt;RS384&lt;/code&gt;, &lt;code&gt;RS512&lt;/code&gt;, &lt;code&gt;HS384&lt;/code&gt;, &lt;code&gt;HS512&lt;/code&gt;, &lt;code&gt;ES256&lt;/code&gt;, &lt;code&gt;ES384&lt;/code&gt;, and &lt;code&gt;ES512&lt;/code&gt; signature algorithms.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Prior to this release, the OpenID Connect Client 1.0 and Social Media Login 1.0 features did not support consuming access or ID tokens in &lt;code&gt;JWE&lt;/code&gt; format. This limited our interoperability with other &lt;code&gt;OIDC&lt;/code&gt; clients and providers that use &lt;code&gt;JWEs&lt;/code&gt; to propagate access tokens or provide identifying information about the authenticated user. With this release, the OpenID Connect Client 1.0 and Social Media Login 1.0 features will be able to interoperate with OpenID Connect Providers that provide &lt;code&gt;JWE&lt;/code&gt; formatted access and ID tokens.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can configure a Liberty OpenID Connect Relying Party to process access and ID tokens that are in a &lt;code&gt;JWE&lt;/code&gt; format. The corresponding OpenID Connect Provider should support creating JWE access or ID tokens.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Set the OpenID Connect Provider with the OpenID Connect Relying Party&amp;#8217;s public key that is used to encrypt the Content Encryption Key according to the OpenID Connect Provider&amp;#8217;s documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the &lt;code&gt;keyManagementKeyAlias&lt;/code&gt; attribute to the private key alias of the key management key that is used to decrypt the Content Encryption Key of JWE token. The key must exist in the keyStore configured for the SSL configuration referred by the sslRef attribute. For example,&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;openidConnectClient&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;keyManagementKeyAlias&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;privateKeyAlias&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Optional: Configure access token cache.
You can configure a Liberty OpenID Connect Relying Party to cache access token validation results for inbound propagation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Set the &lt;code&gt;accessTokenCacheEnabled&lt;/code&gt; attribute to &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the &lt;code&gt;accessTokenCacheTimeout&lt;/code&gt; attribute to a duration specifying how long an authenticated subject that is created by using a propagated access token is cached.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the &lt;code&gt;tokenReuse&lt;/code&gt; attribute to &lt;code&gt;true&lt;/code&gt; if the OpenID Connect Relying Party must cache results for a &lt;code&gt;JWT&lt;/code&gt; access token that includes a &lt;code&gt;jti&lt;/code&gt; claim.&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Although enabling this support may result in a performance improvement, it is recommended that the value for the &lt;code&gt;accessTokenCacheTimeout&lt;/code&gt; attribute is short to reduce the possibility of a stale result as compared to what a validation call to the OpenID Connect Provider would have produced.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can also configure Liberty OIDC Social Login to process ID tokens that are in a &lt;code&gt;JWE&lt;/code&gt; format. The corresponding OpenID Connect Provider should support creating &lt;code&gt;JWE&lt;/code&gt; ID tokens.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Set the OpenID Connect Provider with the OIDC Social Login&amp;#8217;s public key that is used to encrypt the Content Encryption Key according to the OpenID Connect Provider&amp;#8217;s documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the &lt;code&gt;keyManagementKeyAlias&lt;/code&gt; attribute to the private key alias of the key management key that is used to decrypt the Content Encryption Key of JWE token. The key must exist in the keyStore configured for the SSL configuration referred by the sslRef attribute. For example,&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;oidcLogin&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;keyManagementKeyAlias&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;privateKeyAlias&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The signatureAlgorithm attributes of both elements now support the &lt;code&gt;RS384&lt;/code&gt;, &lt;code&gt;RS512&lt;/code&gt;, &lt;code&gt;HS384&lt;/code&gt;, &lt;code&gt;HS512&lt;/code&gt;, &lt;code&gt;ES256&lt;/code&gt;, &lt;code&gt;ES384&lt;/code&gt;, and &lt;code&gt;ES512&lt;/code&gt; signature algorithms.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;openidConnectClient&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;signatureAlgorithm&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;RS384&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;oidcLogin&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;signatureAlgorithm&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;RS384&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;block_classes&quot;&gt;Block Loading of Classes with Known Vulnerabilities (e.g. Apache log4j &quot;JndiLookup&quot;)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Applications deployed to Liberty may run versions of Log4j2 that are affected by Log4Shell (CVE-2021-44228) and related vulnerabilities.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This new function modifies the application and library class loaders to block the loading of the &lt;code&gt;org.apache.logging.log4j.core.lookup.JndiLookup&lt;/code&gt; class, which is the cause of the vulnerability.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Users should analyze their applications for use of Log4j2 with urgency; in the meantime this functionality may help mitigate Log4Shell and other vulnerabilities related to the &lt;code&gt;org.apache.logging.log4j.core.lookup.JndiLookup&lt;/code&gt; class. However, one should note that this will not protect in cases where the Log4j2 classes have been renamed (a process known as &quot;shading&quot;) or if Log4j2 is loaded by other class loaders, such the Java system class loader or user-created class loaders.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;release_packages&quot;&gt;Release packages are now signed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Starting in 22.0.0.1 release, we are signing our downloadable binaries. You can use these signature files and the corresponding public key to verify the authenticity and integrity of an Open Liberty release package.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty project uses its private key to digitally sign each Open Liberty release. You can use the Open Liberty public key to check the signature, verify that the package was released by Open Liberty, and that it was not modified since its release.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can verify a release package either locally, by using the openssl command and a &lt;code&gt;*.sig&lt;/code&gt; file, or on Maven Central, by using the gpg command.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Verifying Open Liberty packages with OpenSSL&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To verify an Open Liberty release package locally, you must first download an Open Liberty &lt;code&gt;.zip&lt;/code&gt; package, the corresponding &lt;code&gt;.sig&lt;/code&gt; file, and the Open Liberty public key. You can then run the &lt;code&gt;openssl&lt;/code&gt; command to verify the package.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Go to the &lt;a href=&quot;/start/#runtime_releases&quot;&gt;Download package section of the Get Started page&lt;/a&gt; and download an Open Liberty &lt;code&gt;.zip&lt;/code&gt; package and its corresponding &lt;code&gt;.sig&lt;/code&gt; file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Obtain the public key file by using the public key link on the Get Started page.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After you download the files, use the &lt;code&gt;openssl&lt;/code&gt; command from the command line to verify the package. For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;openssl dgst -sha256 -verify WebSphereLiberty_06-02-2021.pem -signature openliberty-javaee8-22.0.0.1.zip.sig openliberty-javaee8-22.0.0.1.zip

Verified OK&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This example uses the WebSphereLiberty_06-02-2021.pem public key file and openliberty-javaee8-22.0.0.1.zip.sig signature file to verify the openliberty-javaee8-22.0.0.1.zip release package. Replace the signature file and package version values according to the package that you want to verify. If the verification is successful, the command produces the following console output.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Verify Liberty packages on Maven Central&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To verify Open Liberty packages on Maven Central, you must first download the public key to your local machine by using the &lt;code&gt;gpg&lt;/code&gt; or &lt;code&gt;gpg2&lt;/code&gt; command. You must edit the trust level for the key owner. You can then use this key to remotely verify an Open Liberty &lt;code&gt;.asc&lt;/code&gt; release file on Maven Central.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Run the following command to download the public key file. The key ID value for the public key is &lt;code&gt;46102B8E&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;gpg2 --keyserver hkp://keyserver.ubuntu.com --recv-keys 46102B8E&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Use the &lt;code&gt;gpg2 --edit-key&lt;/code&gt; command to set the trust for the key owner to 5. When you run the &lt;code&gt;gpg2 --edit-key&lt;/code&gt; command, the console displays information about the key owner, followed by an internal command prompt. At this prompt, enter the &lt;code&gt;trust&lt;/code&gt; command. You are then prompted to select a level of trust. Enter &lt;code&gt;5&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;gpg2 --edit-key &amp;quot;WebSphere Liberty&amp;quot;
gpg&amp;gt; trust

Set trust 5&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Verify the file by running the &lt;code&gt;gpg2 --verify&lt;/code&gt; command. The following example verifies the Open Liberty 22.0.0.1 release package:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;gpg2 --verify openliberty-runtime-22.0.0.1.zip.asc

gpg: assuming signed data in 'openliberty-runtime-22.0.0.1.zip'
gpg: Signature made Wed Nov 24 09:02:44 2021 EST
gpg: using RSA key 91FFD9A642D060B66B802B9D4D210F6946102B8E
gpg: Good signature from &amp;quot;WebSphere Liberty (Works for IBM) contbld@uk.ibm.com&amp;quot; [ultimate]
gpg: aka &amp;quot;WebSphereLiberty&amp;quot; [ultimate]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;expansion_variables&quot;&gt;Using expansion variables in server.env&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This update allows you to specify environment variables in the server.env file on Linux which are resolved when the server starts. This capability already exists on Windows.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Prior to this update, it might be necessary to provide custom packaged servers with hard-coded values in the server.env. Now server.env can consume these values from the system environment.
On Windows this capability already existed, though it was not documented anywhere.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;On Windows, this capability is enabled by default and has always existed. Since this is new to all other operating systems, it is necessary to enable the new capability by adding a comment line near the top of the file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;code&gt;# enable_variable_expansion&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Environment variables are specified using &lt;code&gt;${variable_name}&lt;/code&gt; syntax, except on Windows where the syntax is &lt;code&gt;!variable_name!&lt;/code&gt;
In the examples below the &lt;code&gt;LOG_FILE&lt;/code&gt; variable is assigned the value of an environment variable. This example changes the name of the log file from the default name of &lt;code&gt;console.log&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Example &lt;code&gt;server.env&lt;/code&gt; on Windows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;keystore_password=XASEvZMKn3wG6XuTaVYFr8C
LOG_FILE=!CONSOLE_LOG!&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Example &lt;code&gt;server.env&lt;/code&gt; on Linux:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;# enable_variable_expansion
keystore_password=XASEvZMKn3wG6XuTaVYFr8C
LOG_FILE=${CONSOLE_LOG}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information check out the &lt;a href=&quot;/docs/latest/reference/config/server-configuration-overview.html&quot;&gt;Server configuration overview&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jvm&quot;&gt;JVM Working Directory&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This enhancement introduces a new &lt;code&gt;SERVER_WORKING_DIR&lt;/code&gt; environment variable which allows the user to set the &lt;code&gt;JVM&lt;/code&gt; working directory location to something other than the &lt;code&gt;${WLP_OUTPUT_DIR}/serverName location&lt;/code&gt;.  For portability purposes, the path supports not only absolute paths (one that contains a &lt;code&gt;c:\&lt;/code&gt; on Windows, or a &lt;code&gt;/&lt;/code&gt; on linux based operating systems), but also allows users to specify relative paths to the &lt;code&gt;${WLP_OUTPUT_DIR}/serverName&lt;/code&gt; directory.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For example, the user could set the Open Liberty &lt;code&gt;JVM&lt;/code&gt; output to be added to the &lt;code&gt;${WLP_OUTPUT_DIR}/serverName/logs&lt;/code&gt; location so that all &lt;code&gt;JVM&lt;/code&gt; related data would be in with the server log data (relative path example) by setting the following:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;code&gt;SERVER_WORKING_DIR=logs&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or the user could move the information outside of the &lt;code&gt;${WLP_OUTPUT_DIR}/serverName&lt;/code&gt; location by doing something similar to the following (which would put the data in the &lt;code&gt;/wlp/usr/servers/logs/&lt;/code&gt; folder and is an absolute path example for Linux based operating systems):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;code&gt;SERVER_WORKING_DIR=/wlp/usr/servers/logs/&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;An absolute path example on Windows would look similar to the following:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;code&gt;SERVER_WORKING_DIR=c:\wlp\usr\servers\logs\&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This enhancement gives users more flexibility regarding the location of the Open Liberty JVM output.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;stale_connection_identification&quot;&gt;Customizing Stale Connection Identification&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty maintains a pool of &lt;code&gt;JDBC&lt;/code&gt; connections to improve performance. It is necessary for Open Liberty to be able to identify when connections have become stale and are no longer usable so that such connections can be removed from the pool. Open Liberty leverages multiple standards made available by the &lt;code&gt;JDBC&lt;/code&gt; and &lt;code&gt;SQL&lt;/code&gt; specifications, as well as relying on some built-in knowledge of vendor-specific behavior for some &lt;code&gt;JDBC&lt;/code&gt; drivers in order to achieve this.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Not all &lt;code&gt;JDBC&lt;/code&gt; drivers completely follow the &lt;code&gt;JDBC&lt;/code&gt;/&lt;code&gt;SQL&lt;/code&gt; specifications in identifying stale connections. If you are using such a &lt;code&gt;JDBC&lt;/code&gt; driver, it is now possible for you to provide additional configuration for a data source that helps identify the vendor-specific &lt;code&gt;SQL&lt;/code&gt; states and error codes that are raised by the &lt;code&gt;JDBC&lt;/code&gt; driver, enabling Liberty to better maintain the connection pool.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Configure one or more &lt;code&gt;&amp;lt;identifyException&amp;gt;&lt;/code&gt; subelements under &lt;code&gt;&amp;lt;dataSource&amp;gt;&lt;/code&gt; to provide the &lt;code&gt;SQLException&lt;/code&gt; identification detail.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jdbc-4.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jndi-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  ... other features
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;dataSource&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DefaultDataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;jndiName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jdbc/myDataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;jdbcDriver&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;libraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myJDBCLib&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;databaseName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;TESTDB&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;serverName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;portNumber&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;1234&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- identify the following as stale connections, --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;identifyException&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;sqlState&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;08000&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;as&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;StaleConnection&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;identifyException&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;errorCode&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;2468&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;as&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;StaleConnection&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- remove built-in identification of SQL state S1000 --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;identifyException&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;sqlState&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;S1000&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;as&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dataSource&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myJDBCLib&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;file&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;C:/drivers/some-jdbc-driver.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;deployment_descriptor_parsing&quot;&gt;Improvements to Deployment Descriptor Parsing&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This update updates the parsing of application deployment descriptor resources and updates the parsing of application bindings and extensions resources. These resources are &lt;code&gt;XML&lt;/code&gt; format files which provide metadata for the application. Deployment descriptors are community defined, and include &lt;code&gt;XML&lt;/code&gt; files &lt;code&gt;application.xml&lt;/code&gt;, &lt;code&gt;ejb-jar.xml&lt;/code&gt;, &lt;code&gt;web.xml&lt;/code&gt;, &lt;code&gt;application-client.xml&lt;/code&gt; and &lt;code&gt;ra.xml&lt;/code&gt;. Bindings and extensions resources are in addition to the community defined resources, and are vendor specific. IBM defined bindings and extensions resources include &lt;code&gt;ibm-application-bnd.xml&lt;/code&gt;, &lt;code&gt;ibm-application-ext.xml&lt;/code&gt;, and several others. This update modifies the parsing of these &lt;code&gt;XML&lt;/code&gt; resources in two ways. First, by relaxing rules relating to the header elements of the resources. The parsing rules were relaxed, allowing &lt;code&gt;XML&lt;/code&gt; resources to have less header information than was previously required. Before the update, several header elements were required. After the update, only a version or a &lt;code&gt;namespace-URI&lt;/code&gt; value are required. Second, this update improves the error messages which are displayed if there are problems parsing a resource. Error messages are now more specific, and contain more accurate information which describes where the errors occurred.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;bugs&quot;&gt;Notable bugs fixed in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We’ve spent some time fixing bugs. The following sections describe just some of the issues resolved in this release. If you’re interested, here’s the &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A22001+label%3A%22release+bug%22&quot;&gt;full list of bugs fixed in 22.0.0.1&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19631&quot;&gt;featureUtility installServerFeature fails when user feature is listed&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;featureUtility installServerFeatures previously contained bugs when the user configured a product extension in their server.xml, e.g.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;myExt:userfeature-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If the user feature file doesn&amp;#8217;t contain the following regex (Liberty version), &lt;code&gt;\\d\\d\\.\\d\\.\\d\\.\\d\\.esa&lt;/code&gt;, the user feature would not be installed to the defined product extension. The user feature doesn&amp;#8217;t need to have the same version as the Liberty version.
The tool didn&amp;#8217;t fetch the installed features properly.
Changes have been made to the underlying code to ensure that the feature name is extracted correctly from the filename.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19589&quot;&gt;ArrayIndexOutOfBoundsException during startup with mpOpenApi&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;During startup, &lt;code&gt;mpOpenApi&lt;/code&gt; uses &lt;code&gt;jandex&lt;/code&gt; to index classes and the following exception was observed:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
        at org.jboss.jandex.Indexer.updateTypeTarget(Indexer.java:1120)
        at org.jboss.jandex.Indexer.updateTypeTargets(Indexer.java:842)
        at org.jboss.jandex.Indexer.index(Indexer.java:1970)
        at io.openliberty.microprofile.openapi20.utils.IndexUtils.indexContainer(IndexUtils.java:110)
        at io.openliberty.microprofile.openapi20.utils.IndexUtils.indexContainer(IndexUtils.java:122)
  ...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This exception should not occur, however this was an issue in &lt;code&gt;jandex&lt;/code&gt; which was fixed in version 2.4.1, therefore we fixed this issue by updating &lt;code&gt;jandex&lt;/code&gt; to version 2.4.1.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19585&quot;&gt;Classes are still indexed by mpOpenAPI when mp.openapi.scan.disable=true&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When the config option &lt;code&gt;mp.openapi.scan.disable=true&lt;/code&gt;, application classes were still indexed using Jandex even though the result is discarded and isn&amp;#8217;t used to generate the OpenAPI document.
This was unhelpful since scanning is a relatively slow operation. We expect classes to not be scanned at all. A fix has been implemented so that classes are not scanned at all when scanning is disabled.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19567&quot;&gt;Memory Leak with mpJWT&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When using &lt;code&gt;JWTs&lt;/code&gt; to authenticate into a server, there was a chance a memory leak would occur after running for a long time leading to an &lt;code&gt;OutOfMemory&lt;/code&gt; error. A workaround was to disable the &lt;code&gt;authCache&lt;/code&gt; by adding the following to the server.xml.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;authentication&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Basic&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;cacheEnabled&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this case, the &lt;code&gt;HashMap&lt;/code&gt; in &lt;code&gt;AuthenticationGuard&lt;/code&gt; never had entries removed from it because the key used for the put (&lt;code&gt;hashtableAuthData&lt;/code&gt;) is different from the key used later to see if it should be removed (&lt;code&gt;authenticationData&lt;/code&gt;). This eventually leads to a large &lt;code&gt;HashMap&lt;/code&gt; and OOM Error. The change here to fix the issue was to make sure the same key is used in &lt;code&gt;relinquishAccess&lt;/code&gt; that was used in &lt;code&gt;requestAccess&lt;/code&gt;, which ensures that entries are removed from the &lt;code&gt;HashMap&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19547&quot;&gt;New HTTP/2 streams still accepted while server is closing&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Due to an oversight in a previous fix, HTTP/2 streams could still be accepted after the server shutdown process begins.
This would happen during server shutdown, with a quiesce timeout active, and an HTTP/2 connection actively generating new streams. As long as new streams keep the connection open during the quiesce timeout, the quiesce warning message would be invoked. A similar warning would be logged:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;CWWKE1106W: 1 shutdown operations did not complete during the quiesce period.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;During quiesce, connections should begin closing down. In HTTP/1.1 this implies disabling keep-alive. In HTTP/2, sending a GOAWAY once quiesce begins. We have worked on improving the HTTP/2 server shutdown behaviour to fix this issue.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19522&quot;&gt;Unresolved gRPC bundles in feature when used alongside servlet-5.0&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, the components within the &lt;code&gt;grpc&lt;/code&gt; monitor bundles did not properly resolve when running on the Jakarta EE9 &lt;code&gt;servlet-5.0&lt;/code&gt; feature. This bug occurred when &lt;code&gt;gRPC&lt;/code&gt; runs alongside the &lt;code&gt;servlet-5.0&lt;/code&gt; feature and some monitoring feature is enabled. For instance, this bug would occur with &lt;code&gt;grpc-1.0&lt;/code&gt; and &lt;code&gt;mpMetrics-4.0&lt;/code&gt;. This bug was fixed by updating the range of &lt;code&gt;io.grpc&lt;/code&gt; versions for EE9.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19433&quot;&gt;JNDI lookup to CORBA URL can hang&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A naming lookup that results in the first call to the CORBA COSNaming NameService should cause the service to be activated. However, previously, if two concurrent naming lookups found the service not yet activated, a race condition could have occurred, and one of the calls could have hung.
This happened because the activator incorrectly propagates an exception:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;code&gt;org.omg.PortableServer.POAPackage.AdapterAlreadyExists&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;NamingServiceAdapterActivator&lt;/code&gt; should simply return &lt;code&gt;false&lt;/code&gt; to indicate that activation failed.
One call should activate the service and use it, and the other call should use the already-activated service. Both calls should succeed. A fix has been implemented to solve this issue.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-open-liberty-22-0-0-1-now&quot;&gt;Get Open Liberty 22.0.0.1 now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Available through &lt;a href=&quot;#run&quot;&gt;Maven, Gradle, Docker, and as a downloadable archive&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 18 Jan 2022 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2022/01/18/microprofile5-22001.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2022/01/18/microprofile5-22001
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>MicroProfile 5, MicroProfile Rest Client 3.0 and JPA enhancements in Open Liberty 22.0.0.1-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 22.0.0.1-beta offers MicroProfile 5.0, which includes MicroProfile Rest Client 3.0 and aligns with Jakarta EE 9.1. This beta release also introduces the ability to declare &quot;default&quot; JPA persistence properties.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For 22.0.0.1-beta, there is a single beta package for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: this package contains all Open Liberty beta features and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you give the beta package a try, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features and enhancements:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp_5.0&quot;&gt;MicroProfile 5.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#rest_client&quot;&gt;MicroProfile Rest Client 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jpa_persistence&quot;&gt;Define JPA persistence properties at server scope&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2 0&quot;&gt;
&lt;h3 id=&quot;mp_5&quot;&gt;MicroProfile 5.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile 5.0 enables applications to use MicroProfile APIs together with Jakarta EE 9.1. MicroProfile 5.0 does not provide any other functional updates except aligning with Jakarta EE 9.1.  MicroProfile 5.0 includes the following features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Config 3.0&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fault Tolerance 4.0&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rest Client 3.0&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Health 4.0&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Metrics 4.0&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open Tracing 3.0&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open API 3.0&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JWT propagation 2.0.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This beta driver will be used as a compatible implementation for releasing MicroProfile 5.0.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Include the following in the &lt;code&gt;server.xml&lt;/code&gt; to enable the MicroProfile 5.0 feature in Open Liberty:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;microProfile-5.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Alternatively, you can enable the individual MicroProfile features that you need, for example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpOpenTracing-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about this update, check out the &lt;a href=&quot;https://github.com/eclipse/microprofile/releases/tag/5.0&quot;&gt;MicroProfile 5.0 Release&lt;/a&gt; on GitHub.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;rest_client&quot;&gt;MicroProfile Rest Client 3.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Rest Client is an API that helps developers to write type-safe interfaces that abstract and invoke remote RESTful services. This is the 3.0 release of MicroProfile Rest Client, and it adds support for Jakarta EE 9.1 technologies. From a developer&amp;#8217;s perspective, the only change from the previous release (2.0) is the package space name change of Jakarta packages from &lt;code&gt;javax.&lt;strong&gt;&lt;/code&gt; to &lt;code&gt;jakarta.&lt;/strong&gt;&lt;/code&gt;. However, another change is that the Open Liberty implementation has changed from Apache CXF to RESTEasy - this change brings with it some behavior and property changes (most of which are already documented as &lt;a href=&quot;/docs/latest/reference/jaxrs-dif.html&quot;&gt;differences between &lt;code&gt;jaxrs-2.1&lt;/code&gt; and &lt;code&gt;restfulWS-3.0&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use this new feature, you would need to add &lt;code&gt;mpRestClient-3.0&lt;/code&gt; to the &lt;code&gt;featureManager&lt;/code&gt; element in the server.xml. The code should be similar to previous versions of MP Rest Client, but the packages should change from &lt;code&gt;javax.&lt;strong&gt;&lt;/code&gt; to &lt;code&gt;jakarta.&lt;/strong&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpRestClient-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information, check out:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-rest-client&quot;&gt;Eclipse MicroProfile Rest Client GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://download.eclipse.org/microprofile/microprofile-rest-client-3.0-RC5/microprofile-rest-client-spec-3.0-RC5.html&quot;&gt;MicroProfile Rest Client 3.0 Specification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://download.eclipse.org/microprofile/microprofile-rest-client-3.0-RC5/apidocs/&quot;&gt;MicroProfile Rest Client 3.0 API Javadoc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;jpa_persistence&quot;&gt;Define JPA persistence properties at server scope&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This new JPA enhancement adds the ability to declare &quot;default&quot; JPA persistence properties to all container-managed persistence contexts as a Liberty server.xml configuration.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously if a persistence property needed to be set for all persistence.xml configuration files you would manually update all persistence.xml files in all applications. This could end up requiring hundreds of manual updates and/or rebuilding of applications.
With this enhancement you can specify persistence properties in the server.xml that will propagate to all container-managed persistence units for applications installed on that server.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To start using the new feature, add the &lt;code&gt;&amp;lt;defaultProperties&amp;gt;&lt;/code&gt; configuration element to the &lt;code&gt;&amp;lt;jpa&amp;gt;&lt;/code&gt; configuration in your &lt;code&gt;server.xml&lt;/code&gt; file. Specify the persistence properties that you want to apply to all container-managed persistence units, as shown in the following examples:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect4&quot;&gt;
&lt;h5 id=&quot;example-1&quot;&gt;Example 1:&lt;/h5&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;persistenceContainer-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;jpa&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;defaultPersistenceProvider&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;org.hibernate.jpa.HibernatePersistenceProvider&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;defaultProperties&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;javax.persistence.lock.timeout&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;4000&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;hibernate.dialect&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;org.hibernate.dialect.Oracle12cDialect&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/defaultProperties&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/jpa&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect4&quot;&gt;
&lt;h5 id=&quot;example-2&quot;&gt;Example 2:&lt;/h5&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jpa-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;jpa&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;defaultProperties&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;javax.persistence.lock.timeout&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;12345&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;eclipselink.cache.shared.default&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/defaultProperties&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/jpa&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;technical-description&quot;&gt;Technical description&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These &lt;code&gt;defaultProperties&lt;/code&gt; are integration-level persistence properties that are supplied to the specified persistence provider when the &lt;code&gt;PersistenceProvider.createContainerEntityManagerFactory&lt;/code&gt; method is called by the JPA Container.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;According to the JPA specification (3.4.4.3):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;If the same property or hint is specified more than once, the following order of overriding applies, in order of decreasing precedence:
  • argument to method of EntityManager, Query, or TypedQuery interface
  • specification to NamedQuery (annotation or XML)
  • argument to createEntityManagerFactory method
  • specification in persistence.xml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These &lt;code&gt;defaultProperties&lt;/code&gt; persistence property values override any properties with the same name that are specified in a &lt;code&gt;persistence.xml&lt;/code&gt; file. However, property values specified through PersistenceContext annotation, or the &lt;code&gt;persistence-context-ref&lt;/code&gt; deployment descriptor element, or Query Hints property will override these &lt;code&gt;defaultProperties&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 17, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;22.0.0.1-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[22.0.0.1-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9.1 Beta Features&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Are you looking for our regular section regarding Jakarta EE 9.1 Beta feature updates?  Well good news, as of 21.0.0.12 the Jakarta EE 9.1 features are now out of beta and fully supported.  That means that you can either use them in the official 21.0.0.12 release, or continue to use them in the beta 22.0.0.1-beta package.  Just as before, you can enable the individual features you want or you can just add the Jakarta EE 9.1 convenience feature to enable all of the Jakarta EE 9.1 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9.1 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 30 Nov 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/11/30/microprofile-5-22001-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/11/30/microprofile-5-22001-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta EE 9.1 support and configurable response headers in Open Liberty 21.0.0.12</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta EE 9.1 support is now available as part of Open Liberty 21.0.0.12, alongside configurable response headers, which offer more granular control over response headers! Several significant bug fixes are also part of this release.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 21.0.0.12:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jee_9.1&quot;&gt;Jakarta EE 9.1 support&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#response_headers&quot;&gt;Configurable Response Headers&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#bugs&quot;&gt;Notable bug fixes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Along with the new features and functions added to the runtime, we&amp;#8217;ve also made &lt;a href=&quot;#guides&quot;&gt;updates to our guides&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Run your apps using 21.0.0.12&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.12&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '[21.0.0.12,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using Docker:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM open-liberty&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://stackoverflow.com/tags/open-liberty&quot;&gt;&lt;img src=&quot;/img/blog/blog_btn_stack.svg&quot; alt=&quot;Ask a question on Stack Overflow&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1 1&quot;&gt;
&lt;h2 id=&quot;jee_9&quot;&gt;Jakarta EE 9.1 support&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/jakarta_ee.png&quot; alt=&quot;jakarta ee&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta EE 9.1 support is now available in Open Liberty!!  This support allows you to run Jakarta EE 9.1 applications using Java 8, 11, or 17 with other Open Liberty value-add features that are updated to support Jakarta EE 9.1.  Many of you have followed our progress for delivering Jakarta EE 9.1 via our beta releases and corresponding blogs, and we&amp;#8217;d like to thank those that provided feedback along the way.
If you&amp;#8217;re targeting a new application for Jakarta EE 9.1, make sure to use the &lt;code&gt;jakarta&lt;/code&gt; namespace.  For existing applications that you&amp;#8217;d like to move from Java EE (and its &lt;code&gt;javax&lt;/code&gt; namespace) to Jakarta EE (and its &lt;code&gt;jakarta&lt;/code&gt; namespace) we recommend trying the &lt;a href=&quot;https://github.com/eclipse/transformer&quot;&gt;Eclipse Transformer&lt;/a&gt;, an open source project originally developed by members of the Open Liberty team and then contributed to the Eclipse Foundation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the RESTful Web Services 3.0 (formerly called JAXRS) support in Open Liberty, there is a significant performance improvement for applications which use the RESTful Web Services function.  This performance improvement was achieved by moving our RESTful Web Services implementation from Apache CXF to using RestEasy.  With this new version, CDI is enabled by default, and JSON Binding is not enabled by default with the feature being specified in your &lt;code&gt;server.xml&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Any Liberty features with API and/or SPI functions that use Jakarta EE APIs as part of their method signatures have been updated to have their package versions be reset to 10.0 when using those API / SPIs with Jakarta EE 9.1.  Any bundles used for user features that depend on those packages will need to change the import package version range when updating the user feature to use Jakarta EE 9.1.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the introduction of Jakarta EE 9.1, the Jakarta Enterprise Beans 4.0 specification includes a few minor changes over the prior version of the specification, Enterprise JavaBeans (EJB) 3.2, as follows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Note the new names of the features; all of the same features exist, but the feature name prefix has changed from &lt;code&gt;ejb&lt;/code&gt; to &lt;code&gt;enterpriseBeans&lt;/code&gt;.  For example, &lt;code&gt;enterpriseBeansLite-4.0&lt;/code&gt; is the new version of &lt;code&gt;ejbLite-3.2&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The API package has changed from &lt;code&gt;javax.ejb&lt;/code&gt; to &lt;code&gt;jakarta.ejb&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;@Schedule&lt;/code&gt; annotation is now repeatable&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The following API methods have been removed:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;javax.ejb.EJBContext.getCallerIdentity()&lt;/code&gt; &amp;#8594; use &lt;code&gt;getCallerPrincipal()&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;javax.ejb.EJBContext.getEnvironment()&lt;/code&gt; &amp;#8594; use &lt;code&gt;JNDI&lt;/code&gt; lookup in &lt;code&gt;java:comp/env&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;javax.ejb.EJBContext.isCallerInRole(java.security.Identity)&lt;/code&gt; &amp;#8594; use &lt;code&gt;isCallerInRole(String)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;javax.ejb.SessionContext.getMessageContext()&lt;/code&gt; (removed with &lt;code&gt;JAX-RPC&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;All other capabilities of Enterprise Beans remain the same as the prior specification version (3.2).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Although many of the Jakarta EE 9.1 features have only received a version update, the majority have also had their name changed.  The following table lists the features for which both the short name and the version number are changed. To update one of these features for Jakarta EE 9.1, you must change both the feature short name and version number in your &lt;code&gt;server.xml&lt;/code&gt; file.&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;caption class=&quot;title&quot;&gt;Table 1. Jakarta EE 9.1 feature updates, short name and version&lt;/caption&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 33.3333%;&quot;&gt;
&lt;col style=&quot;width: 33.3333%;&quot;&gt;
&lt;col style=&quot;width: 33.3334%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Jakarta EE 9.1 feature name&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Java EE/Jakarta EE 8 short name and version&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Jakarta EE 9.1 short name and version&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Enterprise Beans&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;ejb-3.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;enterpriseBeans-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Enterprise Beans Home Interfaces&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;ejbHome-3.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;enterpriseBeansHome-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Enterprise Beans Lite&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;ejbLite-3.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;enterpriseBeansLite-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Enterprise Beans Persistent Timers&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;ejbPersistentTimer-3.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;enterpriseBeansPersistentTimer-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Enterprise Beans Remote&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;ejbRemote-3.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;enterpriseBeansRemote-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Expression Language&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;el-3.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;expressionLanguage-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Authorization&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jacc-1.5&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;appAuthorization-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Authentication&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jaspic-1.1&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;appAuthentication-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta EE Platform&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;javaee-8.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jakartaee-9.1&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta EE Application Client&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;javaeeClient-8.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jakartaeeClient-9.1&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Mail&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;javaMail-1.6&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mail-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta XML Binding&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jaxb-2.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;xmlBinding-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta RESTful Web Services&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jaxrs-2.1&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;restfulWS-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta RESTful Web Services Client&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jaxrsClient-2.1&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;restfulWSClient-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta XML Web Services&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jaxws-2.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;xmlWS-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Connectors&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jca-1.7&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;connectors-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Connectors Inbound Security&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jcaInboundSecurity-1.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;connectorsInboundSecurity-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Messaging&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jms-2.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;messaging-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Persistence&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jpa-2.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;persistence-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Persistence Container&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jpaContainer-2.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;persistenceContainer-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Server Faces&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsf-2.3&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;faces-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Server Faces Container&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsfContainer-2.3&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;facesContainer-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Jakarta Server Pages&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsp-2.3&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;pages-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Messaging Server Client&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;wasJmsClient-2.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;messagingClient-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Messaging Server Security&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;wasJmsSecurity-1.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;messagingSecurity-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;Messaging Server&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;wasJmsServer-1.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;messagingServer-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For a full overview of what has changed, visit the &lt;a href=&quot;/docs/latest/jakarta-ee9-feature-updates.html&quot;&gt;Jakarta EE 9.1 feature updates&lt;/a&gt; page.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the Jakarta EE 9.1 features, add the corresponding feature to your &lt;code&gt;server.xml&lt;/code&gt;. You can enable either the individual features you want or you can add the Jakarta EE 9.1 convenience features.  For example, to enable all of the Jakarta EE 9.1 features at once add:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9.1 Web Profile features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For details regarding the APIs and SPIs, check out the &lt;a href=&quot;/docs/latest/reference/javadoc/liberty-jakartaee9.1-javadoc.html&quot;&gt;Jakarta EE 9.1 javadoc&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;response_headers&quot;&gt;Configurable Response Headers&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can now configure Open Liberty to modify response headers.  The available configuration options allow for headers to be appended, for existing headers to be overwritten, for missing headers to be added, and for undesired headers to be removed from all responses being serviced by an HTTP endpoint. This configuration offers more granular control over response headers, which offers a solution to modifying headers without the need to change existing applications, filters, or otherwise.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use configurable response headers, begin by defining a new element called &lt;code&gt;&amp;lt;headers&amp;gt;&lt;/code&gt; in the &lt;code&gt;server.xml&lt;/code&gt;.  You can configure this for individual HTTP endpoints or for all endpoints at once.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Configuring for individual HTTP endpoints:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;httpEndpoint&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultHttpEndpoint&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                  &lt;span class=&quot;attribute-name&quot;&gt;httpPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9080&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                  &lt;span class=&quot;attribute-name&quot;&gt;httpsPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9443&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;headers&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;add&amp;gt;&lt;/span&gt;foo:bar&lt;span class=&quot;tag&quot;&gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;add&amp;gt;&lt;/span&gt;foo:bar2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;set&amp;gt;&lt;/span&gt;customHeader:customValue&lt;span class=&quot;tag&quot;&gt;&amp;lt;/set&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;setIfMissing&amp;gt;&lt;/span&gt;X-Forwarded-Proto:https&lt;span class=&quot;tag&quot;&gt;&amp;lt;/setIfMissing&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;remove&amp;gt;&lt;/span&gt;Via&lt;span class=&quot;tag&quot;&gt;&amp;lt;/remove&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/headers&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/httpEndpoint&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Configuring for all HTTP endpoints:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;httpEndpoint&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultHttpEndpoint&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                  &lt;span class=&quot;attribute-name&quot;&gt;httpPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9080&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                  &lt;span class=&quot;attribute-name&quot;&gt;httpsPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9443&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                  &lt;span class=&quot;attribute-name&quot;&gt;headersRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myHeadersID&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/httpEndpoint&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;httpEndpoint&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;otherHttpEndpoint&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                  &lt;span class=&quot;attribute-name&quot;&gt;httpPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9081&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                  &lt;span class=&quot;attribute-name&quot;&gt;httpsPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9444&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                  &lt;span class=&quot;attribute-name&quot;&gt;headersRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myHeadersID&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/httpEndpoint&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;headers&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myHeadersID&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;add&amp;gt;&lt;/span&gt;foo:bar&lt;span class=&quot;tag&quot;&gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;add&amp;gt;&lt;/span&gt;foo:bar2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;set&amp;gt;&lt;/span&gt;customHeader:customValue&lt;span class=&quot;tag&quot;&gt;&amp;lt;/set&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;setIfMissing&amp;gt;&lt;/span&gt;X-Forwarded-Proto:https&lt;span class=&quot;tag&quot;&gt;&amp;lt;/setIfMissing&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;remove&amp;gt;&lt;/span&gt;Via&lt;span class=&quot;tag&quot;&gt;&amp;lt;/remove&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/headers&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;add&lt;/code&gt; attribute allows multiple headers with the same name to be added to a response, similar to the HttpServletResponse&amp;#8217;s &lt;code&gt;addHeader&lt;/code&gt; API. Similarly, the &lt;code&gt;set&lt;/code&gt; attribute is analogous to the &lt;code&gt;setHeader&lt;/code&gt; API, which sets a response header to the given name and value. This overwrites existing headers that share the same name. The &lt;code&gt;setIfMissing&lt;/code&gt; attribute will only set the configured headers if they are not already present on the response. Lastly, the &lt;code&gt;remove&lt;/code&gt; attribute will remove any response headers whose name matches a name defined by the configuration.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Each header entry for the &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;set&lt;/code&gt;, and &lt;code&gt;setIfMissing&lt;/code&gt; attributes can be provided as a stand-alone header name. Optionally, a header value can be added by appending the colon &lt;code&gt;:&lt;/code&gt; character after every header name. Note, however, that the &lt;code&gt;remove&lt;/code&gt; attribute only expects header names and not a header name:value pair.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As seen in the example above, one way to configure the &lt;code&gt;&amp;lt;headers&amp;gt;&lt;/code&gt; element is to declare each individual header within it own &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;set&lt;/code&gt;, &lt;code&gt;setIfMissing&lt;/code&gt;, or &lt;code&gt;remove&lt;/code&gt; attribute. In addition to this configuration, headers can be provided as a comma delimited list.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following server.xml configuration declares individual headers within the desired configuration attributes:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;headers&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;add&amp;gt;&lt;/span&gt;foo:bar&lt;span class=&quot;tag&quot;&gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;add&amp;gt;&lt;/span&gt;foo:bar2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;set&amp;gt;&lt;/span&gt;customHeader:customValue&lt;span class=&quot;tag&quot;&gt;&amp;lt;/set&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;setIfMissing&amp;gt;&lt;/span&gt;X-Forwarded-Proto:https&lt;span class=&quot;tag&quot;&gt;&amp;lt;/setIfMissing&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;remove&amp;gt;&lt;/span&gt;Via&lt;span class=&quot;tag&quot;&gt;&amp;lt;/remove&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/headers&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This configuration can also be declared as comma delimited lists, such as:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;headers&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;add&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;foo:bar, foo:bar2&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;set&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;customHeader:customValue&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;setIfMissing&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;X-Forwarded-Proto:https&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;remove&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Via&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;There are three warning messages relating to misconfigurations for this feature. Note that if a configuration value is considered to be misconfigured, it will not be utilized. Furthermore, if the misconfigured value had a non-empty header name, any further configurations with this same name will also be ignored.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The first warning message, &lt;code&gt;CWWKT0042W&lt;/code&gt;, will be logged whenever a header name is left empty. While header values are completely optional, the configuration does expect a non-empty header name.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;add&lt;/code&gt; configuration allows for multiple headers with the same name to be configured. However, it would be ambiguous to repeat a header name in any other configuration attribute. For instance, consider the &lt;code&gt;set&lt;/code&gt; attribute option, which is meant to overwrite an existing header that shared the declared header name. If the &lt;code&gt;set&lt;/code&gt; configuration contained two headers with the same name, it would be unclear which of the two values should be chosen. Similarly, if the same header name is present in two or more configurations, the same ambiguity is true. As such, and excluding repetitions in the &lt;code&gt;add&lt;/code&gt; configuration, whenever a header name is found to be used more than once,  the warning message &lt;code&gt;CWWKT0043W&lt;/code&gt; will be logged.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The third warning message, &lt;code&gt;CWWKT0044W&lt;/code&gt;, is logged if a header that has already been flagged as a duplicate by the &lt;code&gt;CWWKT0043W&lt;/code&gt; warning message, continues to be utilized by further configurations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Warning Message Descriptions:&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;code&gt;CWWKT0042W&lt;/code&gt; : An empty header name was found when the 'set` configuration was parsed. This value is ignored.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;code&gt;CWWKT0043W&lt;/code&gt; : A duplicate header name was found in the [foo] header using the &lt;code&gt;set&lt;/code&gt; configuration. All configurations for the [foo] header are ignored. Any header that is defined by the remove, add, set, or setIfMissing configurations must be unique across all configurations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;code&gt;CWWKT0044W&lt;/code&gt; : The [foo] header, which is marked as a duplicate header name, was found in the &lt;code&gt;set&lt;/code&gt; configuration. The [foo] header is ignored. Any header that is defined by the &lt;code&gt;set&lt;/code&gt; configuration must contain unique header names.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty now provides a way to control response headers for a given HTTP endpoint. These can be appended, configured to overwrite, to only be added if not already present, or completely removed from all responses. Try it out for yourself!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;bugs&quot;&gt;Notable bugs fixed in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We’ve spent some time fixing bugs. The following sections describe just some of the issues resolved in this release. If you’re interested, here’s the  &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A210012+label%3A%22release+bug%22&quot;&gt;full list of bugs fixed in 21.0.0.12&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19087&quot;&gt;Throughput performance degradation in eclipselink due to Thread.getStackTrace calls&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We discovered an issue where a change to the &lt;code&gt;org.eclipse.persistence.internal.helper.ConcurrencyManager&lt;/code&gt; class caused a ~75% throughput performance degradation in eclipselink. This lost throughput was caused by calls to &lt;code&gt;Thread.getStackTrace()&lt;/code&gt;. This regression showed up for &lt;code&gt;jpa-2.2&lt;/code&gt; in 21.0.0.8 and &lt;code&gt;persistence-3.0&lt;/code&gt; in 21.0.0.9. This issue has now been fixed by removing the &lt;code&gt;getStackTrace()&lt;/code&gt; calls.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/17428&quot;&gt;MicroProfile OpenAPI 2.0 includes non-public fields in the generated documentation&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, when a schema was created for a class which includes a private field, the private field would be listed in the generated OpenAPI document, for example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Schema&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Example&lt;/span&gt; {
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; field1;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; field2;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;results in&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;  &lt;span class=&quot;key&quot;&gt;schemas&lt;/span&gt;:
    &lt;span class=&quot;key&quot;&gt;Example&lt;/span&gt;:
      &lt;span class=&quot;key&quot;&gt;type&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;object&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;key&quot;&gt;properties&lt;/span&gt;:
        &lt;span class=&quot;key&quot;&gt;field1&lt;/span&gt;:
          &lt;span class=&quot;key&quot;&gt;type&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;string&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;key&quot;&gt;field2&lt;/span&gt;:
          &lt;span class=&quot;key&quot;&gt;type&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;content&quot;&gt;string&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The field &lt;code&gt;field1&lt;/code&gt; should not have appeared in the generated OpenAPI document as it is private. This issue has been fixed by setting the &lt;code&gt;mp.openapi.extensions.smallrye.private-properties.enable&lt;/code&gt; property to disable non-public properties by default.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19057&quot;&gt;Port bind skipped at server startup&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previously, in an extremely rare scenario, configured ports could silently fail to bind - preventing Liberty from using them. This issue was caused by a subtle race condition in the code responsible for delaying the port bind until the server is ready to handle traffic.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the failing scenario, the port started message would not be emitted - for example the following message would be missing:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;code&gt;CWWKO0219I: TCP Channel defaultHttpEndpoint has been started and is now listening for requests on host *  (IPv4) port 9080.&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;and the following FFDC will be seen:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;no_copy&quot;&gt;Exception = java.lang.RuntimeException
Source = com.ibm.ws.tcpchannel.internal.NBAcceptChannelSelector
probeid = 254
Stack Dump = java.lang.RuntimeException: java.nio.channels.NotYetBoundException
        at com.ibm.ws.tcpchannel.internal.NBAcceptChannelSelector.performRequest(NBAcceptChannelSelector.java:358)
        at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:257)
        at java.base/java.lang.Thread.run(Thread.java:866)
Caused by: java.nio.channels.NotYetBoundException
        at java.base/sun.nio.ch.ServerSocketChannelImpl.begin(ServerSocketChannelImpl.java:246)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:283)
        at com.ibm.ws.tcpchannel.internal.NBAcceptChannelSelector.performRequest(NBAcceptChannelSelector.java:278)
        ... 2 more&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has now been fixed so that all configured ports should start, or if there is a problem some meaningful error message should be logged.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/18992&quot;&gt;Application fails to restart in server.xml update scenario&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We discovered an issue where an application would fail to restart, due to a race condition during server reconfiguration when multiple apps are installed. The problem occurs when one app starts before another app is finished uninstalling. In theory this shouldn&amp;#8217;t be a problem - however for this scenario these apps are sharing a VirtualHost configuration object, and in this case one app updates the parent VirtualHost as part of its uninstall process in such a way that the other gets into an invalid state. The server log will show a warning such as &lt;code&gt;CWWKZ0020I: Application &amp;lt;app_name&amp;gt; not updated&lt;/code&gt;. This issue was fixed by fixing the race condition that caused the failure.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/17599&quot;&gt;HTTP upgrade to WebSocket can cause quiesce errors&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When a WebSocket connection is started, it starts as an HTTP connection. Previously, If an error occurred during the transition between an HTTP and a WebSocket connection, which was known to be a WebSocket upgrade, the error processing would neglect to decrement a connection counter, which then caused the server to believe there is an open connection during server stop.
There were two scenarios where these quiesce errors would occur:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;When a read error occurred during the transition between an HTTP and a WebSocket connection, the error processing neglected to decrement a connection counter, which then causes the server to believe there is an open connection during server stop.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If a client immediately closed the WebSocket connection after it was opened, the original upgrade request handling may not have had enough time to close properly on the server. Once again, the connection counter failed to decrement leading the server to believe there is an open connection during the server stop.&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has been fixed by adding a new flag called &lt;code&gt;decrementNeeded&lt;/code&gt; which helps to ensure that the decrement is not neglected.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19227&quot;&gt;Ensure ServletRequestListener#requestDestroyed is always called&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We discovered a bug where the &lt;code&gt;ServletRequestListener#requestDestroyed&lt;/code&gt; call does not occur, if an exception occurs during async servlet while an &lt;code&gt;appSecurity-x.0&lt;/code&gt; is enabled. For this bug to occur, two conditions must be met: the &lt;code&gt;webContainer&lt;/code&gt; property &lt;code&gt;deferServletRequestListenerDestroyOnError&lt;/code&gt; is true and an &lt;code&gt;appSecurity-x.0&lt;/code&gt; feature is enabled. This issue has now been resolved.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/19197&quot;&gt;ClassCastException in JSP relating to JDT internal classes&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 21.0.0.9 introduced a bug where the following error occurred for certain class lookups in JSP:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;Error 500: java.lang.ClassCastException: class org.eclipse.jdt.internal.compiler.lookup.PlainPackageBinding cannot be cast to class org.eclipse.jdt.internal.compiler.lookup.TypeBinding (org.eclipse.jdt.internal.compiler.lookup.PlainPackageBinding and org.eclipse.jdt.internal.compiler.lookup.TypeBinding are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @3522bc53)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This issue has now been fixed.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;guides&quot;&gt;New and updated guides since the previous release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As Open Liberty features and functionality continue to grow, we continue to add &lt;a href=&quot;https://openliberty.io/guides/?search=new&amp;amp;key=tag&quot;&gt;new guides&lt;/a&gt; to &lt;a href=&quot;http://openliberty.io/&quot;&gt;openliberty.io&lt;/a&gt; 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.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/maven-multimodules.html&quot;&gt;Creating a multi-module application&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Previously the guide demonstrated how to build an application with multiple modules using Maven and Open Liberty.  With this update, it now also introduces how to use the &lt;a href=&quot;https://github.com/OpenLiberty/ci.maven&quot;&gt;Liberty Maven plug-in&lt;/a&gt; to develop a multi-module application in development mode without having to prebuild the JAR and WAR files.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-open-liberty-21-0-0-12-now&quot;&gt;Get Open Liberty 21.0.0.12 now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Available through &lt;a href=&quot;#run&quot;&gt;Maven, Gradle, Docker, and as a downloadable archive&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 26 Nov 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/11/26/jakarta-ee-9.1-210012.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/11/26/jakarta-ee-9.1-210012
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>jakarta-ee</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Meet our open source champions: Andy McCright, Web Services Architect</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this blog series, we’re highlighting some of the amazing individuals who contribute to Open Source software (OSS). We’ll delve into their contributions within OSS, their career journey, how OSS involvement has helped them, and their advice to others for getting involved.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Andy has worked for IBM as an Enterprise Java developer for around 20 years. In that time, he&amp;#8217;s worked on various projects, but mostly around &lt;a href=&quot;https://www.ibm.com/cloud/websphere-liberty&quot;&gt;WebSphere Liberty Application Server&lt;/a&gt; – and currently on &lt;a href=&quot;https://openliberty.io/&quot;&gt;Open Liberty&lt;/a&gt;. Andy is now a Web Services Architect. He enjoys open source software and contributes to many projects, including Open Liberty, &lt;a href=&quot;https://cxf.apache.org/&quot;&gt;Apache CXF&lt;/a&gt;, RESTEasy, &lt;a href=&quot;https://jakarta.ee/specifications/restful-ws/&quot;&gt;Jakarta RESTful Web Services&lt;/a&gt;, and &lt;a href=&quot;https://microprofile.io/&quot;&gt;MicroProfile &amp;#8482;&lt;/a&gt; (specifically the Rest Client and GraphQL). &lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/AndyMcCright-1.png&quot; alt=&quot;Cartoon Illustration of Andy McCright&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;tech-introduction&quot;&gt;Tech introduction:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://jakarta.ee/specifications/restful-ws/&quot;&gt;Jakarta RESTful Web Services&lt;/a&gt;, &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-rest-client-2.0/microprofile-rest-client-spec-2.0.html&quot;&gt;MicroProfile Rest Client&lt;/a&gt; and &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-graphql-1.0/microprofile-graphql.html&quot;&gt;MicroProfile GraphQL&lt;/a&gt; are all specification projects. That means that the projects don&amp;#8217;t produce anything that is directly usable by an end user, but rather provides APIs for users and rules/guidelines for other projects to implement and provides a compatibility test suite (TCK) for verifying that implementing projects are compatible. These other projects can implement things beyond the specification or simply differentiate themselves by performance or footprint, etc. This allows users to code to the specification APIs, but choose an implementation that best fits their needs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta RESTful Web Services (formerly known as JAX-RS) is a specification/API for developing Java RESTful services, primarily using annotations to mark which classes/methods should be invoked when a client makes a specific REST request over HTTP. While it contains some client-side APIs, the MicroProfile Rest Client takes a different and perhaps more user-friendly approach to consuming RESTful services. MicroProfile GraphQL uses a similar annotation approach to JAX-RS, but implements an alternative to the REST architecture that features a query-language allowing clients to specify exactly the data they want to see, saving bandwidth and client-side processing.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Apache CXF and RESTEasy are two different implementations of Jakarta RESTful Web Services and the MicroProfile Rest Client. CXF actually implements many other specifications. Both are modular, so you can choose which pieces of these products you need (i.e. JAX-RS client only vs full JAX-RS server implementation).
&lt;a href=&quot;https://github.com/smallrye/smallrye-graphql&quot;&gt;SmallRye GraphQL&lt;/a&gt; is an implementation of the MicroProfile GraphQL specification. It was founded by RedHat and IBM.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;All of these technologies are packaged as part of Open Liberty. For developers who want to pick and choose, they can use Liberty&amp;#8217;s feature manager to specify only the features they want. This can reduce footprint as well as server startup performance.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of contents:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#projects&quot;&gt;What projects have you worked on since joining IBM?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#encouraged&quot;&gt;What encouraged you to get started with open source projects? How does working on an open-source community project like this compare to working on a proprietary project?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#impact&quot;&gt;How has your involvement in open-source projects impacted upon your work or impacted you personally?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#roleChange&quot;&gt;How has your role changed since getting involved in open-source? What impact have you been able to have within IBM through your role/involvement?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#architect&quot;&gt;What is involved in being a web services architect? What are your favourite parts of this role?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#GraphQL&quot;&gt;How did you get involved in GraphQL? Why did you select this particular API to become involved with within the MicroProfile specification?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#inspiration&quot;&gt;As someone who creates many blogs, tutorials, and presentations about these OSS technologies, what motivates or inspires you to create these? What do you gain from these additional advocacy activities?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#book&quot;&gt;What inspired/motivated you to co-author your new book, 'Practical Cloud-Native Java Development with MicroProfile'? What does this book offer developers?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#advice&quot;&gt;What advice would you give to developers that are interested in getting started with an open-source project?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#fun&quot;&gt;Some Fun Questions&amp;#8230;&amp;#8203;&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#food&quot;&gt;Favorite food?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#music&quot;&gt;Music you&amp;#8217;re listening to?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#outside&quot;&gt;What do you do when you&amp;#8217;re not coding/blogging/etc.?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#blog&quot;&gt;Where do you blog?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#tools&quot;&gt;Favorite tools?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#os&quot;&gt;Mac, Windows or Linux?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;qa&quot;&gt;Q&amp;amp;A:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;projects&quot;&gt;What projects have you worked on since joining IBM?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Mostly WebSphere Application Server (WAS).  I started IBM in 2000 on a specialized systems integration testing team for WAS. Since then, I&amp;#8217;ve worked in various different development and support groups, with a brief stint in WebSphere eXtreme Scale. After WXS, I moved back to the WAS org, but mainly focused on WebSphere Liberty and a lesser-known (and now extinct) project called WAS Community Edition (based on Apache Geronimo). Now I primarily work on Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;encouraged&quot;&gt;What encouraged you to get started with open source projects? How does working on an open-source community project like this compare to working on a proprietary project?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To be honest, open source software was a little frightening for me at first. It&amp;#8217;s one thing to write code that only a few of your peers can see. It&amp;#8217;s another thing to write code that the whole world can see (and critique!). What helped me to get started was an experienced mentor who would pre-review my changes before I submitted them to the community. This helped to build my confidence - similar to training wheels when learning to ride a bike. Eventually, the training wheels came off and I was part of the community.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I think open source and proprietary projects really aren&amp;#8217;t that different anymore. Even proprietary projects use a lot of open source paradigms - like reporting issues in trackers like JIRA, and document their projects using wikis, and track source code changes using Git, etc. Probably the biggest difference between open source projects and proprietary projects is the culture. In proprietary projects like WAS or WXS, there was a single culture, set of tools, etc. But when you work with different open source projects, you may end up using different tools - one project might want to communicate over email lists while another may prefer Slack or Gitter. You end up working with people from different companies in different countries and timezones.  &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;impact&quot;&gt;How has your involvement in open-source projects impacted upon your work or impacted you personally?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In a way, I think it has made me more worldly. I&amp;#8217;ve built professional (and in some cases personal) relationships with people from multiple continents. I&amp;#8217;ve learned a lot, like how to use new coding practices, improved tooling, and working with different personalities. I&amp;#8217;ve also enjoyed the direct interaction with users.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;roleChange&quot;&gt;How has your role changed since getting involved in open-source? What impact have you been able to have within IBM through your role/involvement?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Early in my career, I got some great advice (if a little buzzwordy&amp;#8230;&amp;#8203;): build your brand; &quot;be the &lt;em&gt;&lt;em&gt;&lt;/em&gt;&lt;/em&gt; guy&quot;. A few years ago, my management team asked me to lead the JAX-RS team for IBM. I had to learn a lot about REST and how we implemented it in a short time. This got me involved in the Apache CXF project, where I&amp;#8217;ve carved a small niche - mostly JAX-RS and later MicroProfile Rest Client. I&amp;#8217;m starting to create a similar niche with RESTEasy. I&amp;#8217;ve also become IBM&amp;#8217;s representative to the open source specification projects for Jakarta RESTful Web Services (the new name for JAX-RS) and MicroProfile Rest Client. In effect, I&amp;#8217;ve become the &quot;REST guy&quot;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/AndyMcCright-2.png&quot; alt=&quot;Andy presenting about JAX-RS&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;My role has definitely changed from one that primarily fixed bugs to one that creates new features. My role has also added new facets, like advocacy. I&amp;#8217;ve been doing a lot more work-related social media (Twitter, LinkedIn, blogging) in concert with open source development. I&amp;#8217;ve really enjoyed that aspect of my job. It&amp;#8217;s also now super-easy to create a new feature and then demo it on GitHub and blog about it with links to the source code. I think that really helps our users out - they know what our products can do and can see it working - and if they run into problems, they can talk directly with us over GH issues or StackOverflow, etc.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;architect&quot;&gt;What is involved in being a web services architect? What are your favorite parts of this role?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;More meetings&amp;#8230;&amp;#8203; :-) Aside from the meetings, there is a lot of flexibility in my role. Some days, I&amp;#8217;ll work on product defects, while others I might help write documentation, and still others I might try to hype some new feature that our team recently delivered. It definitely involves working with a lot of people . For a generally introverted person like me, it&amp;#8217;s strange, but I kinda like that. 
There&amp;#8217;s a lot to like about my role. I like writing blog posts - more the how-to stuff than the marketing stuff, but I like both.  I also like the feeling of accomplishment when completing a new feature, particularly when it is one that solves a real user problem.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;GraphQL&quot;&gt;How did you get involved in GraphQL? Why did you select this particular API to become involved with within the MicroProfile specification?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Our chief architect went to a conference where an attendee asked about GraphQL. He said, &quot;we&amp;#8217;re planning to work on that&quot;. When it was almost time for the same conference the next year, he pulled me aside and said, &quot;can you work on this so that when I see this user again, I won&amp;#8217;t be a liar?&quot; I did a little research into GraphQL and found it to be a very interesting technology.  It seemed to have a large following in languages like JavaScript, but not so much in Java. I considered just adding a GraphQL implementation directly in Open Liberty, but I figured that it would be better to get more buy-in from others in the industry, and I found a few folks who were interested in GraphQL who had already posted on the MicroProfile mail list. We got together and built a sandbox implementation of GraphQL, and eventually built a fully supported release.  Now users can develop GraphQL applications in Java and run them in Liberty, Wildfly, Quarkus and Helidon. &lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In fact, if you&amp;#8217;d like to learn more about MicroProfile GraphQL, then check out &lt;a href=&quot;https://techtv.bemyapp.com/#/conference/60341786279947001bddc6a8&quot;&gt;my IBM ExpertTV Episode&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/AndyMcCright-3.png&quot; alt=&quot;Andy presenting on GraphQL&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;inspiration&quot;&gt;As someone who creates many blogs, tutorials, and presentations about these OSS technologies, what motivates or inspires you to create these? What do you gain from these additional advocacy activities?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I enjoy writing. I&amp;#8217;m sure that in some alternate universe, I ended up as a bestselling novelist instead of a software engineer. But aside from the sheer enjoyment of writing, I like to blog or write tutorials to share my knowledge and help people. I suppose it&amp;#8217;s a bit like giving back. I also like to blog as it helps with my brand, as I mentioned earlier. That certainly helps my career. While I&amp;#8217;m not really looking for a new job at the moment, if things changed, it should certainly help my prospects if a potential employer can google my name and find a bunch of blog posts and links to projects I&amp;#8217;ve worked on, etc.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/AndyMcCright-4.png&quot; alt=&quot;Andy&amp;#8217;s blogs on Dev.to&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt; 
I get less enjoyment from presentations - and quite honestly, that&amp;#8217;s a stretch for me as I have a bit of stage-fright.  But I do that for a few different reasons. (1) I think it is an expected part of my job. (2) It certainly helps with my personal brand, and (3) I also enjoy traveling - so this provides a great way to visit some amazing locations. On that point, I&amp;#8217;ve been extremely fortunate at IBM to have been able to travel to conferences or user groups in Vienna, Paris/Toulouse, Beijing, Johannesburg, New York, Las Vegas, San Jose, and Minneapolis.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;book&quot;&gt;What inspired/motivated you to co-author your new book, &lt;em&gt;Practical Cloud-Native Java Development with MicroProfile&lt;/em&gt;? What does this book offer developers?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I hope I&amp;#8217;m not sounding like a broken record by this point, but I really like to write! :-) Emily Jiang had been in communication with Packt Publishing and had worked out a rough plan for a book on MicroProfile development. This is one example where &quot;personal brand&quot; pays off, as Emily recognized me as &quot;the REST guy&quot; and asked me to help with some of the chapters related to JAX-RS, MicroProfile Rest Client, GraphQL, etc. I was thrilled to accept!
The book offers deep advice for developing with the MicroProfile APIs and technologies, but also the best practices for building, deploying, monitoring and maintaining applications in the cloud. My co-authors bring a lot of depth in their subject areas, and we use a real-world application to demonstrate MicroProfile.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re interested in reading this book, then head over to &lt;a href=&quot;https://www.packtpub.com/product/practical-cloud-native-java-development-with-microprofile/9781801078801&quot;&gt;Packt&amp;#8217;s website&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/AndyMcCright-5.png&quot; alt=&quot;Andy&amp;#8217;s book &amp;quot;Practical Cloud-Native Java Development with MicroProfile&quot; width=&quot;40%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;advice&quot;&gt;What advice would you give to developers that are interested in getting started with an open-source project? &lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;(1) Be patient. It will take a while - and usually a lot of contributions over an extended time before a project will make you a committer.
(2) Set realistic goals and expectations. If your goal is to suggest improvements for a product that you use (but not actually implement the improvement yourself), you might need to adjust expectations for when that new feature might be implemented.
(3) Be willing to do jobs nobody else wants to do. For many open source projects, that will probably be documentation or testing. Most people want to write the code, and that&amp;#8217;s great, but for an open source project to succeed, it will need some quality assurance, documentation, and people answering user questions in the mail lists, forums, etc. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;fun&quot;&gt;Some Fun Questions&amp;#8230;&amp;#8203;&lt;/h3&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;food&quot;&gt;Favorite food?&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Pizza - yep, I&amp;#8217;m in my early 40s but I still eat like a college freshman&amp;#8230;&amp;#8203; :)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;music&quot;&gt;Music you&amp;#8217;re listening to?&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Right now, I&amp;#8217;m pretty hooked on a band called &lt;a href=&quot;https://www.remedydrive.com/&quot;&gt;Remedy Drive&lt;/a&gt; - they&amp;#8217;ve got an Imagine Dragons vibe.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;outside&quot;&gt;What do you do when you&amp;#8217;re not coding/blogging/etc.?&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;My wife and three kids keep me pretty busy. I&amp;#8217;m also pretty active in my church. I play electric bass on the praise team and try to manage the scheduling - ironically, I do a bit of RESTful programming to interact with the church&amp;#8217;s scheduling software! I also play recreational volleyball. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;blog&quot;&gt;Where do you blog?&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;My personal blog site is &lt;a href=&quot;https://andymc12.net/&quot; class=&quot;bare&quot;&gt;https://andymc12.net/&lt;/a&gt;, but I also have blog posts on &lt;a href=&quot;https://openliberty.io/blog/&quot;&gt;the Open Liberty blog&lt;/a&gt;, &lt;a href=&quot;https://dzone.com/users/3428734/andymc12.html&quot;&gt;DZone&lt;/a&gt;, and &lt;a href=&quot;https://dev.to/andymc12&quot;&gt;DEV&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;tools&quot;&gt;Favorite tools?&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I code in VS Code (favorite) and Eclipse. I like Git and GitHub. For diagnosing problems with REST and GraphQL, I really like &lt;a href=&quot;https://github.com/vakuum/tcptunnel&quot;&gt;tcptunnel&lt;/a&gt;. It&amp;#8217;s a simple proxy-like tool that will display the HTTP data sent over the wire, but less invasive than things like WireShark. I&amp;#8217;m a big fan of Slack - it&amp;#8217;s basically replaced email for me. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;os&quot;&gt;Mac, Windows or Linux?&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Mac. I used Linux before that - it&amp;#8217;s more customizable and more hard-core nerdish, but I think Mac is a little more polished - and fewer kernel rebuilds. :-)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;getting-started-with-open-source&quot;&gt;Getting started with open source&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If this article has helped inspire you to get started contributing to open source, why not consider contributing to Open Liberty? It&amp;#8217;s easy to get started: &lt;a href=&quot;https://openliberty.io/contribute/&quot; class=&quot;bare&quot;&gt;https://openliberty.io/contribute/&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Mon, 15 Nov 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/11/15/AndyMcCright_MeetTheTeam.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/11/15/AndyMcCright_MeetTheTeam
          
        </guid>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>MicroProfile 5.0 aligns with Jakarta EE 9.1 and MicroProfile OpenAPI support for multi-module applications in 21.0.0.12-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 21.0.0.12-beta supports some of MicroProfile 5.0 features to align with the Jakarta EE 9.1, allowing you to use MicroProfile together with Jakarta EE 9.1 applications. This release also features updates to MicroProfile OpenAPI, as it provides support for multiple applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a larger package that contains all Open Liberty beta features (including Jakarta EE 9 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp_jwt&quot;&gt;MicroProfile JWT 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp_health&quot;&gt;MicroProfile Health 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp_metrics&quot;&gt;MicroProfile Metrics 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp_openapi&quot;&gt;MicroProfile Open API 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp_ft&quot;&gt;MicroProfile Fault Tolerance 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp_config&quot;&gt;MicroProfile Config 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mpOpenApi_multiple_apps&quot;&gt;Support multiple applications in mpOpenApi-2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mp_jwt&quot;&gt;MicroProfile JWT 2.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With this beta, the MicroProfile JSON Web Token 2.0 feature replaces &lt;code&gt;javax&lt;/code&gt; with &lt;code&gt;jakarta&lt;/code&gt; in Jakarta package names allowing it to be used for Jakarta EE 9.1 applications.
The old MicroProfile JSON Web Token 1.2 feature does not provide support for Jakarta EE 9.1 applications. Enabling &lt;code&gt;mpJwt-2.0&lt;/code&gt; instead of &lt;code&gt;mpJwt-1.2&lt;/code&gt; will allow those applications to use the MicroProfile JSON Web Token 2.0 feature.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the MicroProfile JSON Web Token 2.0 feature by using the &lt;code&gt;mpJwt-2.0&lt;/code&gt; feature in the server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpJwt-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;All the attributes of the &lt;code&gt;mpJwt&lt;/code&gt; element and all the current MP Config properties from the MP JWT 1.2 specification remain the same.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To find out more visit:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-jwt-auth-2.0-RC2/microprofile-jwt-auth-spec-2.0-RC2.html&quot;&gt;MicroProfile JWT 2.0 Specification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-jwt-auth/releases/tag/2.0-RC2&quot;&gt;MicroProfile JWT 2.0 Release Page&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-jwt-auth-2.0-RC2/microprofile-jwt-auth-spec-2.0-RC2.html#release_notes_20&quot;&gt;Release Notes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mp_health&quot;&gt;MicroProfile Health 4.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This feature &lt;code&gt;mpHealth-4.0&lt;/code&gt; is the implementation of the Eclipse MicroProfile Health 4.0 release, which aligns with Jakarta EE 9.1. This feature replaces javax with jakarta in Jakarta package names allowing it to be used for Jakarta EE 9.1 applications. There is no other functional changes introduced in this feature.
With this feature, you can use MicroProfile together with Jakarta EE 9.1, whereas in prior releases and versions of MicroProfile Health were for the Java EE platform and did not provide support for Jakarta EE 9.1 applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the MicroProfile Health 4.0 feature by using the &lt;code&gt;mpHealth-4.0&lt;/code&gt; feature in the server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpHealth-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To find out more visit:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-health-4.0-RC3/microprofile-health-spec-4.0-RC3.html&quot;&gt;MicroProfile Health 4.0 Specification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-health/releases/tag/4.0-RC3&quot;&gt;MicroProfile Health 4.0 Release Page&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-health-4.0-RC3/microprofile-health-spec-4.0-RC3.html#release_notes_4_0&quot;&gt;Release Notes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mp_metrics&quot;&gt;MicroProfile Metrics 4.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The MicroProfile Metrics 4.0 feature is the implementation of the Eclipse MicroProfile Metrics 4.0 release. This release (and feature) replaces &lt;code&gt;javax&lt;/code&gt; with &lt;code&gt;jakarta&lt;/code&gt; in Jakarta package names allowing it to be used for Jakarta EE 9.1 applications. Prior releases and versions of MicroProfile metrics were for the Java EE or Jakata EE 8 platform releases. This latest v4.0 release aligns with the Jakarta EE 9.1 platform release.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the MicroProfile Metrics 4.0 feature by using the &lt;code&gt;mpMetrics-4.0&lt;/code&gt; feature in the server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpMetrics-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To find out more visit:
* &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-metrics-4.0-RC4/microprofile-metrics-spec-4.0-RC4.html&quot;&gt;MicroProfile Metrics 4.0 Specification&lt;/a&gt;
* &lt;a href=&quot;https://github.com/eclipse/microprofile-metrics/releases/tag/4.0-RC4&quot;&gt;MicroProfile Metrics 4.0 Release Page&lt;/a&gt;
* &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-metrics-4.0-RC4/microprofile-metrics-spec-4.0-RC4.html#_release_notes&quot;&gt;Release Notes&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mp_openapi&quot;&gt;MicroProfile Open API 3.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This feature &lt;code&gt;mpOpenAPI-3.0&lt;/code&gt; is the implementation of MicroProfile OpenAPI 3.0, which aligns with Jakarta EE 9.1. There is no other functional changes introduced in this feature.
With this feature, you can use MicroProfile Open API together with Jakarta EE 9.1.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the MicroProfile Open API 3.0 feature by using the &lt;code&gt;mpOpenAPI-3.0&lt;/code&gt; feature in the server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpOpenAPI-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To find out more visit:
* &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-open-api-3.0-RC3/microprofile-openapi-spec-3.0-RC3.html&quot;&gt;MicroProfile OpenAPI 3.0 Specification&lt;/a&gt;
* &lt;a href=&quot;https://github.com/eclipse/microprofile-open-api/releases/tag/3.0-RC3&quot;&gt;MicroProfile OpenAPI 3.0 Release Page&lt;/a&gt;
* &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-open-api-3.0-RC4/microprofile-openapi-spec-3.0-RC4.html#release_notes_20&quot;&gt;Release Notes&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mp_ft&quot;&gt;MicroProfile Fault Tolerance 4.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This feature &lt;code&gt;mpFaultTolerance-4.0&lt;/code&gt; is the implementation of MicroProfile Fault Tolerance 4.0, which aligns with Jakarta EE 9.1. There is no other functional changes introduced in this feature.
With this feature, you can use MicroProfile together with Jakarta EE 9.1.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the MicroProfile Fault Tolerance 4.0 feature by using the &lt;code&gt;mpFaultTolerance-4.0&lt;/code&gt; feature in the server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpFaultTolerance-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To find out more visit:
* &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-fault-tolerance-4.0-RC5/microprofile-fault-tolerance-spec-4.0-RC5.html&quot;&gt;MicroProfile Fault Tolerance 4.0 Specification&lt;/a&gt;
* &lt;a href=&quot;https://github.com/eclipse/microprofile-fault-tolerance/releases/tag/4.0-RC5&quot;&gt;MicroProfile Fault Tolerance 4.0 Release Page&lt;/a&gt;
* &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-fault-tolerance-4.0-RC5/microprofile-fault-tolerance-spec-4.0-RC5.html#release_notes_40&quot;&gt;Release Notes&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mp_config&quot;&gt;MicroProfile Config 3.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This feature &lt;code&gt;mpConfig-3.0&lt;/code&gt; is the implementation of MicroProfile Config 3.0, which aligns with Jakarta EE 9.1. There is no other functional changes introduced in this feature.
With this feature, you can use MicroProfile together with Jakarta EE 9.1.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can enable the MicroProfile Config 3.0 feature by using the &lt;code&gt;mpConfig-3.0&lt;/code&gt; feature in the server.xml file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpConfig-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To find out more visit:
* &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-config-3.0-RC5/microprofile-config-spec-3.0-RC5.html&quot;&gt;MicroProfile Config 3.0 Specification&lt;/a&gt;
* &lt;a href=&quot;https://github.com/eclipse/microprofile-config/releases/tag/3.0-RC5&quot;&gt;MicroProfile Config 3.0 Release Page&lt;/a&gt;
* &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-config-3.0-RC5/microprofile-config-spec-3.0-RC5.html#release_notes_30&quot;&gt;Release Notes&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mpOpenApi_multiple_apps&quot;&gt;Support multiple applications in mpOpenApi-2.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile OpenAPI helps you document the REST endpoints of your application by creating and serving documentation in the OpenAPI format.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile OpenAPI can now create OpenAPI documentation for more than one application. Previously, only the first deployed web module which included a JAX-RS application would be documented. When two or more web modules containing JAX-RS applications are deployed, the MicroProfile OpenAPI feature can now create documentation for each of them and then merge that documentation together.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable this functionality, you must set the MicroProfile Config property &lt;code&gt;mp.openapi.extensions.liberty.merged.include=all&lt;/code&gt;, e.g. by adding this to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;variable&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mp.openapi.extensions.liberty.merged.include&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With this property set, deploy several JAX-RS applications and visit &lt;code&gt;/openapi/ui&lt;/code&gt; on your Open Liberty server where you should see documentation for all the applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following MP Config properties can be used to configure this feature:&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 25%;&quot;&gt;
&lt;col style=&quot;width: 25%;&quot;&gt;
&lt;col style=&quot;width: 25%;&quot;&gt;
&lt;col style=&quot;width: 25%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Name&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Description&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Default&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Values&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;code&gt;mp.openapi.extensions.liberty.merged.include&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;List of modules which should be included in the merged OpenAPI documentation&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;code&gt;first&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;all&lt;/code&gt; (to include all applications)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;first&lt;/code&gt; (to include only the first web module deployed, matching the previous behavior)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;comma-separated list of &lt;code&gt;&amp;lt;appname&amp;gt;&lt;/code&gt; (to include individual applications) and &lt;code&gt;&amp;lt;appname&amp;gt;/&amp;lt;modulename&amp;gt;&lt;/code&gt; (to include individual modules within an EAR)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;code&gt;mp.openapi.extensions.liberty.merged.exclude&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;List of modules which should be excluded from the merged OpenAPI documentation&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Takes priority over the list of included modules&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;code&gt;none&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;none&lt;/code&gt; (to exclude nothing)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;comma-separated list of &amp;lt;appname&amp;gt; (to exclude individual applications) and &amp;lt;appname&amp;gt;/&amp;lt;modulename&amp;gt; (to exclude individual modules within an EAR)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;&lt;code&gt;mp.openapi.extensions.liberty.merged.info&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;This property sets the info section of the final Open API document&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;N/A&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The value must be a valid OpenAPI info section in JSON format. If this property is set, the info section in the final OpenAPI document is replaced with the value of the property. This replacement is made after any merging is completed.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 17, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.12-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[21.0.0.12-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty is the first vendor product to be Jakarta EE Web Profile 9.0 compatible since the 21.0.0.2-beta release. Open Liberty is also the first vendor product to be added to the &lt;a href=&quot;https://jakarta.ee/compatibility/#tab-9&quot;&gt;Jakarta EE Platform 9.0 compatibility list&lt;/a&gt;, with the release of 21.0.0.3-beta.  That same beta release was then also used to add Open Liberty to the &lt;a href=&quot;https://jakarta.ee/compatibility/#tab-9_1&quot;&gt;Jakarta EE Platform 9.1 compatibility list&lt;/a&gt;.
Open Liberty 21.0.0.6-beta further expanded on this compatability by including new Jakarta EE9 supporting features, and 21.0.0.12-beta offers the same compatability with Jakarta EE9 with performance enhancements.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9 beta features in your app&amp;#8217;s &lt;code&gt;server.xml&lt;/code&gt;. You can enable the individual features you want or you can just add the Jakarta EE 9 convenience feature to enable all of the Jakarta EE 9 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now-2&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9 Beta Features package instead of the main release. The beta works with Java SE 17, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.12-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[21.0.0.12-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 02 Nov 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/11/02/microprofile-jakarta-210012-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/11/02/microprofile-jakarta-210012-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>A Fun Cup of Joe - Find Out Why Open Liberty is Your Next Cloud Native Java Runtime</title>
        <description>&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;why-open-liberty&quot;&gt;Why Open Liberty?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I recently had the opportunity to lead a discussion at a meeting of the Philadelphia Java User Group (JUG) meetup where I highlighted the latest features and design ideas contained within Open Liberty. As part of that discussion I ran two demos where I created and interacted with an Open Liberty-hosted RESTful web service as an application developer - both in a local developer environment and live in a remote Kubernetes cluster environment. As the popularity of a microservice architecture and cloud-native application development experience grows, it is an exciting time to talk about the Open Liberty framework&amp;#8217;s support of those models.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/cupofjoe.png&quot; alt=&quot;A Fun Cup Of Joe&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The presentation focused on how Open Liberty highly optimizes the development of microservices by using Eclipse MicroProfile and Jakarta EE APIs. To highlight Open Liberty as a flexible, fast, and lightweight Java runtime, the discussion touched on important Open Liberty framework design attributes such as:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Simple configuration enabling &quot;Just Enough Runtime&quot; which allows for the configuration of only the subset of features an application needs at runtime&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Low operating cost due to a reduced memory footprint based on that minimal configuration&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Zero migration&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Kubernetes optimizations&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;An efficient rapid developer experience&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Additionally, the fact that Open Liberty supports the deployment of Spring Boot applications generated an enthusiastic question from a member of the audience interested in understanding how Open Liberty could help a shop with hundreds of Spring Boot applications become more efficient.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;open-liberty-in-action&quot;&gt;Open Liberty in Action&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The second half of the Open Liberty overview detailed its rich developer experience through Open Liberty&amp;#8217;s support of rapid development using a tight inner-loop experience that&amp;#8217;s provided by the Liberty Maven Plugin. In the first demo, code and configuration updates were shown to take place immediately in a local running Open Liberty runtime instance that was managed by the Liberty Maven Plugin on behalf of the developer, with test cases running to automatically provide immediate developer feedback. In the second demo, Open Liberty&amp;#8217;s Kubernetes integration points were demonstrated, showing that same developer inner-loop experience occurring in a remote development cluster hosted in a Red Hat OpenShift environment.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Feel free to check out video segments of the discussion at the following links:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/h-OrANJInnk&quot;&gt;Open Liberty Overview&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/qvoEhgw90Ig&quot;&gt;Demo 1 - Developing locally with Open Liberty&amp;#8217;s dev mode&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;By demonstrating a Java RESTful application being enhanced locally in an IDE, the participants were able to see the quick turnaround time developers can achieve using the &lt;a href=&quot;https://openliberty.io/docs/21.0.0.10/development-mode.html&quot;&gt;dev mode&lt;/a&gt; feature of the Liberty Maven Plugin.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/nX3M04zNNNw&quot;&gt;Open Liberty and Kubernetes Optimizations&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/vTjwaersm-0&quot;&gt;Demo 2 - Developing live in a Kubernetes environment with Open Liberty&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Participants were able to observe in real-time the effect of an application code update being reflected automatically in a remote Kubernetes cluster by using the OpenShift Do (odo) tool and the &lt;a href=&quot;https://github.com/OpenLiberty/devfile-stack&quot;&gt;java-openliberty development stack&lt;/a&gt;, in conjunction with the same Liberty Maven Plugin to manage the OpenShift interactions on the developer&amp;#8217;s part.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/Dv063vQsYJY&quot;&gt;Open Liberty Summary&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Philadelphia JUG meetup presentation was well attended with 35+ attendees joining via the meetup&amp;#8217;s web conferencing tool. The host of the meetup was excited for the group to hear about the strengths of Open Liberty and its developer experience, and I was happy for the opportunity to speak with them. If your group is interested in hearing more, please feel free to reach out to &lt;a href=&quot;https://twitter.com/yeekangc&quot;&gt;YK and team&lt;/a&gt; to schedule a similar discussion at any time.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 26 Oct 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/10/26/openliberty-jug-presentation.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/10/26/openliberty-jug-presentation
          
        </guid>
        
        <category>microprofile</category>
        
        <category>maven</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Meet our open-source champions: Kathryn Kodama, Developer Experience Champion</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this blog series, we’re highlighting some of the amazing individuals who contribute to Open Source software (OSS). We’ll delve into their contributions within OSS, their career journey, how OSS involvement has helped them, and their advice to others for getting involved.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Kathryn is a software developer on the Open Liberty Developer Experience team at IBM Canada. She has contributed to a number of open-source projects within the &lt;a href=&quot;https://microprofile.io/&quot;&gt;MicroProfile &amp;#8482;&lt;/a&gt; and &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Jakarta EE &amp;#8482;&lt;/a&gt; community, such as the Language Server for MicroProfile (Eclipse LSP4MP), the Language Server for Jakarta EE (Eclipse LSP4Jakarta), and the MicroProfile Starter for &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;Visual Studio Code&lt;/a&gt; (VS Code). Kathryn has also contributed to the development of dev mode for &lt;a href=&quot;https://openliberty.io/&quot;&gt;OpenLiberty&lt;/a&gt;, and corresponding editor plugins.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/KathrynKodama-1.png&quot; alt=&quot;Headshot of Kathryn Kodama&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;tech-introduction&quot;&gt;Tech introduction:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Recently, Kathryn has been working on and contributing to the following projects:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty Dev Mode is a hot deployment tool that is made available as a goal of the Liberty Maven plug-in or as a task of the Liberty Gradle plug-in. This enables developers to iterate quickly when developing their cloud-native Java applications with Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/eclipse/lsp4mp&quot;&gt;Language Server for MicroProfile (Eclipse LSP4MP)&lt;/a&gt; and &lt;a href=&quot;https://github.com/eclipse/lsp4jakarta&quot;&gt;Language Server for Jakarta EE (Eclipse LSP4Jakarta)&lt;/a&gt; both offer language specific support in an IDE or editor for their respective technologies. They help to deliver language support capabilities, such as diagnostics, code completes, hover for more information, directly within the developer&amp;#8217;s IDE of choice. &lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/MicroShed/mp-starter-vscode-ext&quot;&gt;MicroProfile Starter for VS Code&lt;/a&gt; which makes use of the &lt;a href=&quot;https://start.microprofile.io/&quot;&gt;MicroProfile Starter&lt;/a&gt;, the VS Code Extension Pack for MicroProfile, and the Open Liberty Tools for VS Code and IntelliJ projects are all IDE specific plugins that users can download from the VS Code or IntelliJ marketplace.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty Tools extensions for &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty-tools-vscode&quot;&gt;VS Code&lt;/a&gt; and &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty-tools-intellij&quot;&gt;IntelliJ&lt;/a&gt; are currently available as tech previews and offer additional in-editor support for your Open Liberty projects. Both extensions contribute commands to easily start and stop Open Liberty dev mode, as well as run tests and view test reports. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of contents:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#importance&quot;&gt;Why is developer experience important? What is involved in this role? Give a brief description of the day-to-day activities you do in this role.&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#benefits&quot;&gt;What benefits do the plugins you mentioned offer?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#devex&quot;&gt;How can open-source projects create better developer experiences? Could you give an example?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#contributions&quot;&gt;In addition to contributing to code within these open source projects, what other contributions have you made? (i.e. documentation, tutorials, blogs, etc)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#impact&quot;&gt;What impact have open-source projects had on your work or on you personally?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#internship&quot;&gt;How did your internship help you to transition to a full-time role?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#university&quot;&gt;As someone who is regularly involved with local universities, how do you see open-source projects viewed by students?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#advice&quot;&gt;What advice would you give to developers that are interested in getting started with an open-source project?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#outside&quot;&gt;Outside of work, what do you like getting up to?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;qa&quot;&gt;Q&amp;amp;A:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;importance&quot;&gt;Why is developer experience important? What is involved in this role? Give a brief description of the day-to-day activities you do in this role&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Developer experience is important because creating a positive experience for developers will enable them to be more productive and create quality software. A better experience for developers means that more developers will be inclined to continue using our products. &lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;On the Liberty Developer Experience team, there are a number of projects we regularly contribute to. My day-to-day involves adding enhancements to dev mode (recently adding multi-module support for Maven projects), or any of the IDE extensions we support, such as the MicroProfile Starter for VS Code, or Open Liberty Tools for IntelliJ tech preview. Part of this role also involves talking about our tools at conferences and keeping up with the open-source MicroProfile and Jakarta EE community.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/KathrynKodama-2.png&quot; alt=&quot;Kathryn presenting at a virtual conference&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;benefits&quot;&gt;What benefits do the plugins you mentioned offer?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;IDE plugins, specifically the ones our team works on for MicroProfile and Open Liberty, offer our users an improved experience within their editors. From within their IDE, they are able to use tools like the MicroProfile Starter or Open Liberty dev mode, without having to reference external documentation or visit an external site. This enables developers to focus on the actual code of their application, as opposed to some of the details around initially creating a project, configuring Open Liberty, and deploying to a server. The Liberty developer experience team supports a number of editor plugins, such as the MicroProfile Starter for VS Code, the Generator for MicroProfile REST Client in VS Code, and Open Liberty Tools for VS Code and IntelliJ. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;devex&quot;&gt;How can open-source projects create better developer experiences? Could you give an example?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;By developing our projects in the open-source, we can receive direct feedback from our users through avenues like GitHub issues. Open-source projects also allow us to collaborate with other interested parties in order to build better tools for developers.  For example, both our team and developers at Red Hat are actively contributing to &lt;a href=&quot;https://github.com/eclipse/lsp4mp&quot;&gt;Eclipse LSP4MP&lt;/a&gt;, the Language Server for MicroProfile. When there is a technology like MicroProfile that is widely used by many developers, it is helpful to be able to leverage the community to build these tools, as they are also the ones that will benefit from using them. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;contributions&quot;&gt;In addition to contributing to code within these open source projects, what other contributions have you made? (i.e. documentation, tutorials, blogs, etc)&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I have contributed to the documentation on our IDE extensions; Open Liberty Tools for IntelliJ and VS Code, MicroProfile Starter for VS Code, the VS Code Extension Pack for MicroProfile (Tools for MicroProfile), etc. I have also created blog posts about our Open Liberty Tools for IntelliJ initial tech preview release, and the Language Server for MicroProfile (Eclipse LSP4MP). Beyond these forms of communication, I have spoken at a number of presentations and conferences with the team. &lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/KathrynKodama-3.png&quot; alt=&quot;Kathryn and team presenting a workshop&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;impact&quot;&gt;What impact have open-source projects had on your work or on you personally?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Being involved in open-source projects has greatly improved my technical skills and introduced me to a whole new community of developers.  I have really enjoyed having the opportunity to network and meet many new people in the community, whether through conferences or directly in pull request comments. I have also gained a deeper understanding of technologies like MicroProfile and Jakarta EE which has made me a stronger Java developer.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;internship&quot;&gt;How did your internship help you to transition to a full-time role?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;My internship gave me the opportunity to ensure that this is the right role for me as I start my career. As an intern I was given ample opportunity to experience the different aspects of my current role, from development to testing, presenting at conferences, meeting my team, and getting involved in volunteer opportunities like STEM for Girls. &lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/KathrynKodama-4.png&quot; alt=&quot;Kathryn STEM for Girls&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Given my positive internship, I was able to confidently transition into my full-time role as I knew the technologies, the kind of work I would be doing, the team, and that IBM was the best company for me as I knew I had support to pick up new projects, learn new technologies, and pursue volunteer opportunities. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;university&quot;&gt;As someone who is regularly involved with local universities, how do you see open-source projects viewed by students?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;From my perspective, now more than ever students are looking to contribute to open-source projects in order to build their technical skills, portfolios and their networks. The challenge comes in helping students find an open-source project they are interested in and getting over the hurdle of a first commit or pull request. We can help by raising awareness for our projects, through blog posts, youtube videos, etc. and participating in programs that help introduce students to open-source software development. &lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Our team has been collaborating with a the &lt;a href=&quot;https://canosp.ca/&quot;&gt;Canada Open Source Projects (CANOSP)&lt;/a&gt; academic program throughout the past year. This program connects students with open-source projects and mentors in exchange for course credit. With this program we have seen a lot of interest from students when contributing to open-source projects. Open-source software clubs are also becoming more prevalent on university campuses. These are clubs where students get together and find open-source projects to contribute to as a group. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;advice&quot;&gt;What advice would you give to developers that are interested in getting started with an open-source project? &lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Seek out programs or clubs that help beginners get started contributing to open-source software, whether that is an academic program like the Canadian Open Source Projects (CANOSP) academic program or an event like &lt;a href=&quot;https://hacktoberfest.digitalocean.com/&quot;&gt;Hacktoberfest&lt;/a&gt;. Seek out projects that you interest you or perhaps you have used in some of your other work. You can also filter by the &quot;good first issue&quot; tag on GitHub to find issues that need to be picked up that have been specifically tagged as good introductory issues on open-source projects. Do not be afraid to open your first PR, maintainers of these projects will be happy to see others contributing them and helpful in the comments! &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;outside&quot;&gt;Outside of work, what do you like getting up to?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Lately I have been camping and hiking a lot as that is one of the safer activities to do throughout the pandemic. I have really enjoyed spending more time outside and getting to visit many of the beautiful provincial parks here in Ontario! &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;getting-started-with-open-source&quot;&gt;Getting started with Open Source&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If this article has helped inspire you to get started contributing to open source, why not consider contributing to Open Liberty. It&amp;#8217;s easy to get started: &lt;a href=&quot;https://openliberty.io/contribute/&quot; class=&quot;bare&quot;&gt;https://openliberty.io/contribute/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 19 Oct 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/10/19/KathrynKodama_MeetTheTeam.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/10/19/KathrynKodama_MeetTheTeam
          
        </guid>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>MicroProfile, Jakarta EE, Open Liberty, and Java at EclipseCon 2021</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021&quot;&gt;EclipseCon&lt;/a&gt; is back again as a free, virtual event! EclipseCon (25th-28th October) is a leading conference for developers, architects, and open source business leaders to learn about Eclipse technologies, share best practices, and more. It connects the Eclipse ecosystem and the industry’s leading minds to explore common challenges and innovate together around:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;open source runtimes, tools, and frameworks for cloud and edge applications&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IoT&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;artificial intelligence&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;connected vehicles and transportation&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;digital ledger technologies&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;and much more!&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re also going to be there, deciding which of the great talks to see at EclipseCon could prove to be challenging with so many fantastic sessions on offer. So we&amp;#8217;ve put together a helpful summary of the sessions on &lt;a href=&quot;https://microprofile.io/&quot;&gt;MicroProfile&lt;/a&gt;, &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Jakarta EE&lt;/a&gt;, &lt;a href=&quot;https://openliberty.io/about/&quot;&gt;Open Liberty&lt;/a&gt; and &lt;a href=&quot;https://www.eclipse.org/openj9/&quot;&gt;OpenJ9&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/EclipseCon_Logo.png&quot; alt=&quot;EclipseCon 2021 Conference Logo&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;community-day-at-eclipsecon-2021&quot;&gt;Community Day at EclipseCon 2021&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;EclipseCon Community Day is on Monday, October 25 13:00 - 17:45 CET (the day before the start of the main EclipseCon conference). Community Day is focused on and around working groups and Eclipse projects. The content is organized by the community groups themselves, with logistical support provided by the conference team. Anyone who is registered for EclipseCon 2021 may participate in Community Day; no extra signup is required.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Here are two of the fantastic sessions being run by members of the Open Liberty team:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021/microprofile-current-and-future&quot;&gt;MicroProfile Current and Future&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this session, MicroProfile lead &lt;a href=&quot;https://twitter.com/emilyfhjiang&quot;&gt;Emily Jiang&lt;/a&gt; is going to bring you up to date with the latest MicroProfile news and then briefly discuss the future roadmap for MicroProfile. Come along to this session to listen, ask questions and find out more about MicroProfile&amp;#8217;s contunued innovation and transformation.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021/jakarta-rest-looking-ahead&quot;&gt;Jakarta REST - Looking Ahead&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this session, Jakarta REST lead &lt;a href=&quot;https://twitter.com/AndrewMcCright&quot;&gt;Andrew McCright&lt;/a&gt; will intorduce Jakarta RESTful Web Services (a.k.a. JAX-RS) - one of the more active and popular APIs in the Jakarta EE family. He&amp;#8217;ll also explore the future of this Jakarta EE component to see how these APIs will evolve and how you can contribute. This session will also leave time for interactive Q&amp;amp;A, so bring questions, ideas, complaints, and other feedback with you.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;talks-at-eclipsecon-2021&quot;&gt;Talks at EclipseCon 2021&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A selection of MicroProfile, Jakarta EE, Open Liberty, and OpenJ9 sessions:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;dlist&quot;&gt;
&lt;dl&gt;
&lt;dt class=&quot;hdlist1&quot;&gt;Tuesday 26th&lt;/dt&gt;
&lt;dd&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021/sessions/optimizing-java-workloads-containers-and-hybrid-cloud-deployments&quot;&gt;Optimizing Java Workloads for Containers and Hybrid Cloud Deployments&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open J9&amp;#8217;s Vijay Sundaresan and &lt;a href=&quot;https://twitter.com/mstoodle&quot;&gt;Mark Stoodley&lt;/a&gt; will review these latest innovation available to Java users, including Virtual Machine technologies (e.g., in Eclipse OpenJ9) to optimize Java workloads for containers and cloud. They&amp;#8217;ll delve into how these innovations benefit cloud-native runtimes (e.g., Open Liberty), and discuss how you can adopt them to optimize your cloud-native Java application and microservice deployments for performance (e.g., fast startup and throughput), efficiency (e.g., memory footprint and consumption) and hence, cost savings.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021/sessions/powering-java-azure-open-liberty-and-openshift&quot;&gt;Powering Java on Azure with Open Liberty and OpenShift&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/gcharters&quot;&gt;Graham Charters&lt;/a&gt; will team up with Microsoft&amp;#8217;s Principal Architect &lt;a href=&quot;https://twitter.com/edburns&quot;&gt;Edward Burns&lt;/a&gt; to lead this fast-paced hands-on workshop, where you&amp;#8217;ll see first-hand how to run Java EE, Jakarta EE, and MicroProfile applications on Open Liberty on Azure Red Hat OpenShift (ARO). The combination of ARO with Open Liberty offers a powerful and flexible platform for your enterprise Java applications.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021/sessions/equipping-next-generation-open-source-developers&quot;&gt;Equipping the Next Generation of Open-Source Developers&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Source has become the de facto way to build software. So, how and what are we doing in enabling the next-generation of up-and-coming developers to participate in open-source software development? Join Open Liberty’s &lt;a href=&quot;https://twitter.com/yeekangc&quot;&gt;YK Chang&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/kathrynkodama&quot;&gt;Kathryn Kodama&lt;/a&gt;, with Karim Ali and Jeff Cho, as they take a look at the Canada Open-Source Projects (CANOSP) program. They will explore the program&amp;#8217;s experience and successes, and what they have learned from advocating for open source and equipping university and college students to participate in open-source software development&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/dd&gt;
&lt;dt class=&quot;hdlist1&quot;&gt;Wednesday 27th&lt;/dt&gt;
&lt;dd&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021/sessions/instant-java-cloud-applications-checkpoint-and-restore&quot;&gt;Instant On Java Cloud Applications with Checkpoint and Restore&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Thomas Watson will discuss a different approach to achieve &quot;Instant On&quot; for Java applications using Checkpoint/Restore in Userspace (CRIU).  CRIU is a Linux feature that takes a snapshot of a running application.  This snapshot can then be restored very quickly from the point the snapshot was taken and resume serving the application users. This session will alo include a demo of using this approach with OpenJ9 and Open Liberty in a (Docker) container image.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/dd&gt;
&lt;dt class=&quot;hdlist1&quot;&gt;Thursday 28th&lt;/dt&gt;
&lt;dd&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021/sessions/microprofile-40-and-beyond&quot;&gt;MicroProfile 4.0 and beyond&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Java Champion &lt;a href=&quot;https://twitter.com/emilyfhjiang&quot;&gt;Emily Jiang&lt;/a&gt; will discuss how MicroProfile has evolved to become a standard body for developing cloud-native APIs. She&amp;#8217;ll bring you up to date with the new features in MicroProfile 4.0 with a live demo and briefly discuss what is next for this open source project. Come to this session to get yourself updated with the latest news on MicroProfile.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021/sessions/replicating-production-your-laptop-using-magic-containers&quot;&gt;Replicating production on your laptop using the magic of containers&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/gracejansen27&quot;&gt;Grace Jansen&lt;/a&gt; introduces the concept of test containers within this session and delves into why utilising containers to test our cloud-native applications can enable us to ensure our tests are replicating our production environment as closely as possible. She&amp;#8217;ll demo live how Testcontainers can help you run and test with true-to-production environments in development with minimal re-writing of your test code.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021/sessions/microprofile-graphql-and-jpa-meant-each-other&quot;&gt;MicroProfile GraphQL and JPA: Meant for each other&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this session, Open Liberty&amp;#8217;s &lt;a href=&quot;https://twitter.com/AndrewMcCright&quot;&gt;Andrew McCright&lt;/a&gt; and Adam Anderson will discuss and demo how you can rapidly build data-driven microservices using MicroProfile GraphQL - a tool that makes it simple to create Java-based GraphQL services with a few annotations. This session will demonstrate the power and simplicity of making a relational database accessible as a service or cloud-native environment.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;heres-a-couple-of-talks-about-broader-java-topics-that-may-also-be-of-interest&quot;&gt;Here&amp;#8217;s a couple of talks about broader Java topics that may also be of interest:&lt;/h3&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021/sessions/whats-new-java&quot;&gt;What&amp;#8217;s New in Java?&lt;/a&gt; by Manoj Palat (Eclipse Project Lead for Java Development Tools - Java Compiler and friends, IBM)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021/sessions/dealing-verification-data-overload&quot;&gt;Dealing with Verification Data Overload&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/shelleymlambert&quot;&gt;Shelley Lambert&lt;/a&gt;, Lan Xia and Renfei Wang (Eclipse AQAvit Committers, RedHat and IBM).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021/sessions/how-analyze-java-performance-problems-eclipse-using-profiler&quot;&gt;How to analyze Java performance problems in Eclipse using a profiler?&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/_vikaschandra&quot;&gt;Vikas Chandra&lt;/a&gt; (Eclipse Plugin Development Environment Project Lead, IBM)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eclipsecon.org/2021/sessions/structured-concurrency-project-loom&quot;&gt;Structured Concurrency with Project Loom&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/sarikasinha&quot;&gt;Sarika Sinha&lt;/a&gt; (Eclipse Platform and JDT Project Lead, IBM)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can find the &lt;a href=&quot;https://www.eclipsecon.org/2021/schedule/2021-10-26&quot;&gt;full schedule&lt;/a&gt; on the &lt;a href=&quot;https://www.eclipsecon.org/2021&quot;&gt;conference website&lt;/a&gt;. See you then!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Mon, 11 Oct 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/10/11/eclipsecon-conference.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/10/11/eclipsecon-conference
          
        </guid>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Configurable Response Headers and more exciting new features in Open Liberty 21.0.0.11-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 21.0.0.11-beta provides new configurable response headers, which offer more granular control over response headers. This beta release also introduces important changes to the Jakarta EE convenience features, with the removal of Jakarta EE 9.0 features in the transition to Jakarta EE 9.1.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a larger package that contains all Open Liberty beta features (including Jakarta EE 9.1 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9.1 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9.1 features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#response_headers&quot;&gt;Configurable Response Headers&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;response_headers&quot;&gt;Configurable Response Headers&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can now configure Open Liberty (21.0.0.11-beta) to modify response headers.
The configuration options enable you to:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;append headers;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;overwrite existing headers;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;add missing headers; and&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;remove undesired headers from all responses that are serviced by an HTTP endpoint.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This granular control over response headers means you can modify headers without having to modify existing applications or filters.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;try-it-out&quot;&gt;Try it out!&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To use configurable response headers, begin by defining a new element called &lt;code&gt;headers&lt;/code&gt; in the &lt;code&gt;server.xml&lt;/code&gt;.  You can configure this for individual HTTP endpoints or for all endpoints at once.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To configure the &lt;code&gt;headers&lt;/code&gt; element for an individual endpoint, specify the element inside the &lt;code&gt;httpEndpoint&lt;/code&gt; configuration for that endpoint:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;httpEndpoint&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultHttpEndpoint&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                  &lt;span class=&quot;attribute-name&quot;&gt;httpPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9080&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                  &lt;span class=&quot;attribute-name&quot;&gt;httpsPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9443&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;

       &lt;span class=&quot;tag&quot;&gt;&amp;lt;headers&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;add&amp;gt;&lt;/span&gt;foo:bar&lt;span class=&quot;tag&quot;&gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;add&amp;gt;&lt;/span&gt;foo:bar2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;set&amp;gt;&lt;/span&gt;customHeader:customValue&lt;span class=&quot;tag&quot;&gt;&amp;lt;/set&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;setIfMissing&amp;gt;&lt;/span&gt;X-Forwarded-Proto:https&lt;span class=&quot;tag&quot;&gt;&amp;lt;/setIfMissing&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;remove&amp;gt;&lt;/span&gt;Via&lt;span class=&quot;tag&quot;&gt;&amp;lt;/remove&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;/headers&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;/httpEndpoint&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To configure the &lt;code&gt;headers&lt;/code&gt; element once to apply to multiple endpoints in your configuration, specify it as a peer of &lt;code&gt;httpEndpoint&lt;/code&gt; and then reference it in each &lt;code&gt;httpEndpoint&lt;/code&gt; element with the &lt;code&gt;headersRef&lt;/code&gt; attribute:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt; &lt;span class=&quot;tag&quot;&gt;&amp;lt;httpEndpoint&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultHttpEndpoint&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                         &lt;span class=&quot;attribute-name&quot;&gt;httpPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9080&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                         &lt;span class=&quot;attribute-name&quot;&gt;httpsPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9443&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                         &lt;span class=&quot;attribute-name&quot;&gt;headersRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myHeadersID&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
     &lt;span class=&quot;tag&quot;&gt;&amp;lt;/httpEndpoint&amp;gt;&lt;/span&gt;

     &lt;span class=&quot;tag&quot;&gt;&amp;lt;httpEndpoint&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;otherHttpEndpoint&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                         &lt;span class=&quot;attribute-name&quot;&gt;httpPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9081&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                         &lt;span class=&quot;attribute-name&quot;&gt;httpsPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9444&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
                         &lt;span class=&quot;attribute-name&quot;&gt;headersRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myHeadersID&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/httpEndpoint&amp;gt;&lt;/span&gt;

     &lt;span class=&quot;tag&quot;&gt;&amp;lt;headers&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myHeadersID&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;add&amp;gt;&lt;/span&gt;foo:bar&lt;span class=&quot;tag&quot;&gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;add&amp;gt;&lt;/span&gt;foo:bar2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;set&amp;gt;&lt;/span&gt;customHeader:customValue&lt;span class=&quot;tag&quot;&gt;&amp;lt;/set&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;setIfMissing&amp;gt;&lt;/span&gt;X-Forwarded-Proto:https&lt;span class=&quot;tag&quot;&gt;&amp;lt;/setIfMissing&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;remove&amp;gt;&lt;/span&gt;Via&lt;span class=&quot;tag&quot;&gt;&amp;lt;/remove&amp;gt;&lt;/span&gt;
     &lt;span class=&quot;tag&quot;&gt;&amp;lt;/headers&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;add&lt;/code&gt; attribute allows multiple headers with the same name to be added to a response, similar to the HttpServletResponse&amp;#8217;s &lt;code&gt;addHeader&lt;/code&gt; API. Similarly, the &lt;code&gt;set&lt;/code&gt; attribute is analogous to the &lt;code&gt;setHeader&lt;/code&gt; API, which sets a response header to the given name and value. This overwrites existing headers that share the same name. The &lt;code&gt;setIfMissing&lt;/code&gt; attribute sets the configured headers only if they are not already present on the response. Lastly, the &lt;code&gt;remove&lt;/code&gt; attribute removes any response headers with a name that matches the value that is specified in the attribute.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 17, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.11-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[21.0.0.11-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9.1 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As documented in the release of &lt;a href=&quot;/blog/2021/07/12/logging-format-21008-beta.html#JEE9_1&quot;&gt;Open Liberty 21.0.0.8-beta&lt;/a&gt;, the convenience features &lt;code&gt;jakartaee-9.0&lt;/code&gt;, &lt;code&gt;jakarteeClient-9.0&lt;/code&gt; and &lt;code&gt;webProfile-9.0&lt;/code&gt; have now been deleted in Open Liberty 21.0.0.11-beta, and completely replaced by &lt;code&gt;jakartaee-9.1&lt;/code&gt;, &lt;code&gt;jakarteeClient-9.1&lt;/code&gt; and &lt;code&gt;webProfile-9.1&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9.1 beta features in your &lt;code&gt;server.xml&lt;/code&gt;. You can enable the individual features you want or you can just add the Jakarta EE 9.1 convenience feature to enable all of the Jakarta EE 9.1 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9.1 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now-2&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9.1 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9.1 Beta Features package instead of the main release. The beta works with Java SE 17, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.11-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[21.0.0.11-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 05 Oct 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/10/05/configurable-response-headers-21.0.0.11-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/10/05/configurable-response-headers-21.0.0.11-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>MicroProfile, Jakarta EE and Open Liberty at JCON-Online 2021</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Despite the global pandemic and general chaos of this year, many amazing developer events and conferences are still taking place virtually, bringing the developer community together once more. One such event that will use a digital format to bring together the international Java community is JCON-Online. The great part is, it&amp;#8217;s free for all JUG (Java User Group) members!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Several members of the Open Liberty team will be joining &lt;a href=&quot;https://jcon.one/&quot;&gt;JCON-Online 2021&lt;/a&gt; on 5-8 October. If you&amp;#8217;re also going to be there, deciding which of the great talks to see at JCON looks like it could be a challenge. So we&amp;#8217;ve put together a helpful summary of the sessions on &lt;a href=&quot;https://microprofile.io/&quot;&gt;MicroProfile&lt;/a&gt;, &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Jakarta EE&lt;/a&gt; and &lt;a href=&quot;https://openliberty.io/about/&quot;&gt;Open Liberty&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/JCON_Conf_Logo.png&quot; alt=&quot;JCON Online Conference Logo 2021&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;talks-at-jcon-2021&quot;&gt;Talks at JCON 2021&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A selection of MicroProfile and Open Liberty talks on Tuesday, Wednesday and Thursday:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;dlist&quot;&gt;
&lt;dl&gt;
&lt;dt class=&quot;hdlist1&quot;&gt;Tuesday 5th&lt;/dt&gt;
&lt;dd&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jcon.sched.com/event/jzzB/live-coding-configuring-your-cloud-native-applications-with-microprofile-config?iframe=no&quot;&gt;Live coding: Configuring your cloud-native applications with MicroProfile Config&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Java Champion &lt;a href=&quot;https://twitter.com/emilyfhjiang&quot;&gt;Emily Jiang&amp;#8217;s&lt;/a&gt; live demo session will showcase various ways to configure your microservices via the amazing features introduced in MicroProfile Config 2.0, including config profile, config properties, variable replacement and many more.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/dd&gt;
&lt;dt class=&quot;hdlist1&quot;&gt;Wednesday 6th&lt;/dt&gt;
&lt;dd&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jcon.sched.com/event/jzyu/exploring-stateful-microservices-built-with-open-liberty-in-kubernetes?iframe=no&quot;&gt;Exploring Stateful Microservices built with Open Liberty in Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Chicago JUG&amp;#8217;s &lt;a href=&quot;https://twitter.com/mgrygles&quot;&gt;Mary Grygleski&lt;/a&gt; explores a tried and true, enterprise-grade, Java open source stack: Open Liberty in Kubernetes, a modern server solution that epitomizes all the elements needed to build, run and deploy an efficient production system today. Mary will examine and demonstrate the fundamentals of such a system that’s built with Open Liberty in Kubernetes, including: Microservices/REST API, Concurrency, Stateful vs Stateless and Deployment.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jcon.sched.com/event/k3NB/restful-java-2021-edition?iframe=no&quot;&gt;RESTful Java: 2021 edition&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty&amp;#8217;s &lt;a href=&quot;https://twitter.com/AndrewMcCright&quot;&gt;Andrew McCright&lt;/a&gt; will compare and contrast several popular Java APIs and frameworks for creating and consuming RESTful services. He&amp;#8217;ll cover when and where some APIs make more sense than others and some basic architecture practices to facilitate porting between different frameworks.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/dd&gt;
&lt;dt class=&quot;hdlist1&quot;&gt;Thursday 7th&lt;/dt&gt;
&lt;dd&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jcon.sched.com/event/k3MT/landscape-of-microprofile-and-jakarta-ee-tools?iframe=no&quot;&gt;Landscape of MicroProfile and Jakarta EE&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty&amp;#8217;s &lt;a href=&quot;https://twitter.com/yeekangc&quot;&gt;YK Chang&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/gcharters&quot;&gt;Kathryn Kodama&lt;/a&gt; will examine the tools that are available to make your life easier as you code MicroProfile and Jakarta EE-based applications. These tools help developers throughout the development lifecycle, from creating a new application, working with compatible runtimes and your favourite editor, to testing your application.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jcon.sched.com/event/k007/thriving-in-the-cloud-going-beyond-the-12-factors?iframe=no&quot;&gt;Thriving in the cloud: Going beyond the 12 factors&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this session, Open Liberty&amp;#8217;s &lt;a href=&quot;https://twitter.com/gracejansen27&quot;&gt;Grace Jansen&lt;/a&gt; will dive into the extended and updated 15 factors needed to build cloud-native applications that are able to thrive in the cloud, and she&amp;#8217;ll take a look at the open source technologies and tools that can help us achieve this.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jcon.sched.com/event/jzzF/microprofile-40-and-beyond?iframe=no&quot;&gt;MicroProfile 4.0 and beyond&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/emilyfhjiang&quot;&gt;Emily Jiang&lt;/a&gt; will discuss how MicroProfile has evolved to become a standard body for developing cloud-native APIs. She&amp;#8217;ll bring you up to date with the new features in MicroProfile 4.0 with a live demo and briefly discuss what is next for this open source project. Come to this session to get yourself updated with the latest news on MicroProfile.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;workshops-at-jcon-2021&quot;&gt;Workshops at JCON 2021&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re interested in attending the 'Big workshop day' on Friday 8th:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jcon.sched.com/event/k5do/cloud-native-java-made-easy-with-microprofile-and-jakarta-ee?iframe=no&quot;&gt;Cloud-Native Made easy with MicroProfile and Jakarta EE&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/gracejansen27&quot;&gt;Grace Jansen&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/Jamie_Lee_C&quot;&gt;Jamie Coleman&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/yeekangc&quot;&gt;YK Chang&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/mgrygles&quot;&gt;Mary Grygleski&lt;/a&gt; will lead this workshop where you can experience first-hand how to build cloud-native solutions quickly and efficiently with open enterprise-grade cloud-native Java programming APIs optimized for microservices and the cloud. They&amp;#8217;ll be covering a range of topics in a hands-on manner, including: developing RESTful and reactive services, effective testing, and application considerations for cloud-native applications.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jcon.sched.com/event/kK4C/running-your-java-enterprise-on-open-liberty-on-azure-red-hat-openshift?iframe=no&quot;&gt;Running your Java enterprise on Open Liberty on Azure Red Hat OpenShift&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/gcharters&quot;&gt;Graham Charters&lt;/a&gt; will team up with Microsoft&amp;#8217;s Principal Architect &lt;a href=&quot;https://twitter.com/edburns&quot;&gt;Edward Burns&lt;/a&gt; to lead this fast-paced hands-on workshop, where you&amp;#8217;ll see first-hand how to run Java EE, Jakarta EE and MicroProfile applications on Open Liberty on Azure Red Hat OpenShift (ARO). The combination of ARO with Open Liberty offers a powerful and flexible platform for your enterprise Java applications.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;heres-a-couple-of-talks-about-microprofile-and-jakarta-ee-by-others-contributing-to-the-these-fantastic-open-source-projects&quot;&gt;Here&amp;#8217;s a couple of talks about MicroProfile and Jakarta EE by others contributing to the these fantastic open-source projects:&lt;/h3&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jcon.sched.com/event/jzz3/jakarta-ee-core-profile-a-slimmer-jakarta-ee?iframe=no&quot;&gt;Jakarta EE Core Profile: A slimmer Jakarta EE&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/ivar_grimstad&quot;&gt;Ivar Grimstad&lt;/a&gt; (Jakarta EE Developer Advocate, Eclipse Foundation)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jcon.sched.com/event/k3Lz/jakarta-ee-security-sailing-safe-in-troubled-waters?iframe=no&quot;&gt;Jakarta EE Security - Sailing Safe in Troubled Waters&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/ivar_grimstad&quot;&gt;Ivar Grimstad&lt;/a&gt; (Jakarta EE Developer Advocate, Eclipse Foundation)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jcon.sched.com/event/jwVc/a-freakonomic-take-on-open-standards-and-jakarta-ee?iframe=no&quot;&gt;A freakonomic take on open standard and Jakarta EE&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/reza_rahman&quot;&gt;Reza Rahman&lt;/a&gt; (Principal Program Manager, Microsoft)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jcon.sched.com/event/k5dw/effective-kubernetes-for-jakarta-ee-and-microprofile-developers?iframe=no&quot;&gt;Effective Kubernetes for Jakarta EE and MicroProfile Developers&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/reza_rahman&quot;&gt;Reza Rahman&lt;/a&gt; (Principal Program Manager, Microsoft)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;And finally, for those intersted in talks in languages other than English on these topics, check out the following session in German:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jcon.sched.com/event/k3La/dream-team-jakarta-ee-microprofile?iframe=no&quot;&gt;Dream-Team Jakarta EE + MicroProfile&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/dirkweil?lang=en&quot;&gt;Dirk Weil&lt;/a&gt; (CEO, GEDOPLAN GmbH)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can find the &lt;a href=&quot;https://jcon.sched.com/?iframe=no&quot;&gt;full schedule&lt;/a&gt; on the &lt;a href=&quot;https://jcon.one/&quot;&gt;conference website&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 30 Sep 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/09/30/jcon-conference.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/09/30/jcon-conference
          
        </guid>
        
        <category>microprofile</category>
        
        <category>java-se</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Meet our open-source champions: Kevin Sutter, JakartaEE Advocate</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this blog series, we&amp;#8217;re highlighting some of the amazing individuals who contribute to Open Source software (OSS). We&amp;#8217;ll delve into their contributions within OSS, their career journey, how OSS involvement has helped them, and their advice to others for getting involved.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Kevin is co-lead of both the &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Jakarta EE &amp;#8482; Platform&lt;/a&gt; project and the &lt;a href=&quot;https://microprofile.io/&quot;&gt;MicroProfile &amp;#8482;&lt;/a&gt; project at the &lt;a href=&quot;https://www.eclipse.org/org/foundation/&quot;&gt;Eclipse Foundation&lt;/a&gt;. His involvement with these projects started during the initial investigative phases and continues with all aspects of code and specification development – project committer, PMC member, Steering Committee member, and Specification Committee member.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Kevin’s day job is leading the architecture of Enterprise Java for the &lt;a href=&quot;https://www.ibm.com/uk-en/cloud/websphere-application-server&quot;&gt;WebSphere&lt;/a&gt; product family at IBM. Outside of work, he enjoys the outdoors (camping, biking, hiking, skiing) and working on family construction projects.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/KevinSutter-1.png&quot; alt=&quot;Kevin at the DevNexus conference booth&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;tech-introduction&quot;&gt;Tech introduction:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta EE is the reincarnation of Java EE &amp;#8482; in the open source world. Jakarta EE operates under an open governance model at the Eclipse Foundation. Many more organizations and individuals now contribute to the future of Java in the Enterprise via the &lt;a href=&quot;https://jakarta.ee/about/&quot;&gt;Jakarta EE Working Group&lt;/a&gt; and associated Specification Projects.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile was created to innovate Enterprise Java in a microservices environment. At the time, Java EE was stagnant and had not started its journey as Jakarta EE. A few key organizations collaborated to create MicroProfile at the Eclipse Foundation and it has continued to grow, establishing a working group earlier this year.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Due to my involvement with these two key working groups at the Foundation, I was elected as a Committer Representative to the Eclipse Foundation Board of Directors early in 2021. This participation has allowed me to meet with and participate with other leaders across the open-source industry.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of contents:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#encouraged&quot;&gt;What encouraged you to get started with open source projects? How does working on an open-source community project like this compare to working on a proprietary project?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#experience&quot;&gt;How has your experience working on open-source project affected or influenced your work at IBM?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#role&quot;&gt;How has your role changed since getting involved in open-source? What impact have you been able to have within IBM through your role/involvement?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#JEE&quot;&gt;Why is JakartaEE an important open source project? What does it offer? How did this project come about? How did it evolve from EE4J?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#specification&quot;&gt;What is it like to create a specification for an open-source project like this? How does it differ to working on code?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#projectLead&quot;&gt;How did you become a project lead for JakartaEE? What is involved with being a project lead for an open source project like this?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#enterpriseJava&quot;&gt;As a fan of enterprise Java and its related open source projects, why would you recommend this language and its related projects for those seeking to build cloud-native enterprise applications?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#interest&quot;&gt;What tips would you give for someone who is interested in getting involved in open source? Any specific tips for the JakartaEE or MicroProfile communities?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#fun&quot;&gt;Now a fun question&amp;#8201;&amp;#8212;&amp;#8201;What activities do you enjoy outside of work?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;qa&quot;&gt;Q&amp;amp;A:&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;encouraged&quot;&gt;What encouraged you to get started with open source projects? How does working on an open-source community project like this compare to working on a proprietary project?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;An IBM assignment was my first introduction to open source. Back in 2006, I was asked to lead the JPA (Java Persistence API) effort for WebSphere. This assignment required me to participate on the OpenJPA project at Apache. This was my first exposure to the open source environment. And, to be honest, I have never looked back. My &quot;team&quot; was no longer just IBMers. It consisted of extremely talented individuals from other companies and organizations. At first, I was nervous about &quot;meeting the bar&quot;, but, I quickly learned that not any one person knows everything and that everyone makes mistakes. The open source community is there to help you grow in your career.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/KevinSutter-2.png&quot; alt=&quot;Group photo of IBMers at EclipseCon&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I find open-source development very enjoyable and very educational. Everyday I am working with top-notch talent across the industry. This not only keeps me on my toes, but it&amp;#8217;s also so good to learn from this set of talented individuals.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Schedules are also a little more flexible in the open-source environment. We still set goals and deadlines. However, since this is an open-source effort, we are dependent on the time and resources available from any given organization. We still find ourselves working long hours at times, but it&amp;#8217;s more because of our desire and commitment to completing the task rather than because an executive needs something for a customer presentation by Monday morning.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;experience&quot;&gt;How has your experience working on open-source project affected or influenced your work at IBM?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I have learned how important the community is. When I am working with so many unique individuals and organizations across the spectrum for completing some task, you need to rely on a much bigger and varied community. Community members start to work with and educate other community members and, pretty soon, you start to get contributions from people you have never heard of before. The community just continues to grow and thrive.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;role&quot;&gt;How has your role changed since getting involved in open-source? What impact have you been able to have within IBM through your role/involvement?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Recently, because of my shift to a part-time FWLOA (Flexible Work Leave of Absence) schedule, my focus for my three days of work is on our open-source activities at the Eclipse Foundation. I have allocated my WebSphere product development responsibilities to other individuals. Being able to focus on open-source almost exclusively has really been beneficial to the success of my part-time schedule.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previous to being elected as a Committer Rep on the Eclipse Foundation Board, I was the backup participant for Pradeep Balachandran (IBM&amp;#8217;s rep on the Board). My involvement with both the Jakarta EE and MicroProfile efforts were key factors in being selected for this role. And, now being an actual member of the Board, I participate and vote on the Board&amp;#8217;s decisions to help shape the future of the Eclipse Foundation. To me that is pretty cool!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/KevinSutter-3.png&quot; alt=&quot;JakartaEE Interview with Kevin&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;JEE&quot;&gt;Why is JakartaEE an important open source project? What does it offer? How did this project come about? How did it evolve from EE4J?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Java EE had an amazingly large customer base across the globe. Of course, WebSphere supported this programming model. But, so did several other companies&amp;#8201;&amp;#8212;&amp;#8201;with either products or services in support of Java EE. Now that Java EE has completely migrated to Jakarta EE at Eclipse, we have even a larger responsibility to grow and cultivate this important programming model.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;One of the big changes that was first introduced was the changing from the &quot;javax&quot; namespace to the &quot;jakarta&quot; namespace. Although this was a challenge for everyone involved, it was a necessary step to completely break away from the old &quot;ball-and-chain&quot; of Java EE processes and regulations. We are now able to introduce new innovative features (and possibly remove some &quot;dead weight&quot;) to the Jakarta EE programming model. The plans for Jakarta EE 10 are really shaping up to demonstrate this new frontier.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As far as the relationship between EE4J and Jakarta EE&amp;#8230;&amp;#8203; When Java EE was first contributed to the Eclipse Foundation, we needed a project name to use in our conversations to differentiate it from Java EE. We knew that project names with the &quot;for Java&quot; suffix were okay to use, so we just reversed the order of the Java EE name and came up with &quot;EE for Java&quot;, which is abbreviated EE4J. The EE4J name is still used in some of our artifacts such as our github repository&amp;#8201;&amp;#8212;&amp;#8201;&lt;a href=&quot;https://github.com/eclipse-ee4j&quot; class=&quot;bare&quot;&gt;https://github.com/eclipse-ee4j&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;specification&quot;&gt;What is it like to create a specification for an open-source project like this? How does it differ from working on code?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Specifications can be tricky. We use the English language to describe the programming model capabilities. And, the language has to be very specific (must, should, may, &amp;#8230;&amp;#8203;) to get the proper semantic meaning. But, code still plays a part in the Specification process. We need to codify the Specifications with the associated APIs. We also need to develop a set of Technology Compatibility Kit (TCK) tests, which are used to verify any potential Compatible Implementations. The combination of the Specification, API, TCK, and Compatible Implementation is key to the success of the Specification.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;projectLead&quot;&gt;How did you become a project lead for JakartaEE? What is involved with being a project lead for an open source project like this?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A project lead for a Specification project is really not all that special. We have no more control or influence on the Specification content than any other committer or contributor to the project. To be clear, a Specification project lead is not a Specification lead, like in the old days with Java EE. A Specification project lead helps ensure that the open-source specification process is properly interpreted and followed. Each component Specification project lead also maintains communication with the Platform project to ensure that we have cohesive platform.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;enterpriseJava&quot;&gt;As a fan of enterprise Java and its related open source projects, why would you recommend this language for those seeking to build cloud-native enterprise applications?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enterprise Java has a long history and it continues to evolve as our customers' needs evolve. Java is still near the top of programming languages in use today. And, with the introduction of MicroProfile and other new innovations in Jakarta EE, this whole environment continues to thrive. I have no hesitancy recommending the whole Java ecosystem for microservice and enterprise development efforts.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/KevinSutter-4.png&quot; alt=&quot;Kevin presenting&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;interest&quot;&gt;What tips would you give for someone who is interested in getting involved in open source? Any specific tips for the JakartaEE or MicroProfile communities?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Just start!  Pick an area you have an interest in, whether it&amp;#8217;s a specific technology like Servlet or MVC, or a specific skill like documentation or testing. There are so many different ways to contribute. All of the projects have mailing lists and/or GitHub repositories. Start exploring. Find some Issue that interests you and try contributing. Case in point: most of the images in our platform specification are in png format. These are extremely hard to maintain. A new contributor noticed that we were looking for svg format replacements for these images and they started to contribute replacement images. This person had an interest and skill that filled a void in our Platform team.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;fun&quot;&gt;Now a fun question&amp;#8201;&amp;#8212;&amp;#8201;What activities do you enjoy outside of work?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Just about anything that is &quot;real&quot; and not &quot;abstract&quot; like what we do at work everyday. I enjoy carpentry work. Recently, I helped with re-modeling the basement of my daughter&amp;#8217;s home. This included everything from drawing up plans, getting permits, doing the plumbing, and doing the electrical. The drywall is up, so all that is left is the finish work. With their home being built in 1920, there are always projects to keep me busy.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;My wife and I enjoy many activities together including camping, biking, and hiking. We are also avid (American) football fans. I&amp;#8217;ve been a Vikings fan all my life and my wife is a diehard Packers fan, but we still get along&amp;#8201;&amp;#8212;&amp;#8201;even after the game where the Vikings defense broke the Packers quarterback&amp;#8217;s collarbone and ended his season (2017).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/KevinSutter-5.png&quot; alt=&quot;Kevin and his wife at a football game&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Another activity I am very involved with is the VITA (Volunteer Income Tax Assistance) tax program. This program helps low-income and elderly people in our area with completing their tax returns each year. I have learned so much about our community while assisting with this activity. And, I&amp;#8217;ve learned much more about our tax laws than I really ever cared to&amp;#8230;&amp;#8203; :-)&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Thank you for the opportunity to share my thoughts about open-source development.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;getting-started-with-open-source&quot;&gt;Getting started with Open Source&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If this article has helped inspire you to get started contributing to open source, why not consider contributing to Open Liberty. It&amp;#8217;s easy to get started: &lt;a href=&quot;https://openliberty.io/contribute/&quot; class=&quot;bare&quot;&gt;https://openliberty.io/contribute/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 10 Sep 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/09/10/KevinSutter_MeetTheTeam.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/09/10/KevinSutter_MeetTheTeam
          
        </guid>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Java 17 early access support, JWE support for access and ID tokens, MicroProfile Context Propagation 1.3, and more in Open Liberty 21.0.0.10-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 21.0.0.10-beta provides long-awaited Java 17 early access support, offering a lot of new enhancements and functionality. Also included is JWE token format support for OpenID Connect Client (OIDC) and Social Media Login. This beta also offers updates to MicroProfile Context Propagation, meaning that you can now use MicroProfile Context Propagation within your Jakarta EE 9 applications, as well as Jakarta EE 9 support for the remaining Open Liberty value-add features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a larger package that contains all Open Liberty beta features (including Jakarta EE 9 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#java17&quot;&gt;Java 17 early access support&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jwe&quot;&gt;JWE support for OpenID Connect Client and Social Media Login&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp_cp&quot;&gt;MicroProfile Context Propagation 1.3&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#value_add&quot;&gt;Jakarta EE 9 support for the remaining Open Liberty value-add features&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;java17&quot;&gt;Java 17 early access support&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The long awaited release of Java 17 is coming soon and it will be the first LTS (long term support) release since Java 11. It will offer a lot of new functionality and environmental changes that you will want to check into. Because it will be a milestone release, we thought you might like to take a test drive with the early access release of Java 17 (we have been testing with build 35). This will allow you to test out your existing applications and microservices or write a new one on your favorite server runtime, Open Liberty!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Some of the noteworthy highlights from Java 12-17:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/358&quot;&gt;Helpful NullPointerExceptions&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/361&quot;&gt;Switch Expressions&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/372&quot;&gt;Remove the Nashorn JavaScript Engine&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/377&quot;&gt;ZGC: A Scalable Low-Latency Garbage Collector&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/378&quot;&gt;Text Blocks&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/380&quot;&gt;Unix-Domain Socket Channels&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/390&quot;&gt;Warnings for Value-Based Classes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://jdk.java.net/16/release-notes#JDK-8202343&quot;&gt;Removal of TLS 1.0 and 1.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/394&quot;&gt;Pattern Matching for instanceof&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/395&quot;&gt;Records&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/403&quot;&gt;Strongly Encapsulate JDK Internals&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/409&quot;&gt;Sealed Classes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/411&quot;&gt;Deprecate the Security Manager for Removal&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8196415&quot;&gt;Disable SHA-1 JARs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8259709&quot;&gt;Disable SHA-1 XML Signatures&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;By taking advantage of trying out the new changes in Java 17 now, you get more time to review your applications, microservices and runtime environments and be a step ahead when it becomes generally available.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To give this a try today, download the &lt;a href=&quot;https://jdk.java.net/17/&quot;&gt;early access release of Java 17&lt;/a&gt;, download and install the &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;21.0.0.10-beta&lt;/a&gt; version of Open Liberty, edit your Liberty server&amp;#8217;s &lt;a href=&quot;/docs/latest/reference/config/server-configuration-overview.html#server-env&quot;&gt;server.env file&lt;/a&gt; to point JAVA_HOME to your Java 17 installation and start testing!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on Java 17, please visit the Java 17 &lt;a href=&quot;https://jdk.java.net/17/release-notes&quot;&gt;release notes page&lt;/a&gt;, &lt;a href=&quot;https://download.java.net/java/early_access/jdk17/docs/api/&quot;&gt;API Javadoc page&lt;/a&gt; or &lt;a href=&quot;https://jdk.java.net/17/&quot;&gt;download page&lt;/a&gt;.
For more information on Open Liberty, please visit our &lt;a href=&quot;/docs/latest/overview.html&quot;&gt;documentation page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;*Note: As we work towards full Java 17 support ourselves, please excuse any of our functionality that might not be 100% ready yet. If you do hit any issues, let us know by providing &lt;a href=&quot;#feedback&quot;&gt;feedback&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;jwe&quot;&gt;JWE support for OpenID Connect Client and Social Media Login&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With this beta, the &lt;a href=&quot;/docs/latest/reference/feature/openidConnectClient-1.0.html&quot;&gt;OpenID Connect Client 1.0&lt;/a&gt; and &lt;a href=&quot;/docs/latest/reference/feature/socialLogin-1.0.html&quot;&gt;Social Media Login 1.0&lt;/a&gt; features support receiving tokens in the JSON Web Encryption (JWE) format. A JWE is a way to represent encrypted content using JSON. In addition to supporting JWE, the OpenID Connect Client 1.0 feature provides an option to temporarily cache access token validation results for inbound propagation. Both features add support for the &lt;code&gt;RS384&lt;/code&gt;, &lt;code&gt;RS512&lt;/code&gt;, &lt;code&gt;HS384&lt;/code&gt;, &lt;code&gt;HS512&lt;/code&gt;, &lt;code&gt;ES256&lt;/code&gt;, &lt;code&gt;ES384&lt;/code&gt;, and &lt;code&gt;ES512&lt;/code&gt; signature algorithms.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Prior to this beta, the OpenID Connect Client 1.0 and Social Media Login 1.0 features did not support consuming access or ID tokens in JWE format. This limited our interoperability with other OIDC clients and providers that use JWEs to propagate access tokens or provide identifying information about the authenticated user. With this beta, the OpenID Connect Client 1.0 and Social Media Login 1.0 features will be able to interoperate with OpenID Connect Providers that provide JWE formatted access and ID tokens.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can configure a Liberty OpenID Connect Relying Party to process access and ID tokens that are in a JWE format. The corresponding OpenID Connect Provider should support creating JWE access or ID tokens.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Set the OpenID Connect Provider with the OpenID Connect Relying Party&amp;#8217;s public key that is used to encrypt the Content Encryption Key according to the OpenID Connect Provider&amp;#8217;s documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the &lt;code&gt;keyManagementKeyAlias&lt;/code&gt; attribute to the private key alias of the key management key that is used to decrypt the Content Encryption Key of JWE token. The key must exist in the &lt;code&gt;keyStore&lt;/code&gt; configured for the SSL configuration referred by the the &lt;code&gt;sslRef&lt;/code&gt; attribute. For example, &lt;code&gt;&amp;lt;openidConnectClient keyManagementKeyAlias=&quot;privateKeyAlias&quot; /&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Optional: Configure access token cache.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can configure a Liberty OpenID Connect Relying Party to cache access token validation results for inbound propagation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Set the &lt;code&gt;accessTokenCacheEnabled&lt;/code&gt; attribute to &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the &lt;code&gt;accessTokenCacheTimeout&lt;/code&gt; attribute to a duration specifying how long an authenticated subject that is created by using a propagated access token is cached.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the &lt;code&gt;tokenReuse&lt;/code&gt; attribute to &lt;code&gt;true&lt;/code&gt; if the OpenID Connect Relying Party must cache results for a &lt;code&gt;JWT&lt;/code&gt; access token that includes a &lt;code&gt;jti&lt;/code&gt; claim.
Although enabling this support may result in a performance improvement, it is recommended that the value for the &lt;code&gt;accessTokenCacheTimeout&lt;/code&gt; attribute is short to reduce the possibility of a stale result as compared to what a validation call to the OpenID Connect Provider would have produced.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can also configure Liberty OIDC Social Login to process ID tokens that are in a JWE format. The corresponding OpenID Connect Provider should support creating JWE ID tokens.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Set the OpenID Connect Provider with the OIDC Social Login&amp;#8217;s public key that is used to encrypt the Content Encryption Key according to the OpenID Connect Provider&amp;#8217;s documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the &lt;code&gt;keyManagementKeyAlias&lt;/code&gt; attribute to the private key alias of the key management key that is used to decrypt the Content Encryption Key of JWE token. The key must exist in the &lt;code&gt;keyStore&lt;/code&gt; configured for the SSL configuration referred by the the &lt;code&gt;sslRef&lt;/code&gt; attribute. For example, &lt;code&gt;&amp;lt;oidcLogin keyManagementKeyAlias=&quot;privateKeyAlias&quot; /&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The signatureAlgorithm attributes of both elements now support the &lt;code&gt;RS384&lt;/code&gt;, &lt;code&gt;RS512&lt;/code&gt;, &lt;code&gt;HS384&lt;/code&gt;, &lt;code&gt;HS512&lt;/code&gt;, &lt;code&gt;ES256&lt;/code&gt;, &lt;code&gt;ES384&lt;/code&gt;, and &lt;code&gt;ES512&lt;/code&gt; signature algorithms.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;openidConnectClient signatureAlgorithm=&quot;RS384&quot;/&amp;gt;&lt;/code&gt;
&lt;code&gt;&amp;lt;oidcLogin signatureAlgorithm=&quot;RS384&quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about OpenID Connect Client refer to the &lt;a href=&quot;https://openid.net/specs/openid-connect-core-1_0.html&quot;&gt;OpenID Connect Client specification&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mp_cp&quot;&gt;MicroProfile Context Propagation 1.3&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Context Propagation 1.3 Release Candidate 1 adds support for Jakarta EE 9 packages (&lt;code&gt;jakarta.*&lt;/code&gt;) and eventual alignment with the MicroProfile 5.0 platform.
With the 1.3 RC1 release, you can now use MicroProfile Context Propagation within your Jakarta EE 9 applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the new beta features in your app, add them to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;cdi-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jndi-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpContextPropagation-1.3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-5.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.microprofile.context-propagation&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;microprofile-context-propagation-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.3-RC1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on this MicroProfile Context Propagation update, refer to the &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-context-propagation-1.3-RC1/apidocs/&quot;&gt;JavaDoc&lt;/a&gt; and &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-context-propagation-1.3-RC1/microprofile-context-propagation-spec-1.3-RC1.html&quot;&gt;specification&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;value_add&quot;&gt;Jakarta EE 9 support for the remaining Open Liberty value-add features&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In January of this year we published the &lt;a href=&quot;/blog/2021/01/26/ee9-messaging-security-21002-beta.html&quot;&gt;Open Liberty 21.0.0.2-beta release&lt;/a&gt; blog post which announced Open Liberty becoming the first vendor product to be Jakarta EE Web Profile 9.0 compatible, and since then we&amp;#8217;ve continued to deliver more Jakarta EE 9 support.  This included 9.0 Full Platform support, 9.1 Web Profile and Full Platform support, and incremental support of Jakarta 9 for the Open Liberty value-add features. With the 21.0.0.10-beta release, we are proud to announce that we have now completed our journey by adding Jakarta EE 9 support for the remaining value-add features! The value-add features with Jakarta EE9 support that are added in this beta release are as follows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Admin Center (&lt;a href=&quot;/docs/latest/reference/feature/adminCenter-1.0.html&quot;&gt;adminCenter-1.0&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Batch Management (&lt;a href=&quot;/docs/latest/reference/feature/batchManagement-1.0.html&quot;&gt;batchManagement-1.0&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;gRPC (&lt;a href=&quot;/docs/latest/reference/feature/grpc-1.0.html&quot;&gt;grpc-1.0&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;gRPC Client (&lt;a href=&quot;/docs/latest/reference/feature/grpcClient-1.0.html&quot;&gt;grpcClient-1.0&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Web Response Cache (&lt;a href=&quot;/docs/latest/reference/feature/webCache-1.0.html&quot;&gt;webCache-1.0&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Web Services Atomic Transaction (&lt;a href=&quot;/docs/latest/reference/feature/wsAtomicTransaction-1.2.html&quot;&gt;wsAtomicTransaction-1.2&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Web Services Security (&lt;a href=&quot;/docs/latest/reference/feature/wsSecurity-1.1.html&quot;&gt;wsSecurity-1.1&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Web Services Security SAML (&lt;a href=&quot;/docs/latest/reference/feature/wsSecuritySaml-1.1.html&quot;&gt;wsSecuritySaml-1.1&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Existing server configurations that use these value-add features will now work with Jakarta EE 9 features when migrating applications in those server configuration to use Jakarta EE9 technologies.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Next on the horizon is MicroProfile 5.0, which will bring Jakarta EE 9 support to the various MicroProfile features.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20.0.0.10-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[20.0.0.10-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty is the first vendor product to be Jakarta EE Web Profile 9.0 compatible since the &lt;a href=&quot;/blog/2021/01/26/ee9-messaging-security-21002-beta.html&quot;&gt;21.0.0.2-beta release&lt;/a&gt;. Open Liberty is also the first vendor product to be added to the &lt;a href=&quot;https://jakarta.ee/compatibility/#tab-9&quot;&gt;Jakarta EE Platform 9.0 compatability list&lt;/a&gt;, with the release of &lt;a href=&quot;/blog/2021/02/19/mpcontextpropagation-requesttiming-21003-beta.html&quot;&gt;21.0.0.3-beta&lt;/a&gt;.
Open Liberty &lt;a href=&quot;/blog/2021/05/18/metrics-jee9-21006-beta.html&quot;&gt;21.0.0.6-beta&lt;/a&gt; further expanded on this compatability by including new Jakarta EE9 supporting features, and 21.0.0.10-beta offers the same compatability with Jakarta EE9 with performance enhancements.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9 beta features in your app&amp;#8217;s &lt;code&gt;server.xml&lt;/code&gt;. You can enable the individual features you want or you can just add the Jakarta EE 9 convenience feature to enable all of the Jakarta EE 9 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now-2&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9 Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20.0.0.10-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[20.0.0.10-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 07 Sep 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/09/07/java17-210010-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/09/07/java17-210010-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>java-se</category>
        
        <category>beta</category>
        
        <category>security</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Introducing the Open Liberty Starter!</title>
        <description>&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;Intro&quot;&gt;Open Liberty Starter&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;There is now another easy way to get started with Open Liberty. Visit the &lt;a href=&quot;https://openliberty.io/downloads/&quot;&gt;Getting Started&lt;/a&gt; page and select a few options to generate a starter application that runs on Open Liberty. You can specify your application and project name, choose a build tool from either Maven or Gradle, and pick which version of Java SE, Jakarta EE, and MicroProfile your application will use. Then, just click &lt;code&gt;Generate Project&lt;/code&gt; and you are ready for lift-off!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;what-is-the-starter&quot;&gt;What is the starter?&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty starter gives you a simple, quick way to get the necessary files to start building an application on Open Liberty. There is no need to search how to find out what to add to your maven or gradle build files. A simple &lt;code&gt;RestApplication.java&lt;/code&gt; file is generated for you to start creating a REST based application. A &lt;code&gt;server.xml&lt;/code&gt; configuration file is provided with the necessary features for the MicroProfile and Jakarta EE versions that you previously selected.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you plan on developing and/or deploying your app in a containerized environment, the included Dockerfile will make it easier to create your application image on top of the Open Liberty Docker image.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://openliberty.io/downloads&quot;&gt;&lt;img src=&quot;/img/blog/starter_application.png&quot; alt=&quot;screen capture of the starter application options&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Once you download the starter project, unpackage the .zip file on your machine.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you selected &lt;code&gt;Maven&lt;/code&gt; as your build tool, then open a command line session, navigate to the installation directory, and run &lt;code&gt;mvnw liberty:run&lt;/code&gt;. This will install all required dependencies and start the default server. If successful, you will see the necessary features installed and the message &quot;server is ready to run a smarter planet.&quot;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/starter_maven_output.png&quot; alt=&quot;screen capture of the starter mvn liberty:run output&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A starter project using Maven is generated for you with the following files:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/starter_maven_directory_structure.png&quot; alt=&quot;screen capture of the starter maven directory structure&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you selected &lt;code&gt;Gradle&lt;/code&gt; as your build tool, then open a command line session, navigate to the installation directory, and run &lt;code&gt;gradlew libertyStart&lt;/code&gt; to start the default server. If successful, you will see the necessary features installed from the installFeature task and the message &quot;server is ready to run a smarter planet.&quot;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/starter_gradle_output.png&quot; alt=&quot;screen capture of the starter gradlew libertyStart output&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A starter project using Gradle is generated for you with the following files:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/starter_gradle_directory_structure.png&quot; alt=&quot;screen capture of the starter gradle directory structure&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on developing your application in dev mode using either Maven or Gradle, see the &lt;a href=&quot;https://openliberty.io/docs/latest/development-mode.html&quot;&gt;dev mode documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For further help on getting started actually developing your application, see some of our &lt;a href=&quot;https://openliberty.io/guides/?search=microprofile&amp;amp;key=tag&quot;&gt;Microprofile guides&lt;/a&gt; and &lt;a href=&quot;https://openliberty.io/guides/?search=jakarta%20ee&amp;amp;key=tag&quot;&gt;Jakarta EE guides&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;Alternatives&quot;&gt;Other ways to start using Open Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;There are a few other ways to get started with Open Liberty if you prefer instead:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;Docker&quot;&gt;Docker image&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can pull in the official Open Liberty docker image from &lt;a href=&quot;https://hub.docker.com/_/open-liberty&quot;&gt;Docker Hub&lt;/a&gt; and build your application image on top of the Open Liberty image. For more information, see our guide on using Docker with Open Liberty, &lt;a href=&quot;https://openliberty.io/guides/docker.html&quot;&gt;Using Docker containers to develop microservices&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;maven&quot;&gt;Maven&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can also use Maven to pull in Open Liberty as a dependency for your application. To get started using Open Liberty with Maven, add the following to your &lt;code&gt;pom.xml&lt;/code&gt;, while specifying the version of Open Liberty that you want to use:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;io.openliberty&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;openliberty-runtime&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;[21.0.0.8,)&amp;lt;/version&amp;gt;
    &amp;lt;type&amp;gt;zip&amp;lt;/type&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using Open Liberty and Maven, visit our &lt;a href=&quot;https://openliberty.io/guides/maven-intro.html&quot;&gt;Maven Intro Guide&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;gradle&quot;&gt;Gradle&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can also use Gradle to pull in Open Liberty as a dependency for your application. To get started using Open Liberty with Gradle, add the following to &lt;code&gt;build.gradle&lt;/code&gt;, while specifying the version of Open Liberty that you want to use:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;dependencies {
    libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '[21.0.0.8,)'
}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on using Open Liberty and Gradle, visit our &lt;a href=&quot;https://openliberty.io/guides/gradle-intro.html&quot;&gt;Gradle Intro Guide&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;open-liberty-binary-package&quot;&gt;Open Liberty Binary Package&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Download an Open Liberty release from our &lt;a href=&quot;https://openliberty.io/downloads/#runtime_releases_table_container&quot;&gt;Getting Started&lt;/a&gt; page and extract the package. Then navigate to the &lt;code&gt;bin&lt;/code&gt; directory and execute the &lt;code&gt;server create &amp;lt;server_name&amp;gt;&lt;/code&gt; command to create an Open Liberty server, or run the &lt;code&gt;server start&lt;/code&gt; command to automatically create and start a &lt;code&gt;defaultServer&lt;/code&gt;. Then, you can add in your application to the dropins directory, or add the path to your application in the newly created &lt;code&gt;&amp;lt;path_to_Open_Liberty_install&amp;gt;/servers/&amp;lt;server_name&amp;gt;/server.xml&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information regarding Liberty commands and configuration, visit the &lt;a href=&quot;https://openliberty.io/docs/latest/reference/command/command-overview.html&quot;&gt;Command overview&lt;/a&gt; and &lt;a href=&quot;https://openliberty.io/docs/latest/reference/config/server-configuration-overview.html&quot;&gt;Server configuration overview&lt;/a&gt; docs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 20 Aug 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/08/20/open-liberty-starter.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/08/20/open-liberty-starter
          
        </guid>
        
        <category>microprofile</category>
        
        <category>java-se</category>
        
        <category>maven</category>
        
        <category>docker</category>
        
        <category>gradle</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Endpoint activation monitoring and more now available on Open Liberty 21.0.0.9-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 21.0.0.9-beta offers exciting new enhancements for Liberty embedders such as endpoint activation monitoring to determine when endpoints are available to use.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a larger package that contains all Open Liberty beta features (including Jakarta EE 9 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#method&quot;&gt;New method to determine active endpoints&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp&quot;&gt;MicroProfile 4.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;method&quot;&gt;New method to determine active endpoints&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;ServerEndpointControlMBean&lt;/code&gt; can currently be used to pause and resume endpoints, including &lt;code&gt;HTTP&lt;/code&gt; and messaging ports. It can also determine if an endpoint is currently paused. However, there is no way to determine programmatically if an endpoint exists and is active. This update provides a new method on the &lt;code&gt;mbean&lt;/code&gt;, &lt;code&gt;isActive&lt;/code&gt;, that will determine if an endpoint exists, has started, and is not paused.
A new method was added to the &lt;code&gt;ServerEndpointControlMBean&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;code&gt;public boolean isActive(String targets);&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;targets&lt;/code&gt; parameter is a comma separated list of endpoint names.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This mirrors the existing &lt;code&gt;isPaused&lt;/code&gt; method. It will return true only if all of the endpoints listed exist, are started, and are not paused.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;comment&quot;&gt;// Check if the defaultHttpEndpoint is active&lt;/span&gt;
&lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; isEndpointActive = mbean.isActive(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultHttpEndpoint&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about &lt;code&gt;ServerEndpointControlMBean&lt;/code&gt; methods, refer to the &lt;a href=&quot;https://www.ibm.com/docs/en/was-liberty/nd?topic=SSAW57_liberty/com.ibm.websphere.javadoc.liberty.doc/com.ibm.websphere.appserver.api.kernel.service_1.0-javadoc/com/ibm/websphere/kernel/server/ServerEndpointControlMBean.html&quot;&gt;API documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.9-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[21.0.0.9-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;mp&quot;&gt;MicroProfile 4.1 Beta Features&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile 4.1 was originally released in the Open Liberty Beta 21.0.0.8-beta and it is also in this beta. More information on MicroProfile 4.1 is available &lt;a href=&quot;https://openliberty.io/blog/2021/07/12/logging-format-21008-beta.html#mp4_1&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty is the first vendor product to be Jakarta EE Web Profile 9.0 compatible since the 21.0.0.2-beta release. Open Liberty is also the first vendor product to be added to the &lt;a href=&quot;https://jakarta.ee/compatibility/#tab-9&quot;&gt;Jakarta EE Platform 9.0 compatability list&lt;/a&gt;, with the release of 21.0.0.3-beta.
Open Liberty 21.0.0.6-beta further expanded on this compatability by including new Jakarta EE9 supporting features, and 21.0.0.9-beta offers the same compatability with Jakarta EE9 with performance enhancements.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9 beta features in your app&amp;#8217;s &lt;code&gt;server.xml&lt;/code&gt;. You can enable the individual features you want or you can just add the Jakarta EE 9 convenience feature to enable all of the Jakarta EE 9 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now-2&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9 Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.9-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[20.0.0.9-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 06 Aug 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/08/06/endpoint-monitoring-21009-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/08/06/endpoint-monitoring-21009-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>monitoring</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>MicroProfile 4.1 plus more exciting features now in Open Liberty 21.0.0.8-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 21.0.0.8-beta introduces MicroProfile 4.1 with updates to the MicroProfile Health feature. A new logging format (&lt;code&gt;TBASIC&lt;/code&gt;) is made available. The Stale Connection Identification feature makes it possible to provide additional configuration for a data source. A couple of Jakarta EE 9.1 convenience features are also included in the &lt;a href=&quot;#allbeta&quot;&gt;&quot;All Beta&quot; package&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a larger package that contains all Open Liberty beta features (including Jakarta EE 9 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try one of these packages, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp&quot;&gt;MicroProfile Updates&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp4_1&quot;&gt;MicroProfile 4.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mpHealth3_1&quot;&gt;MicroProfile Health 3.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#tbasic&quot;&gt;TBASIC Logging Format Beta&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#staleConnectionID&quot;&gt;Customizing Stale Connection Identification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#JEE9_1&quot;&gt;Jakarta EE 9.1 convenience features&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;#tryitnow&quot;&gt;Try it now&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mp&quot;&gt;MicroProfile Updates&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In Open Liberty 21.0.0.8-beta we have two updates: MicroProfile 4.1 improves developer experience with updates to the Health feature; MicroProfile Health 3.1 enables you to provide your own Startup health check procedures to be invoked by Open Liberty. Find out more below.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;mp4_1&quot;&gt;MicroProfile 4.1&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile 4.1 improves developer experience with updates to the Health feature. MicroProfile 4.1 also defines compatible implementation requirements for runtimes, which must pass all of the MicroProfile component specification &lt;code&gt;TCKs&lt;/code&gt; including Config 2.0, Fault Tolerance 3.0, Rest Client 2.0, Health 3.1, Metrics 3.0, Open Tracing 2.0, Open API 2.0, and JWT propagation 1.2. This beta driver will be used as a compatible implementation for releasing MicroProfile 4.1.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;microProfile-4.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To find out more take a look at the &lt;a href=&quot;https://github.com/eclipse/microprofile/releases/tag/4.1&quot;&gt;MicroProfile 4.1 Release&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;mpHealth3_1&quot;&gt;MicroProfile Health 3.1&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Health enables you to provide your own health check procedures to be invoked by Open Liberty, to verify the health of your microservice. A service checks its own health by performing necessary self-checks and then reports its overall status by implementing the API provided by MicroProfile Health. A self-check can be a check on anything that the service needs, such as a dependency, a successful connection to an endpoint, a system property, a database connection, or the availability of required resources. MicroProfile offers checks for both Liveness and Readiness. MicroProfile Health 3.1 introduces a new Health Check called Startup, which allows applications to define startup probes that are used for initial verification of the application before the Liveness probe takes over. This is useful for applications which require additional startup time on their first initialization.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the previous versions of MicroProfile Health, there were no unique APIs or endpoints to distinguish the start up status of your microservices. MicroProfile Health 3.1 introduces a new convenient &lt;code&gt;@Startup&lt;/code&gt; annotation to create your own health check procedures to verify that your microservices have fully initialized. The status of the Startup health checks of your microservices can be viewed with the new REST endpoint &lt;code&gt;/health/started&lt;/code&gt;. You can now configure the Kubernetes Startup probe with this new endpoint as well. In Open Liberty, you can use the Startup endpoint, &lt;code&gt;/health/started&lt;/code&gt;, to verify if your deployed applications have started or not.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When deployed application(s) are not started yet, the overall default Startup status will be DOWN, with an empty payload response until all the deployed application(s) have started. A new MicroProfile Config property (&lt;code&gt;mp.health.default.startup.empty.response=UP&lt;/code&gt;) is available to change the overall default Startup check status to &lt;code&gt;UP&lt;/code&gt;, during application start up.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Applications are expected to provide health check procedures by implementing the HealthCheck interface with the &lt;code&gt;@Startup&lt;/code&gt;, &lt;code&gt;@Liveness&lt;/code&gt;, or &lt;code&gt;@readiness&lt;/code&gt; annotations. These are used by Open Liberty to verify the respective Startup, Liveness, or Readiness of the application. Add the logic of your health check in the &lt;code&gt;call()&lt;/code&gt; method, and return the &lt;code&gt;HealthCheckResponse&lt;/code&gt; object, by using the simple &lt;code&gt;up()&lt;/code&gt;/&lt;code&gt;down()&lt;/code&gt; methods from the API:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;**Startup Check**
&lt;span class=&quot;annotation&quot;&gt;@Startup&lt;/span&gt;
&lt;span class=&quot;annotation&quot;&gt;@ApplicationScoped&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;StartupMemUsageCheck&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;implements&lt;/span&gt; HealthCheck {
...
    &lt;span class=&quot;annotation&quot;&gt;@Override&lt;/span&gt;
     &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; HealthCheckResponse call() {
       ...
       if (getMemUsage() &amp;lt; &lt;span class=&quot;float&quot;&gt;0.95&lt;/span&gt;) {
           &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; HealthCheckResponse.up(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;memUsage&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
       }
       &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; HealthCheckResponse.down(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;memUsage&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
       ...
     }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To view the status of each health check, access the &lt;code&gt;&lt;a href=&quot;http://&amp;lt;hostname&amp;gt;:&amp;lt;port&amp;gt;/health/started&quot; class=&quot;bare&quot;&gt;http://&amp;lt;hostname&amp;gt;:&amp;lt;port&amp;gt;/health/started&lt;/a&gt;&lt;/code&gt; endpoint.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the new beta features in your app, add them to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpHealth-3.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To find out more viist:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-health/releases/tag/3.1&quot;&gt;MicroProfile Health Check 3.1 Release Page&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-health/blob/3.1/spec/src/main/asciidoc/release_notes.asciidoc&quot;&gt;Release Notes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;tbasic&quot;&gt;TBASIC Logging Format&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A new logging format, &lt;code&gt;TBASIC&lt;/code&gt;, is added to match the Websphere Application Server basic logging format. This new format option can be used for &lt;code&gt;consoleFormat&lt;/code&gt;, &lt;code&gt;messageFormat&lt;/code&gt;, or &lt;code&gt;traceFormat&lt;/code&gt;. &lt;code&gt;TBASIC&lt;/code&gt; format matches the existing trace &lt;code&gt;BASIC&lt;/code&gt; format (so now either &lt;code&gt;TBASIC&lt;/code&gt; or &lt;code&gt;BASIC&lt;/code&gt; can be used to refer to this format for trace). Using this new format option will allow users that utilize log parsers that work with the Websphere Application Server basic format to use the same parsers with Open Liberty logs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new options can be used in the bootstrap.properties file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;com.ibm.ws.logging.message.format=tbasic
com.ibm.ws.logging.console.format=tbasic
com.ibm.ws.logging.trace.format=tbasic&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can also change the format by editing the server.env and adding the following lines:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;WLP_LOGGING_MESSAGE_FORMAT=TBASIC
WLP_LOGGING_CONSOLE_FORMAT=TBASIC&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;TBASIC Logs Example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;[&lt;span class=&quot;integer&quot;&gt;24&lt;/span&gt;/&lt;span class=&quot;octal&quot;&gt;03&lt;/span&gt;/&lt;span class=&quot;integer&quot;&gt;21&lt;/span&gt; &lt;span class=&quot;integer&quot;&gt;15&lt;/span&gt;:&lt;span class=&quot;octal&quot;&gt;04&lt;/span&gt;:&lt;span class=&quot;integer&quot;&gt;10&lt;/span&gt;:&lt;span class=&quot;integer&quot;&gt;331&lt;/span&gt; EDT] &lt;span class=&quot;octal&quot;&gt;00000001&lt;/span&gt; FrameworkMana A   CWWKE0001I: The server defaultServer has been launched.
[&lt;span class=&quot;integer&quot;&gt;24&lt;/span&gt;/&lt;span class=&quot;octal&quot;&gt;03&lt;/span&gt;/&lt;span class=&quot;integer&quot;&gt;21&lt;/span&gt; &lt;span class=&quot;integer&quot;&gt;15&lt;/span&gt;:&lt;span class=&quot;octal&quot;&gt;04&lt;/span&gt;:&lt;span class=&quot;integer&quot;&gt;11&lt;/span&gt;:&lt;span class=&quot;integer&quot;&gt;338&lt;/span&gt; EDT] &lt;span class=&quot;octal&quot;&gt;00000001&lt;/span&gt; FrameworkMana I   CWWKE0002I: The kernel started after &lt;span class=&quot;float&quot;&gt;1.177&lt;/span&gt; seconds
[&lt;span class=&quot;integer&quot;&gt;24&lt;/span&gt;/&lt;span class=&quot;octal&quot;&gt;03&lt;/span&gt;/&lt;span class=&quot;integer&quot;&gt;21&lt;/span&gt; &lt;span class=&quot;integer&quot;&gt;15&lt;/span&gt;:&lt;span class=&quot;octal&quot;&gt;04&lt;/span&gt;:&lt;span class=&quot;integer&quot;&gt;11&lt;/span&gt;:&lt;span class=&quot;integer&quot;&gt;465&lt;/span&gt; EDT] &lt;span class=&quot;integer&quot;&gt;0000003&lt;/span&gt;e FeatureManage I   CWWKF0007I: Feature update started.
[&lt;span class=&quot;integer&quot;&gt;24&lt;/span&gt;/&lt;span class=&quot;octal&quot;&gt;03&lt;/span&gt;/&lt;span class=&quot;integer&quot;&gt;21&lt;/span&gt; &lt;span class=&quot;integer&quot;&gt;15&lt;/span&gt;:&lt;span class=&quot;octal&quot;&gt;04&lt;/span&gt;:&lt;span class=&quot;integer&quot;&gt;11&lt;/span&gt;:&lt;span class=&quot;integer&quot;&gt;635&lt;/span&gt; EDT] &lt;span class=&quot;octal&quot;&gt;00000033&lt;/span&gt; DropinMonitor A   CWWKZ0058I: Monitoring dropins &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; applications.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;staleConnectionID&quot;&gt;Customizing Stale Connection Identification&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty maintains a pool of JDBC connections to improve performance. It is necessary for Open Liberty to be able to identify when connections have become stale and are no longer usable so that such connections can be removed from the pool. Open Liberty leverages multiple standards made available by the JDBC and SQL specifications, as well as relying on some built-in knowledge of vendor-specific behavior for some JDBC drivers in order to achieve this.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Not all JDBC drivers completely follow the JDBC/SQL specifications in identifying stale connections. If you are using such a JDBC driver, it is now possible for you to provide additional configuration for a data source that helps identify the vendor-specific SQL states and error codes that are raised by the JDBC driver, enabling Liberty to better maintain the connection pool.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Configure one or more &lt;code&gt;&amp;lt;identifyException&amp;gt;&lt;/code&gt; subelements under &lt;code&gt;&amp;lt;dataSource&amp;gt;&lt;/code&gt; to provide the &lt;code&gt;SQLException&lt;/code&gt; identification detail.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jdbc-4.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jndi-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  ... other features
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;dataSource&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DefaultDataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;jndiName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jdbc/myDataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;jdbcDriver&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;libraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myJDBCLib&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;databaseName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;TESTDB&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;serverName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;portNumber&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;1234&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- identify the following as stale connections, --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;identifyException&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;sqlState&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;08000&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;as&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;StaleConnection&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;identifyException&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;errorCode&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;2468&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;as&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;StaleConnection&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- remove built-in identification of SQL state S1000 --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;identifyException&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;sqlState&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;S1000&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;as&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dataSource&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myJDBCLib&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;file&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;C:/drivers/some-jdbc-driver.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;JEE9_1&quot;&gt;Jakarta EE 9.1 convenience features&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta EE 9.1 convenience features are included in this beta release in the &quot;all beta&quot; zip file, but not yet in the Jakarta EE 9 beta zip file. The 9.1 convenience features are duplicates of the Jakarta EE 9.0 convenience features. In a future beta release, the 9.0 convenience features will be removed and only the 9.1 ones will remain. Users of the Jakarta EE 9 convenience features should look to transition to use 9.1 in preparation of 9.0 being removed.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the Jakarta EE 9.1 convenience features, add them to your &lt;code&gt;server.xml&lt;/code&gt; or &lt;code&gt;client.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaeeClient-9.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;tryitnow&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.8-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[20.0.0.8-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 21.0.0.2-beta was the first vendor product to be Jakarta EE Web Profile 9.0 compatible. Similarly, Open Liberty 21.0.0.3-beta was the first vendor product to be added to the &lt;a href=&quot;https://jakarta.ee/compatibility/#tab-9&quot;&gt;Jakarta EE Platform 9.0 compatibility list&lt;/a&gt;.. Open Liberty 21.0.0.8-beta maintains that compatibility while continuing to make quality and performance enhancements.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;#tryitnow&quot;&gt;Try it now&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9 Beta Features package instead of the main release. The beta works with Java SE 16, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.8-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[21.0.0.8-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Mon, 12 Jul 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/07/12/logging-format-21008-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/07/12/logging-format-21008-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>monitoring</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Open Liberty beta is Jakarta EE 9.1 compatible</title>
        <description>&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://jakarta.ee/&quot;&gt;&lt;img src=&quot;/img/blog/JakartaEE_Logo_Compatible-color.png&quot; alt=&quot;JakartaEE Logo Compatible color&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This blog post serves as a follow-up to &lt;a href=&quot;https://openliberty.io/blog/2021/03/05/jakarta-ee-9-compatibility.html&quot;&gt;my last blog post&lt;/a&gt; about Open Liberty&amp;#8217;s support of Jakarta EE 9.0. Over the last several months, the Jakarta EE community has updated the Jakarta EE 9 TCK to enable it to use either Java SE 8 or Java SE 11. This new version of the TCK was the bulk of the work required to complete the &lt;a href=&quot;https://jakarta.ee/specifications/platform/9.1/jakarta-platform-spec-9.1.html&quot;&gt;Jakarta EE 9.1 specification&lt;/a&gt;. Java SE 11 support in the TCK makes it possible to validate whether an application server that uses Java SE 11 is compatible with the Jakarta EE 9 specification.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Jakarta EE 9.1 specification was &lt;a href=&quot;https://jakarta.ee/news/jakarta-ee-9-1-released/&quot;&gt;made available this week&lt;/a&gt;. On day one of this new release, Open Liberty is one of the vendor implementations used to ratify the specification. The Open Liberty product is &lt;a href=&quot;https://jakarta.ee/compatibility/#tab-9_1&quot;&gt;compatible&lt;/a&gt; for both the Jakarta EE 9.1 &lt;a href=&quot;https://jakarta.ee/specifications/webprofile/9.1/&quot;&gt;Web Profile&lt;/a&gt; and &lt;a href=&quot;https://jakarta.ee/specifications/platform/9.1/&quot;&gt;Platform&lt;/a&gt; specifications using both Java SE 8 and Java SE 11. What is most notable is that Open Liberty was ahead of the curve for Jakarta EE 9.1. The Open Liberty beta version that was tested with the 9.1 TCK is the same version that was marked compatible for the Jakarta EE 9.0 specification. As I stated in my previous blog post, Jakarta EE 9.1 support was anticipated due to Open Liberty&amp;#8217;s support of Java SE 11 for over two years.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Since my last blog post, more resources are available to help you make the transition to Jakarta EE 9. &lt;a href=&quot;https://openliberty.io/blog/2021/03/17/eclipse-transformer.html&quot;&gt;A blog post&lt;/a&gt; with detailed instructions on using the &lt;a href=&quot;https://projects.eclipse.org/projects/technology.transformer&quot;&gt;Eclipse Transformer&lt;/a&gt; was created a few months ago to help guide you when updating your applications to work with Jakarta EE 9. Also, &lt;a href=&quot;https://community.ibm.com/community/user/wasdevops/blogs/jared-anderson1/2021/05/12/jakarta-ee-9-with-open-liberty&quot;&gt;this presentation&lt;/a&gt; provides more details about Jakarta EE 9 and Open Liberty, including a live demo of using the Eclipse Transformer to update your applications and server configurations without doing any manual changes to source or configuration.&lt;/p&gt;
&lt;/div&gt;</description>        
        <pubDate>Wed, 26 May 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/05/26/jakarta-ee-9-1-compatibility.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/05/26/jakarta-ee-9-1-compatibility
          
        </guid>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Testing Jakarta EE 9 Applications with Arquillian and Open Liberty</title>
        <description></description>        
        <pubDate>Fri, 21 May 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/redirected.html</link>
        <guid isPermaLink="true">
          
            https://itnext.io/testing-jakarta-ee-9-applications-with-arquillian-and-open-liberty-5ada186a0485
          
        </guid>
        
        <category>jakarta-ee</category>
        
        <category>test</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Request Timing Metrics and new Jakarta EE9 support in Open Liberty 21.0.0.6-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 21.0.0.6-beta brings improvements to the MicroProfile Metrics feature, allowing for information gathered via the Request Timing feature to be displayed on the metrics endpoint. Also included are a number of new Jakarta EE9 supporting features, including OAuth/SSO authorization and automatic certificate management.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a larger package that contains all Open Liberty beta features (including Jakarta EE 9 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#metrics&quot;&gt;Request Timing now supported by MicroProfile Metrics&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;metrics&quot;&gt;Request Timing now supported by MicroProfile Metrics&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The request timing feature (requestTiming-1.0) is used to keep track of the slow and hung requests for servlet requests with a RequestTimingStats MXBean. The Microprofile Metrics features (mpMetrics-X.X) on the other hand provides vendor metrics that are distinct to the Open Liberty runtime.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Starting with the Open Liberty 21.0.0.6-beta the &lt;code&gt;RequestTimingStats&lt;/code&gt; MXBean will now have it&amp;#8217;s data retrieved by the MicroProfile Metrics feature for reporting on the &lt;code&gt;/metrics&lt;/code&gt; (or &lt;code&gt;/metrics/vendor&lt;/code&gt;) endpoint. This functionality is compatible with both the 2.X and 3.X MicroProfile Metrics features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Below is a sample output of the new request timing metrics:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;# TYPE vendor_requestTiming_activeRequestCount gauge
# HELP vendor_requestTiming_activeRequestCount The number of servlet requests currently running.
vendor_requestTiming_activeRequestCount 1

# TYPE vendor_requestTiming_requestCount_total counter
# HELP vendor_requestTiming_requestCount_total The number of servlet requests since the server started.
vendor_requestTiming_requestCount_total 3

# TYPE vendor_requestTiming_hungRequestCount gauge
# HELP vendor_requestTiming_hungRequestCount The number of servlet requests that are currently running but are hung.
vendor_requestTiming_hungRequestCount 0

# TYPE vendor_requestTiming_slowRequestCount gauge
# HELP vendor_requestTiming_slowRequestCount The number of servlet requests that are currently running but are slow.
vendor_requestTiming_slowRequestCount 0&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To be able to retrieve request timing metrics from &lt;code&gt;/metrics&lt;/code&gt; you will need to enable both the requestTiming-1.0 feature in combination with one of the following MicroProfile Metric features: &lt;code&gt;mpMetrics-2.0&lt;/code&gt;, &lt;code&gt;mpMetrics-2.2&lt;/code&gt; or &lt;code&gt;mpMetrics-2.3&lt;/code&gt; or &lt;code&gt;mpMetric-3.0&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To begin recieving metrics you will need to configure the request timing thresholds for slow or hung requests. The following example demonstrates enabling request timing metrics for &lt;code&gt;mpMetrics-3.0&lt;/code&gt;, with a sample threshold configuration for both slow and hung servlet requests.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpMetrics-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;requestTiming-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- other features omitted for brevity --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;requestTiming&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;sampleRate&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;slowRequestThreshold&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;10s&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;servletTiming&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;slowRequestThreshold&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;2s&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;hungRequestThreshold&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;10s&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/requestTiming&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information regarding Request Timing with MicroProfile Metrics:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/requestTiming-1.0.html&quot;&gt;Request Timing Documentation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/introduction-monitoring-metrics.html&quot;&gt;Monitoring with Metrics&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/jmx-metrics-list.html#request-timing-stats&quot;&gt;Request Timing MXBean Documentation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 16, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.6-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[21.0.0.6-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As of the 21.0.0.2-beta release, Open Liberty is the first vendor product to be Jakarta EE Web Profile 9.0 compatible. With the Open Liberty 21.0.0.3-beta release, Open Liberty is the first vendor product to be added to the &lt;a href=&quot;https://jakarta.ee/compatibility/#tab-9&quot;&gt;Jakarta EE Platform 9.0 compatibility list&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This Open Liberty beta introduces the following Jakarta EE 9 features which now possess their all-new Jakarta EE 9 package names:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/openidConnectClient-1.0.html&quot;&gt;OpenID Connect Client 1.0&lt;/a&gt; (&lt;code&gt;openidConnectClient-1.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/config/openidConnectProvider.html&quot;&gt;OpenID Connect Provider 1.0&lt;/a&gt; (&lt;code&gt;openidConnectServer-1.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/socialLogin-1.0.html&quot;&gt;Social Media Login 1.0&lt;/a&gt; (&lt;code&gt;socialLogin-1.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/feature/acmeCA-2.0.html&quot;&gt;Automatic Certificate Management Environment (ACME) Support 2.0&lt;/a&gt; (&lt;code&gt;acmeCA-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;openidConnectClient-1.0&lt;/code&gt;, &lt;code&gt;openidConnectServer-1.0&lt;/code&gt;, &lt;code&gt;socialLogin-1.0&lt;/code&gt; and &lt;code&gt;acmeCA-2.0&lt;/code&gt; features will automatically adapt to the level of Java EE or Jakarta EE that is already in use, so no change is needed when using them with Jakarta EE 9.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9 beta features in your app&amp;#8217;s &lt;code&gt;server.xml&lt;/code&gt;. You can enable the individual features you want or you can just add the Jakarta EE 9 convenience feature to enable all of the Jakarta EE 9 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now-2&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9 Beta Features package instead of the main release. The beta works with Java SE 16, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.6-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[21.0.0.6-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 18 May 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/05/18/metrics-jee9-21006-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/05/18/metrics-jee9-21006-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>metrics</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>LDAP user registry authentication and JAX-RS multipart payloads new in Open Liberty 21.0.0.5</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 21.0.0.5 comes complete with a new Kerberos authentication method, allowing for the use of an LDAP user registry to easily and quickly authorize connections originating from the same source. Also included is the ability to create and exchange multipart payloads using JAX-RS clients and services.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 21.0.0.5:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#ldap&quot;&gt;LDAP connection support for Kerberos authentication&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#multi&quot;&gt;Build multipart payloads for your JAX-RS client and services&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;View the list of fixed bugs in &lt;a href=&quot;#bugs&quot;&gt;21.0.0.5&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Run your apps using 21.0.0.5&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.5&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '[21.0.0.5,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using Docker:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM open-liberty&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://stackoverflow.com/tags/open-liberty&quot;&gt;&lt;img src=&quot;/img/blog/blog_btn_stack.svg&quot; alt=&quot;Ask a question on Stack Overflow&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;ldap&quot;&gt;LDAP connection support for Kerberos authentication&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;LDAP bind operations are used to authenticate clients (and the users or applications behind them) to the directory server. This establishes an authorization identity that is used for subsequent operations that are processed on that connection, and specifies the LDAP protocol version that the client uses. Before this update, the &lt;code&gt;LdapRegistry&lt;/code&gt; element supported binding either anonymously or by using simple authentication with a user (&lt;code&gt;bindDN&lt;/code&gt;) and password (&lt;code&gt;bindPassword&lt;/code&gt;). This update adds an option to bind to LDAP: GSSAPI/Kerberos. Kerberos is an authentication mechanism that allows a client and service to mutually authenticate by a Key Distribution Center (KDC). In Open Liberty 21.0.0.5,  you can use either a Kerberos credential cache (ccache) or a Kerberos keytab file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To update an &lt;code&gt;LdapRegistry&lt;/code&gt; to use the GSSAPI/Kerberos option, you can set the bind authentication mechanism type using the new &lt;code&gt;LdapRegistry&lt;/code&gt; attribute, &lt;code&gt;bindAuthMechanism&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;bindAuthMechanism=&amp;quot;GSSAPI&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You also need the Kerberos principal or Service Principal Name:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;krb5Principal=&amp;quot;user1@EXAMPLE.COM&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you are using a Kerberos credential cache (ticket cache or ccache) to store the Kerberos credentials, add the ticket cache file name to the &lt;code&gt;LdapRegistry&lt;/code&gt; with the new attribute, &lt;code&gt;krb5TicketCache&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;krb5TicketCache=&amp;quot;${server.config.dir}/security/krb5-user1.cc&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you are using a custom Kerberos configuration file (krb.conf or krb.ini), set the file name using the global Kerberos configuration element:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;kerberos&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;configFile&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5.conf&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you are using a Kerberos keytab file to store encrypted keys for principals, set the file using the global Kerberos configuration element:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;kerberos&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;keytab&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5.keytab&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;configFile&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5.conf&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If the Kerberos configuration file is not defined, Open Liberty will attempt to resolve by using the JDK default locations and the operating system default locations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For the Kerberos credentials, the locations are checked in the following order: the ticket cache (if provided), the configured keytab file, and finally the JDK default location.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to configure the &lt;code&gt;LdapRegistry&lt;/code&gt; element using a ticket cache and custom Kerberos config file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;kerberos&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;keytab&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5.keytab&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;configFile&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5.conf&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;ldapRegistry&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;LDAP&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;realm&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SampleLdapADRealm&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;host&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ldap_hostname&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;port&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;389&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;ignoreCase&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;baseDN&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DC=example,DC=com&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;bindAuthMechanism&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;GSSAPI&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;krb5Principal&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;user1@EXAMPLE.COM&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;krb5TicketCache&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5-user1.cc&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;ldapType&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Custom&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to configure an LDAP Registry using a keytab and custom Kerberos config file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;kerberos&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;keytab&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5.keytab&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;configFile&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5.conf&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;ldapRegistry&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;LDAP&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;realm&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SampleLdapADRealm&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;host&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ldap_hostname&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;port&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;389&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;ignoreCase&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;baseDN&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DC=example,DC=com&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;bindAuthMechanism&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;GSSAPI&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;krb5Principal&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;user1@EXAMPLE.COM&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;ldapType&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Custom&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on &lt;code&gt;LdapRegistry&lt;/code&gt;, see the &lt;a href=&quot;https://openliberty.io/docs/latest/reference/feature/ldapRegistry-3.0.html&quot;&gt;LDAP User Registry documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable this new function in your app, add the LDAP User Registry 3.0 feature to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;ldapRegistry-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;multi&quot;&gt;Build multipart payloads for your JAX-RS client and services&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Often, a RESTful service or client will need to send multiple disparate pieces of data in the same request, for example, uploading a resume/CV with a picture and text for name and address. This is usually done using &lt;code&gt;multipart/form-data&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;While Liberty currently has APIs to enable users to &lt;em&gt;receive&lt;/em&gt; multipart/form-data payloads, it does not have any APIs to enable users to &lt;em&gt;send&lt;/em&gt; multipart payloads - until now. With the new &lt;code&gt;AttachmentBuilder&lt;/code&gt; API, users can now send multipart requests from their JAX-RS clients or send multipart payloads as responses from their JAX-RS resources.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To send a multipart request, you will need to enable the &lt;code&gt;jaxrs-2.0&lt;/code&gt; or &lt;code&gt;jaxrs-2.1&lt;/code&gt; feature. Presumably, if you are already using JAX-RS, one of these features will already be enabled. To send a multipart payload, you must send an instance of &lt;code&gt;List&amp;lt;IAttachment&amp;gt;&lt;/code&gt;.  Each object in that list represents a single attachment part.  Here is an example of creating and sending a multipart request from a JAX-RS client:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;IAttachment&amp;gt; attachments = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;ArrayList&lt;/span&gt;&amp;lt;&amp;gt;();

attachments.add(AttachmentBuilder.newBuilder(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;blogPost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .inputStream(&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;FileInputStream&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/path/to/yesterdaysBlogPost.xml&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;))
                                 .fileName(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myRenamedBlogPost.asciidoc&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .contentType(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;text/asciidoc&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .contentId(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myBlogPostID&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .header(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;X-PriorityLevel&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Medium&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .build());

attachments.add(AttachmentBuilder.newBuilder(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;file1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .inputStream(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;some.xml&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;FileInputStream&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/path/to/myPicture.png&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;))
                                 .contentType(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;image/png&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .build());

attachments.add(AttachmentBuilder.newBuilder(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;authorName&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .inputStream(&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;ByteArrayInputStream&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;John Doe&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;.getBytes()))
                                 .build());

Response response = client.target(BLOG_SITE_URI)
                          .request()
                          .post(&lt;span class=&quot;predefined-type&quot;&gt;Entity&lt;/span&gt;.entity(attachments, MediaType.MULTIPART_FORM_DATA));&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information vist:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://tools.ietf.org/html/rfc7578&quot;&gt;multipart/form-data RFC 7578&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;bugs&quot;&gt;Notable bugs fixed in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We’ve spent some time fixing bugs. The following sections describe just some of the issues resolved in this release. If you’re interested, here’s the  &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A21005+label%3A%22release+bug%22&quot;&gt;full list of bugs fixed in 21.0.0.5&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/14345&quot;&gt;Application context path can not end with a slash&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Within Open Liberty you are able to retrieve the current context path by calling &lt;code&gt;ServletContext.getContextPath()&lt;/code&gt;, the Jakarta EE specification states that this method should return a string that begins with a &lt;code&gt;/&lt;/code&gt; character and does not end with a &lt;code&gt;/&lt;/code&gt; character. Prior to Open Liberty 21.0.0.5, it was possible for this method to return a context root with a &lt;code&gt;/&lt;/code&gt; appended to it, this behaviour has been corrected and will now always remove any trailing &lt;code&gt;/&lt;/code&gt; characters.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/15216&quot;&gt;JDBC kerberos problems on IBM JDK 8&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the release of Open Liberty 21.0.0.5 the following issues have been resolved when using JDBC kerberos with an IBM Java 8 installation:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Fixed needing to use a &lt;code&gt;file:/&lt;/code&gt; URL pattern for keytab and ccache files.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fixed incorrectly identifying when a password is set.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fixed various problems related to interactive vs non-interactive modes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fixed &lt;code&gt;Received fatal alert: protocol_version&lt;/code&gt; error.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/16661&quot;&gt;Ensure MP Config properties from the application are visible when mpOpenApi-2.0 runs filters&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When using &lt;code&gt;mpOpenApi-2.0&lt;/code&gt;, OpenAPI filters can look up MicroProfile Config values from a &lt;code&gt;microprofile-config.properties&lt;/code&gt; file included in the application. Previously this functionality did not work and MicroProfile Config would erroneously report that the configuration property did not exist. This behaviour has been corrected and OpenAPI filters will now function as expected.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/16764&quot;&gt;Correct the synchronization when mpOpenApi-2.0 processes applications&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Prior to the release of Open Liberty 21.0.0.5, when using &lt;code&gt;mpOpenApi-2.0&lt;/code&gt;, starting two applications concurrently could occasionally produce a number of errors and ultimately OpenAPI documentation may not be created correctly for either application. This behaviour has now been corrected and OpenAPI documentation will be created for one of the applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information visit the &lt;a href=&quot;/docs/latest/reference/feature/openapi-3.1.html&quot;&gt;MicroProfile OpenAPI documentation&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-open-liberty-21-0-0-5-now&quot;&gt;Get Open Liberty 21.0.0.5 now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Available through &lt;a href=&quot;#run&quot;&gt;Maven, Gradle, Docker, and as a downloadable archive&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 14 May 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/05/14/ldap-multipart-21005.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/05/14/ldap-multipart-21005
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>security</category>
        
        <category>jakarta-ee</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Faster startup in Open Liberty dev mode with Eclipse OpenJ9 0.26.0</title>
        <description>&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 0.26.0 release of Eclipse OpenJ9 includes updates that improve startup times for Open Liberty servers that run in development mode. This post looks at the changes behind those improvements and how you can take advantage of them.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty development mode, or &lt;a href=&quot;/docs/latest/development-mode.html&quot;&gt;dev mode&lt;/a&gt;, enhances the developer experience by providing hot reload and deployment, on-demand testing, and debugger support. &lt;a href=&quot;https://www.eclipse.org/openj9/&quot;&gt;OpenJ9&lt;/a&gt; is a scalable, high-performance, Java virtual machine (JVM) implementation. One of the biggest benefits of OpenJ9 is fast startup, thanks to the &lt;a href=&quot;https://www.eclipse.org/openj9/docs/shrc/&quot;&gt;Shared Classes Cache (SCC) feature&lt;/a&gt;, which contains both classes and previously (dynamically) compiled &lt;a href=&quot;https://www.eclipse.org/openj9/docs/aot/&quot;&gt;Ahead-of-time (AOT) Code&lt;/a&gt;. AOT Compilation in OpenJ9 is the process of &lt;a href=&quot;https://blog.openj9.org/2018/10/10/intro-to-ahead-of-time-compilation/&quot;&gt;compiling code in one JVM instance to reuse it in another JVM instance&lt;/a&gt;. When you use a Java SDK with the OpenJ9 VM to run Open Liberty, the VM feature that enables dev mode is called Full Speed Debug (FSD). Before OpenJ9 version 0.26.0, the VM did not have AOT support for FSD. Therefore, Open Liberty dev mode did not benefit from the fast startup that normally comes with OpenJ9. However, from version 0.26.0 onward, FSD support is added for AOT compilations, and Open Liberty dev mode gets a boost in startup time from the SCC.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;How did this improvement occur? First, a significant improvement was made in FSD performance when FSD is implemented with another feature known as &lt;a href=&quot;https://blog.openj9.org/2019/04/30/introduction-to-full-speed-debug-base-on-osr/&quot;&gt;OSR&lt;/a&gt;. This new implementation naturally facilitated generalization to relocatable compilations. The main idea behind FSD is, if a debug event occurs, an application thread moves from the middle of a compiled body to the interpreter. This transition ensures that compiled code can be highly optimized because the compiler does not need to worry about the consequences of debug events. When no more debug events exist, the application thread is allowed to run compiled code again.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Adding AOT support boiled down to ensuring that all the OSR data in the compiled body’s metadata and any breakpoint guards can be relocated&lt;sup class=&quot;footnote&quot;&gt;[&lt;a id=&quot;_footnoteref_1&quot; class=&quot;footnote&quot; href=&quot;#_footnotedef_1&quot; title=&quot;View footnote.&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;&lt;sup class=&quot;footnote&quot;&gt;[&lt;a id=&quot;_footnoteref_2&quot; class=&quot;footnote&quot; href=&quot;#_footnotedef_2&quot; title=&quot;View footnote.&quot;&gt;2&lt;/a&gt;]&lt;/sup&gt;&lt;sup class=&quot;footnote&quot;&gt;[&lt;a id=&quot;_footnoteref_3&quot; class=&quot;footnote&quot; href=&quot;#_footnotedef_3&quot; title=&quot;View footnote.&quot;&gt;3&lt;/a&gt;]&lt;/sup&gt;. The OSR data is needed to ensure the transition from the compiled code into the interpreter. The breakpoint guards are needed to ensure that debug events are respected when a method gets inlined. Other subtleties are involved regarding relocations, which you can read about in the previously cited pull requests. However, the practical impact of these changes is a noticeable difference in the user experience of dev mode.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To give a more objective description of the improvement, I ran dev mode on the &lt;a href=&quot;https://github.com/WASdev/sample.daytrader7&quot;&gt;DayTrader7 benchmark application&lt;/a&gt; and I observed that the startup time was roughly halved. I measured this improvement by starting and stopping an Open Liberty server that was running on 4CPUs, without measuring the  startup time for the first run. The first time dev mode runs with OpenJ9 0.26.0, it seems slower because the first run generates all the AOT code that is placed in the SCC. All subsequent invocations of dev mode are noticeably faster.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To conclude, I recommend upgrading your Java SDK to use &lt;a href=&quot;https://github.com/eclipse/openj9/releases/tag/openj9-0.26.0&quot;&gt;OpenJ9 0.26.0&lt;/a&gt; so you too can benefit from a drastic improvement in Open Liberty dev mode performance with OpenJ9.&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;hr&gt;
&lt;div class=&quot;footnote&quot; id=&quot;_footnotedef_1&quot;&gt;
&lt;a href=&quot;#_footnoteref_1&quot;&gt;1&lt;/a&gt;. &lt;a href=&quot;https://github.com/eclipse-openj9/openj9/pull/11552&quot; class=&quot;bare&quot;&gt;https://github.com/eclipse-openj9/openj9/pull/11552&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;footnote&quot; id=&quot;_footnotedef_2&quot;&gt;
&lt;a href=&quot;#_footnoteref_2&quot;&gt;2&lt;/a&gt;. &lt;a href=&quot;https://github.com/eclipse-openj9/openj9/pull/11553&quot; class=&quot;bare&quot;&gt;https://github.com/eclipse-openj9/openj9/pull/11553&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;footnote&quot; id=&quot;_footnotedef_3&quot;&gt;
&lt;a href=&quot;#_footnoteref_3&quot;&gt;3&lt;/a&gt;. &lt;a href=&quot;https://github.com/eclipse-openj9/openj9/pull/11554&quot; class=&quot;bare&quot;&gt;https://github.com/eclipse-openj9/openj9/pull/11554&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 30 Apr 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/04/30/dev-mode-with-aot.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/04/30/dev-mode-with-aot
          
        </guid>
        
        <category>java-se</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        <category>performance-enhancements</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Building Multipart payloads for JAX-RS client and services in Open Liberty 21.0.0.5-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With Open Liberty 21.0.0.5-beta you can now build multipart payloads for your JAX-RS client and services. Also present in this release is Jakarta EE 9 support for &lt;code&gt;oauth-2.0&lt;/code&gt; and &lt;code&gt;samlWeb-2.0&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a larger package that contains all Open Liberty beta features (including Jakarta EE 9 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#webservices&quot;&gt;Build multipart payloads for your JAX-RS client and services&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jee9support&quot;&gt;Jakarta EE 9 support for oauth-2.0 and samlWeb-2.0&lt;/a&gt;s&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;webservices&quot;&gt;Build multipart payloads for your JAX-RS client and services&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Often, a RESTful service or client will need to send multiple disparate pieces of data in the same request, for example, uploading a resume/CV with a picture and text for name and address. This is usually done using &lt;code&gt;multipart/form-data&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;While Liberty currently has APIs to enable users to &lt;em&gt;receive&lt;/em&gt; multipart/form-data payloads, it does not have any APIs to enable users to &lt;em&gt;send&lt;/em&gt; multipart payloads - until now. With the new &lt;code&gt;AttachmentBuilder&lt;/code&gt; API, users can now send multipart requests from their JAX-RS clients or send multipart payloads as responses from their JAX-RS resources.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To send a multipart request, you will need to enable the &lt;code&gt;jaxrs-2.0&lt;/code&gt; or &lt;code&gt;jaxrs-2.1&lt;/code&gt; feature. Presumably, if you are already using JAX-RS, one of these features will already be enabled. To send a multipart payload, you must send an instance of &lt;code&gt;List&amp;lt;IAttachment&amp;gt;&lt;/code&gt;.  Each object in that list represents a single attachment part.  Here is an example of creating and sending a multipart request from a JAX-RS client:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;IAttachment&amp;gt; attachments = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;ArrayList&lt;/span&gt;&amp;lt;&amp;gt;();

attachments.add(AttachmentBuilder.newBuilder(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;blogPost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .inputStream(&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;FileInputStream&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/path/to/yesterdaysBlogPost.xml&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;))
                                 .fileName(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myRenamedBlogPost.asciidoc&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .contentType(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;text/asciidoc&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .contentId(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myBlogPostID&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .header(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;X-PriorityLevel&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Medium&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .build());

attachments.add(AttachmentBuilder.newBuilder(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;file1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .inputStream(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;some.xml&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;FileInputStream&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/path/to/myPicture.png&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;))
                                 .contentType(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;image/png&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .build());

attachments.add(AttachmentBuilder.newBuilder(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;authorName&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
                                 .inputStream(&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;ByteArrayInputStream&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;John Doe&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;.getBytes()))
                                 .build());

Response response = client.target(BLOG_SITE_URI)
                          .request()
                          .post(&lt;span class=&quot;predefined-type&quot;&gt;Entity&lt;/span&gt;.entity(attachments, MediaType.MULTIPART_FORM_DATA));&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information vist:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://tools.ietf.org/html/rfc7578&quot;&gt;multipart/form-data RFC 7578&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;jee9support&quot;&gt;Jakarta EE 9 support for oauth-2.0 and samlWeb-2.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;oauth-2.0&lt;/code&gt; and &lt;code&gt;samlWeb-2.0&lt;/code&gt; features have been updated to support Jakarta EE 9. Now these features will automatically adapt to the level of Java EE or Jakarta EE that is already in use. This means that there is no change needed when using them with Jakarta EE 9.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;Add the following dependency to your &lt;code&gt;pom.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.5-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add a dependency for the beta version of each of the APIs that you&amp;#8217;d like to try. For example, to try MicroProfile Config 2.0:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.microprofile.config&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;microprofile-config-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add add the following &lt;code&gt;runtimeArtifact&lt;/code&gt; section to the &lt;code&gt;configuration&lt;/code&gt; section of your &lt;code&gt;pom.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.5-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[21.0.0.5-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As of the 21.0.0.2-beta release, Open Liberty is the first vendor product to be Jakarta EE Web Profile 9.0 compatible. With the recent 21.0.0.3-beta release, Open Liberty is the first vendor product to be added to the &lt;a href=&quot;https://jakarta.ee/compatibility/#tab-9&quot;&gt;Jakarta EE Platform 9.0 compatibility list&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This Open Liberty beta release comes complete with all of the previously released Jakarta EE9 API candidates.
For more information about Open Liberty&amp;#8217;s Jakarta EE 9 compatability, view our &lt;a href=&quot;/blog/2021/03/05/jakarta-ee-9-compatibility.html&quot;&gt;Open Liberty beta is Jakarta EE 9 compatible&lt;/a&gt; blog release.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9 beta features in your app&amp;#8217;s &lt;code&gt;server.xml&lt;/code&gt;. You can enable the individual features you want or you can just add the Jakarta EE 9 convenience feature to enable all of the Jakarta EE 9 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now-2&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9 Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.5-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[21.0.0.5-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 16 Apr 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/04/16/JAXRS-multipart-payloads-21005-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/04/16/JAXRS-multipart-payloads-21005-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>LDAP connection support for Kerberos authentication in Open Liberty 21.0.0.4-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 21.0.0.4-beta contains new authentication methods for LDAP connections and the complete suite of Jakarta EE 9 API candidates.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the release of Open Liberty 21.0.0.3, MicroProfile 4.0 and associated components are promoted to the general availability release. For more information, see the &lt;a href=&quot;https://openliberty.io/blog/2021/03/19/microprofile-4-21003.html&quot;&gt;Open Liberty 21.0.0.3 release blog post&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a larger package that contains all Open Liberty beta features (including Jakarta EE 9 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#LDAP&quot;&gt;LDAP connection support for Kerberos authentication&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;LDAP&quot;&gt;LDAP connection support for Kerberos authentication&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;LDAP bind operations are used to authenticate clients (and the users or applications behind them) to the directory server. This establishes an authorization identity that is used for subsequent operations that are processed on that connection, and specifies the LDAP protocol version that the client uses. Before this update, the &lt;code&gt;LdapRegistry&lt;/code&gt; element supported binding either anonymously or by using simple authentication with a user (&lt;code&gt;bindDN&lt;/code&gt;) and password (&lt;code&gt;bindPassword&lt;/code&gt;). This update adds an option to bind to LDAP: GSSAPI/Kerberos. Kerberos is an authentication mechanism that allows a client and service to mutually authenticate by a Key Distribution Center (KDC). In Open Liberty 21.0.0.4-beta,  you can use either a Kerberos credential cache (ccache) or a Kerberos keytab file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To update an &lt;code&gt;LdapRegistry&lt;/code&gt; to use the GSSAPI/Kerberos option, you can set the bind authentication mechanism type using the new &lt;code&gt;LdapRegistry&lt;/code&gt; attribute, &lt;code&gt;bindAuthMechanism&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;bindAuthMechanism=&amp;quot;GSSAPI&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You also need the Kerberos principal or Service Principal Name:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;krb5Principal=&amp;quot;user1@EXAMPLE.COM&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you are using a Kerberos credential cache (ticket cache or ccache) to store the Kerberos credentials, add the ticket cache file name to the &lt;code&gt;LdapRegistry&lt;/code&gt; with the new attribute, &lt;code&gt;krb5TicketCache&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;krb5TicketCache=&amp;quot;${server.config.dir}/security/krb5-user1.cc&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you are using a custom Kerberos configuration file (krb.conf or krb.ini), set the file name using the global Kerberos configuration element:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;kerberos&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;configFile&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5.conf&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you are using a Kerberos keytab file to store encrypted keys for principals, set the file using the global Kerberos configuration element:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;kerberos&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;keytab&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5.keytab&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;configFile&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5.conf&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If the Kerberos configuration file is not defined, Open Liberty will attempt to resolve by using the JDK default locations and the operating system default locations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For the Kerberos credentials, the locations are checked in the following order: the ticket cache (if provided), the configured keytab file, and finally the JDK default location.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to configure the &lt;code&gt;LdapRegistry&lt;/code&gt; element using a ticket cache and custom Kerberos config file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;kerberos&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;keytab&lt;/span&gt;= &lt;span class=&quot;attribute-value&quot;&gt;configFile&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;attribute-name&quot;&gt;server.config.dir&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;attribute-name&quot;&gt;security&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;attribute-name&quot;&gt;krb5.conf&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;ldapRegistry&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;LDAP&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;realm&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SampleLdapADRealm&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;host&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ldap_hostname&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;port&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;389&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;ignoreCase&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;baseDN&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DC=example,DC=com&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;bindAuthMechanism&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;GSSAPI&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;krb5Principal&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;user1@EXAMPLE.COM&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;krb5TicketCache&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5-user1.cc&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;ldapType&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Custom&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following example shows how to configure an LDAP Registry using a keytab and custom Kerberos config file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;kerberos&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;keytab&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5.keytab&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;configFile&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/security/krb5.conf&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;ldapRegistry&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;LDAP&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;realm&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;SampleLdapADRealm&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;host&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ldap_hostname&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;port&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;389&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;ignoreCase&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;baseDN&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DC=example,DC=com&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;bindAuthMechanism&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;GSSAPI&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;krb5Principal&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;user1@EXAMPLE.COM&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;ldapType&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Custom&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on &lt;code&gt;LdapRegistry&lt;/code&gt;, see the &lt;a href=&quot;https://openliberty.io/docs/latest/reference/feature/ldapRegistry-3.0.html&quot;&gt;LDAP User Registry documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable this new beta function in your app, pull the All Beta Features package and add the LDAP User Registry 3.0 feature to your &lt;code&gt;server.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;ldapRegistry-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;Add the following dependency to your &lt;code&gt;pom.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.4-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add a dependency for the beta version of each of the APIs that you&amp;#8217;d like to try. For example, to try MicroProfile Config 2.0:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.microprofile.config&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;microprofile-config-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add add the following &lt;code&gt;runtimeArtifact&lt;/code&gt; section to the &lt;code&gt;configuration&lt;/code&gt; section of your &lt;code&gt;pom.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.4-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[21.0.0.4-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As of the 21.0.0.2-beta release, Open Liberty is the first vendor product to be Jakarta EE Web Profile 9.0 compatible. With the recent 21.0.0.3-beta release, Open Liberty is the first vendor product to be added to the &lt;a href=&quot;https://jakarta.ee/compatibility/#tab-9&quot;&gt;Jakarta EE Platform 9.0 compatibility list&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This Open Liberty beta release comes complete with all of the previously released Jakarta EE9 API candidates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Messaging 3.0 (&lt;code&gt;messaging-3.0, messagingClient-3.0, messagingServer-3.0, messagingSecurity-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Security 2.0 (&lt;code&gt;appSecurity-4.0, appSecurityClient-1.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta XML Web Services 3.0 (&lt;code&gt;xmlWS-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Batch 2.0 (&lt;code&gt;batch-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Mail (&lt;code&gt;mail-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta WebSocket 2.0 (&lt;code&gt;websocket-2.0&lt;/code&gt;; now with full CDI integration)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RESTful Web Services 3.0 (&lt;code&gt;restfulWS-3.0&lt;/code&gt; and &lt;code&gt;restfulWSClient-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Server Faces 3.0 (&lt;code&gt;faces-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Connectors 2.0 (&lt;code&gt;connectors-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans 4.0 (&lt;code&gt;enterpriseBeans-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Remote 4.0 (&lt;code&gt;enterpriseBeansRemote-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Home 4.0 (&lt;code&gt;enterpriseBeansHome-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Lite 4.0 (&lt;code&gt;enterpriseBeansLite-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Persistent Timers 4.0 (&lt;code&gt;enterpriseBeansPersistentTimer-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta EE Application Client 9.0 (&lt;code&gt;jakartaeeClient-9.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Authentication 2.0 (&lt;code&gt;appAuthentication-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Authorization 2.0 (&lt;code&gt;appAuthorization-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Persistence 3.0 (includes Eclipselink 3.0-GA.) (&lt;code&gt;persistence-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta XML Binding 3.0 (&lt;code&gt;xmlBinding-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Managed Beans 2.0 (&lt;code&gt;managedBeans-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Concurrency 2.0 (&lt;code&gt;concurrent-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Bean Validation 3.0 (&lt;code&gt;beanValidation-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Contexts and Dependency Injection 3.0 (&lt;code&gt;cdi-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Message-Driven Beans 4.0 (&lt;code&gt;mdb-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JDBC 4.2 &amp;amp; 4.3 (&lt;code&gt;jdbc-4.2&lt;/code&gt; &amp;amp; &lt;code&gt;jdbc-4.3&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Binding 2.0 (&lt;code&gt;jsonb-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Processing 2.0 (&lt;code&gt;jsonp-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Servlet 5.0 (&lt;code&gt;servlet-5.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Server Pages 3.0 (&lt;code&gt;pages-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Expression Language 4.0 (&lt;code&gt;expressionLanguage-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about Open Liberty&amp;#8217;s Jakarta EE 9 compatability, view our &lt;a href=&quot;https://openliberty.io/blog/2021/03/05/jakarta-ee-9-compatibility.html&quot;&gt;Open Liberty beta is Jakarta EE 9 compatible&lt;/a&gt; blog release.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9 beta features in your app&amp;#8217;s &lt;code&gt;server.xml&lt;/code&gt;. You can enable the individual features you want or you can just add the Jakarta EE 9 convenience feature to enable all of the Jakarta EE 9 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now-2&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9 Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.4-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[21.0.0.4-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;We welcome your feedback&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Mon, 22 Mar 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/03/22/ldap-kerberos-21004beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/03/22/ldap-kerberos-21004beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>security</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Enabling Jakarta EE 9 for development and test by using the Eclipse Transformer</title>
        <description>&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;overview&quot;&gt;Overview&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this post, we describe how to use the Eclipse Transformer to update your applications and test artifacts for Jakarta EE 9. We also describe the steps to update Open Liberty server configurations to run Jakarta EE 9 applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The core problem that is introduced by Jakarta EE 9 is the renaming of package prefixes from &lt;code&gt;javax&lt;/code&gt; to &lt;code&gt;jakarta&lt;/code&gt; for APIs and properties. As a consequence, existing applications that run against Java EE 7 or Jakarta EE 8 do not run against Jakarta EE 9. To run existing applications as Jakarta EE 9 applications, specific package references must be updated.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To solve this problem, the Open Liberty development team created the &lt;a href=&quot;https://projects.eclipse.org/projects/technology.transformer&quot;&gt;Eclipse Transformer&lt;/a&gt;. This open source project provides a utility that updates package references in various artifacts.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The development team uses the Eclipse Transformer to update bundle implementation archives. The team also uses the transformer to update test artifacts, including applications, test classes, and Open Liberty server configurations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Similarly, you can use the Eclipse Transformer to update applications, test classes, and server configurations. Updates to applications and test classes are usually necessary. Updates to server configurations are necessary when using Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The transformer is quick and efficient. When integrated as a build step, as is done in Open Liberty builds, using the transformer avoids the creation of new Jakarta EE 9 source files.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Although this post focuses on updating from Jakarta EE 8 to Jakarta EE 9, the same information holds true for updating from Java EE 7 to Jakarta EE 9.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;test-transformation-strategy&quot;&gt;Test transformation strategy&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To transform test artifacts, package references must be updated to change old &lt;code&gt;javax&lt;/code&gt; package references into new &lt;code&gt;jakarta&lt;/code&gt; package references. Package references can be in several locations, including test applications, test code, and server configurations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Additionally, in Open Liberty, server configurations must be updated to replace old Jakarta EE 8 features with corresponding new Jakarta EE 9 features. Currently, the transformer does not have the rules data necessary to specify feature name updates. These updates must either be made manually, through custom code, or by creating new rules data for the transformer. For more information about updating Open Liberty features, see &lt;a href=&quot;#features&quot;&gt;Updating Open Liberty features in server configurations&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;preparing-to-run-the-transformer&quot;&gt;Preparing to run the transformer&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A transformer image can be obtained either by downloading the image or by building an image by using the open source repository.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Top-level &lt;a href=&quot;https://projects.eclipse.org/projects/technology.transformer/downloads&quot;&gt;downloads links&lt;/a&gt; are available within the project pages.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Several current &lt;a href=&quot;https://oss.sonatype.org/content/repositories/snapshots/org/eclipse/transformer/org.eclipse.transformer.cli/&quot;&gt;snapshots&lt;/a&gt; are usually available.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Alternatively, the transformer can be built by cloning the &lt;a href=&quot;https://github.com/eclipse/transformer&quot;&gt;Eclipse Transformer repository&lt;/a&gt; and invoking maven to build the transformer JAR file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;    mvn clean package&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The maven build creates the distribution JAR file at:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;    org.eclipse.transformer.cli/target/org.eclipse.transformer.cli-0.3.0-SNAPSHOT-distribution.jar&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Unzipping the downloaded or built distribution obtains the transformer and prerequisite JAR files:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;    unzip org.eclipse.transformer.cli-0.3.0-SNAPSHOT-distribution.jar&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;    org.eclipse.transformer.cli-0.3.0-SNAPSHOT.jar
    libs/org.eclipse.transformer-0.3.0-SNAPSHOT.jar
    libs/biz.aQute.bnd.transform-5.2.0.jar
    libs/slf4j-api-1.7.25.jar
    libs/commons-cli-1.4.jar
    libs/slf4j-simple-1.7.30.jar&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;running-the-transformer&quot;&gt;Running the transformer&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Eclipse Transformer can be run directly from the command line, as a Gradle task, or from Java code. This post describes using the transformer from the command line. For more information, see the &lt;a href=&quot;https://projects.eclipse.org/projects/technology.transformer&quot;&gt;transformer project pages&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To run the transformer by using the default rules, run the following command:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;  java -jar org.eclipse.transformer.cli-0.3.0-SNAPSHOT.jar \
    &amp;lt;target_location&amp;gt; \
    &amp;lt;output_location&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The target location can be a packed application archive file (EAR, WAR, RAR, or JAR) or a directory that contains the fully or partially expanded contents of one of these archives. The target can also be a directory that contains Java source, or a directory that contains several application archives. It can even be a single file, such as a &lt;code&gt;server.xml&lt;/code&gt; file. The transformer processes all of the artifacts in the target location. Transformed artifacts are written to the output location.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;org.eclipse.transformer.cli-0.3.0-SNAPSHOT.jar&lt;/code&gt; file is a runnable JAR file that specifies &lt;code&gt;org.eclipse.transformer.jakarta.JakartaTransformer&lt;/code&gt; as the main class and uses the necessary JAR files from the &lt;code&gt;libs&lt;/code&gt; folder in its class path.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can run the transformer using custom rules by specifying options on the command line. The additional options specify local rules files that the transformer uses instead of the default rules files.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For example, to use Open Liberty rules data, which can be more up to date than the default rules data, download &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/tree/integration/dev/wlp-jakartaee-transform/rules&quot;&gt;Open Liberty Rules&lt;/a&gt;. Then, pull in the downloaded rules data by adding options &lt;code&gt;-tr&lt;/code&gt;, &lt;code&gt;-td&lt;/code&gt;, and &lt;code&gt;-tf&lt;/code&gt;, to the command-line invocation:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;  java -jar org.eclipse.transformer.cli-0.3.0-SNAPSHOT.jar \
    &amp;lt;target_location&amp;gt; \
    &amp;lt;output_location&amp;gt; \
    -tr ${rules}/jakarta-renames.properties \
    -td ${rules}/jakarta-direct.properties \
    -tf ${rules}/jakarta-xml-master.properties&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;-tr&lt;/code&gt; option specifies a properties file that contains package rename data. The &lt;code&gt;-td&lt;/code&gt; option specifies a properties file that contains java direct string replacement data. The &lt;code&gt;-tf&lt;/code&gt; option specifies a main properties file that links to other properties files. Each of the linked properties files contains replacement data for text-like files that match specific patterns, as specified in the main properties file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These three command-line options are most important for application and test developers. Other command line options are available, but are less important. For example, the option &lt;code&gt;-tb&lt;/code&gt; is used to specify data for transforming bundle archives, while the option &lt;code&gt;-ts&lt;/code&gt; is used to specify which target files are to be transformed. For more information about command-line options, run the transformer with either the &lt;code&gt;-usage&lt;/code&gt; option or with the &lt;code&gt;-help&lt;/code&gt; option.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;  java -jar org.eclipse.transformer.cli-0.3.0-SNAPSHOT.jar \
    -usage&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;transforming-server-configurations&quot;&gt;Transforming server configurations&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When you specify your &lt;code&gt;server.xml&lt;/code&gt; file as a target location for the transformer, Open Liberty server configuration elements that contain &lt;code&gt;javax&lt;/code&gt; package references are updated to &lt;code&gt;jakarta&lt;/code&gt;. For example, the &lt;code&gt;destinationType&lt;/code&gt; attribute of the &lt;code&gt;jmsActivationSpec&lt;/code&gt; element contains a &lt;code&gt;javax&lt;/code&gt; package reference:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;  &amp;lt;jmsActivationSpec id=&amp;quot;SharedSubscriptionWithMsgSel/TestTopic1&amp;quot;&amp;gt;
    &amp;lt;properties.wasJms
        destinationRef=&amp;quot;jms/FAT_TOPIC&amp;quot;
        destinationType=&amp;quot;javax.jms.Topic&amp;quot;
        subscriptionDurability=&amp;quot;DurableShared&amp;quot;
        clientId=&amp;quot;cid1&amp;quot;
        subscriptionName=&amp;quot;DURSUB&amp;quot;/&amp;gt;
  &amp;lt;/jmsActivationSpec&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This configuration is updated to:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;  &amp;lt;jmsActivationSpec id=&amp;quot;SharedSubscriptionWithMsgSel/TestTopic1&amp;quot;&amp;gt;
    &amp;lt;properties.wasJms
        destinationRef=&amp;quot;jms/FAT_TOPIC&amp;quot;
        destinationType=&amp;quot;jakarta.jms.Topic&amp;quot;
        subscriptionDurability=&amp;quot;DurableShared&amp;quot;
        clientId=&amp;quot;cid1&amp;quot;
        subscriptionName=&amp;quot;DURSUB&amp;quot;/&amp;gt;
  &amp;lt;/jmsActivationSpec&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Only package names in the server configuration are updated by the transformer. Features must be handled separately&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;features&quot;&gt;Updating Open Liberty features in server configurations&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For Jakarta EE 9 applications to run in Open Liberty, new Jakarta EE 9 features must be specified in the server configuration. In many cases, the new Jakarta EE 9 features use the same short names as the corresponding Jakarta EE 8 features. In those cases, the Jakarta EE 9 features simply have an updated feature version. For example, &lt;code&gt;cdi-2.0&lt;/code&gt; was updated to &lt;code&gt;cdi-3.0&lt;/code&gt;. However, in some cases, the feature short name is also different, as with &lt;code&gt;ejb-3.2&lt;/code&gt;, which was updated to &lt;code&gt;enterpriseBeans-4.0&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If an old short name is incorrectly used with a new Jakarta EE 9 version, the server does not start, and the server logs provide information to say which new feature short name must be used. For example, if &lt;code&gt;ejb-3.2&lt;/code&gt; is incorrectly changed to &lt;code&gt;ejb-4.0&lt;/code&gt;, the server logs indicate that &lt;code&gt;enterpriseBeans-4.0&lt;/code&gt; must be used.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Currently, the transformer cannot update Open Liberty features because it is missing rules data to specify the updates. Features must be updated manually or by custom code.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following table lists features for which only the feature version is updated:&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;caption class=&quot;title&quot;&gt;Table 1. Jakarta EE 8 to Jakarta EE 9 feature updates: version only&lt;/caption&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 50%;&quot;&gt;
&lt;col style=&quot;width: 50%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Jakarta EE 8 feature name&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Jakarta EE 9 feature name&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;appClientSupport-1.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;appClientSupport-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;appSecurity-3.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;appSecurity-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;batch-1.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;batch-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;beanValidation-2.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;beanValidation-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;cdi-2.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;cdi-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;concurrent-1.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;concurrent-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jakartaee-8.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jakartaee-9.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsonb-1.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsonb-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsonbContainer-1.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsonbContainer-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsonp-1.1&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsonp-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsonpContainer-1.1&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsonpContainer-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;managedBeans-1.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;managedBeans-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mdb-3.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mdb-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;servlet-4.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;servlet-5.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;webProfile-8.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;webProfile-9.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;websocket-1.1&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;websocket-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following table lists features for which both the feature short name and the feature version are updated:&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;tableblock frame-all grid-all stretch&quot;&gt;
&lt;caption class=&quot;title&quot;&gt;Table 2. Jakarta EE 8 to Jakarta EE 9 feature updates: short name and version&lt;/caption&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 50%;&quot;&gt;
&lt;col style=&quot;width: 50%;&quot;&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Jakarta EE 8 feature name&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot;&gt;Jakarta EE 9 feature name&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;ejb-3.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;enterpriseBeans-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;ejbHome-3.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;enterpriseBeansHome-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;ejbLite-3.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;enterpriseBeansLite-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;ejbPersistentTimer-3.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;enterpriseBeansPersistentTimer-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;ejbRemote-3.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;enterpriseBeansRemote-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;el-3.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;expressionLanguage-4.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jacc-1.5&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;appAuthorization-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jaspic-1.1&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;appAuthentication-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;javaee-8.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jakartaee-9.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;javaeeClient-8.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jakartaeeClient-9.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;javaMail-1.6&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;mail-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jaxb-2.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;xmlBinding-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jaxrs-2.1&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;restfulWS-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jaxrsClient-2.1&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;restfulWSClient-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jaxws-2.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;xmlWS-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jca-1.7&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;connectors-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jcaInboundSecurity-1.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;connectorsInboundSecurity-2.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jms-2.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;messaging-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jpa-2.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;persistence-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jpaContainer-2.2&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;persistenceContainer-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsf-2.3&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;faces-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsfContainer-2.3&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;facesContainer-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;jsp-2.3&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;pages-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;wasJmsClient-2.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;messagingClient-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;wasJmsSecurity-1.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;messagingSecurity-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;wasJmsServer-1.0&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot;&gt;&lt;p class=&quot;tableblock&quot;&gt;messagingServer-3.0&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;reference-resources&quot;&gt;Reference Resources&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;eclipse-transformer-project-links&quot;&gt;Eclipse Transformer Project Links&lt;/h3&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &lt;a href=&quot;https://projects.eclipse.org/projects/technology.transformer&quot;&gt;Main Eclipse Transformer page&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/eclipse/transformer&quot;&gt;Eclipse Transformer GIT repository&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Top level &lt;a href=&quot;https://projects.eclipse.org/projects/technology.transformer/downloads&quot;&gt;downloads&lt;/a&gt; page.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Several current transformer &lt;a href=&quot;https://oss.sonatype.org/content/repositories/snapshots/org/eclipse/transformer/org.eclipse.transformer.cli/&quot;&gt;snapshots&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;open-liberty-project-links&quot;&gt;Open Liberty Project Links&lt;/h3&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Open Liberty transformer data: &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/tree/integration/dev/wlp-jakartaee-transform/rules&quot;&gt;dev/wlp-jakartaee-transform/rules&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open Liberty gradle tasks used to transform bundle implementation JAR files: &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/blob/integration/dev/wlp-gradle/subprojects/tasks.gradle&quot;&gt;dev/wlp-gradle/subprojects/tasks.gradle&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open Liberty Java transformer invocation used on FAT (Feature Acceptance Test) artifacts: &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/blob/integration/dev/fattest.simplicity/src/componenttest/rules/repeater/JakartaEE9Action.java#L204&quot;&gt;JakartaEE9Action.transformApp&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Java source for the the custom Open Liberty &quot;repeat test action&quot;: &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/blob/integration/dev/fattest.simplicity/src/componenttest/rules/repeater/JakartaEE9Action.java&quot;&gt;dev/fattest.simplicity/src/componenttest/rules/repeater/JakartaEE9Action.java&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Wed, 17 Mar 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/03/17/eclipse-transformer.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/03/17/eclipse-transformer
          
        </guid>
        
        <category>jakarta-ee</category>
        
        <category>test</category>
        
        <category>developer-experience</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Open Liberty beta is Jakarta EE 9 compatible</title>
        <description>&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://jakarta.ee/&quot;&gt;&lt;img src=&quot;/img/blog/JakartaEE_Logo_Compatible-color.png&quot; alt=&quot;JakartaEE Logo Compatible color&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Late last year, the Jakarta EE community released the next step in the evolution of the Jakarta EE specification.  &lt;a href=&quot;https://jakarta.ee/specifications/platform/9/jakarta-platform-spec-9.html&quot;&gt;Version 9.0 of the Jakarta EE specification&lt;/a&gt; focuses on renaming packages and namespaces by changing to jakarta prefixed packages names in the API and to the &lt;a href=&quot;https://jakarta.ee/xml/ns/jakartaee/&quot;&gt;jakarta.ee namespace&lt;/a&gt; in the deployment descriptor files.  Additionally, the specification makes optional or removes older functions that have been deprecated or stabilized for many years.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Over the last year, the Open Liberty development team worked to implement the Jakarta EE 9 specification as it was being finalized.  To avoid having to duplicate the code just to change the API package names, the team developed an &lt;a href=&quot;https://projects.eclipse.org/projects/technology.transformer&quot;&gt;open source byte code transformation technology&lt;/a&gt;.  With this technology, Jakarta EE 8 compatible code is transformed to work with Jakarta EE 9 APIs by manipulating the byte code to convert class and property reference prefixes from &lt;code&gt;javax&lt;/code&gt; to &lt;code&gt;jakarta&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As of the &lt;a href=&quot;https://openliberty.io/blog/2021/01/26/ee9-messaging-security-21002-beta.html&quot;&gt;21.0.0.2-beta release&lt;/a&gt;, Open Liberty is the first vendor product to be &lt;a href=&quot;https://jakarta.ee/compatibility/#tab-9&quot;&gt;Jakarta EE Web Profile 9.0 compatible&lt;/a&gt;.  With the recent &lt;a href=&quot;https://openliberty.io/blog/2021/02/19/mpcontextpropagation-requesttiming-21003-beta.html&quot;&gt;21.0.0.3-beta release&lt;/a&gt;, Open Liberty is the first vendor product to be added to the Jakarta EE Platform 9.0 compatibility list.  These releases continue to demonstrate Open Liberty&amp;#8217;s leadership in the Jakarta EE technologies.  With the upcoming &lt;a href=&quot;https://jakarta.ee/specifications/platform/9.1/&quot;&gt;Jakarta EE 9.1 release&lt;/a&gt; that adds Java 11 support to the TCK, I anticipate that Open Liberty will be added to the compatibility list for the 9.1 release when it is available since &lt;a href=&quot;https://openliberty.io/blog/2019/02/06/java-11.html&quot;&gt;Open Liberty has supported Java 11&lt;/a&gt; for the last 2 years.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Even with reaching these milestones, the journey to support Jakarta EE 9 in the Open Liberty product will continue until it is available in a non-beta release.  Many Liberty value-add features need to be enabled to run with Jakarta EE 9 and still continue to work with the previous EE specifications.  In the coming months, you will see additional enablement of these features in the beta releases until all are ready.  Thanks to the Open Liberty &lt;a href=&quot;https://www.openliberty.io/docs/latest/zero-migration-architecture.html#_open_liberty_features&quot;&gt;pluggable feature architecture&lt;/a&gt;, you will be able to run your Java EE 7, Java / Jakarta EE 8 and Jakarta EE 9 applications with the same product install.&lt;/p&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 05 Mar 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/03/05/jakarta-ee-9-compatibility.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/03/05/jakarta-ee-9-compatibility
          
        </guid>
        
        <category>announcements</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>developer-experience</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>MicroProfile Context Propagation 1.2, RequestTiming 1.0 and JakartaMail 2.0 in Open Liberty 21.0.0.3-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;hr&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 21.0.0.3-beta contains five new features; MicroProfile Context Propagation 1.2, JakartaMail 2.0, the ability to control hung request thread dumps, automatic cleanup of leaked connections, and finally, a new &lt;code&gt;expandLocation&lt;/code&gt; property for App Manager configuration.&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a larger package that contains all Open Liberty beta features (including Jakarta EE 9 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;#try&quot;&gt;Try it now&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In addition to all Jakarta EE 9 and MicroProfile 4.0 beta features, Open Liberty 21.0.0.3-beta also contains five brand new features.&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#MPContext&quot;&gt;MicroProfile Context Propagation 1.2&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#requestTiming&quot;&gt;Ability to control whether thread dumps are collected when a hung request is detected in the Request Timing feature&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#leakedConnections&quot;&gt;Automatic Cleanup of Leaked Connections&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#expandLocation&quot;&gt;expandLocation property for App Manager configuration&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These features also join all the MicroProfile 4.0 features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2020/10/27/microprofile40-jakartaee9-beta-200012.html#conf&quot;&gt;MicroProfile Config 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2020/09/02/jakarta-microprofile-beta-200010.html#metrics&quot;&gt;MicroProfile Metrics 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2020/09/02/jakarta-microprofile-beta-200010.html#opentracing&quot;&gt;MicroProfile OpenTracing 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2020/09/02/jakarta-microprofile-beta-200010.html#health&quot;&gt;MicroProfile Health 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2020/09/29/microprofile-openapi-beta-200011.html#openAPI&quot;&gt;MicroProfile OpenAPI 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2020/11/24/microprofile-rest-client-kubernetes-secrets-21001beta.html#MP&quot;&gt;MicroProfile Rest Client 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2020/10/27/microprofile40-jakartaee9-beta-200012.html#jwt&quot;&gt;MicroProfile JWT 1.2&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2020/09/02/jakarta-microprofile-beta-200010.html#fault&quot;&gt;MicroProfile Fault Tolerance 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;MPContext&quot;&gt;MicroProfile Context Propagation 1.2&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Context Propagation is a standalone MicroProfile specification. This new Open Liberty feature enables you to create completion stages that behave deterministically with respect to thread context and leverages the autonomic tuning of the Liberty global thread pool for asynchronous dependent stages.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The 1.2 release of MicroProfile Context Propagation aligns with the MicroProfile 4.0 platform, specifically addressing a difference in how MicroProfile Config 2.0 treats empty value configuration properties. When using MicroProfile Config to specify an empty list of thread context types for MicroProfile Context Propagation to use as defaults, use a value of &lt;code&gt;None&lt;/code&gt; rather than an empty value. An empty value in MicroProfile Config 2.0 indicates to override any lower ordinal config sources and instead use the built-in default value for the property.  For example, the combination of &lt;code&gt;mp.context.ManagedExecutor.cleared=None&lt;/code&gt; and &lt;code&gt;mp.context.ManagedExecutor.propagated=Remaining&lt;/code&gt; causes every context type to be propagated.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the MicroProfile Context Propagation 1.2 feature, add the following to your server configuration,&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpContextPropagation-1.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- other features used by example code... --&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jdbc-4.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jndi-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Example usage within a Servlet:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; ManagedExecutor executor;

&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; init(ServletConfig config) &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException {
    executor = ManagedExecutor.builder()
                .propagated(ThreadContext.APPLICATION)
                .cleared(ThreadContext.ALL_REMAINING)
                .build();
}

&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; destroy() {
    executor.shutdownNow();
}

&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doGet(HttpServletRequest req, HttpServletResponse resp)
    &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt; {
    ...
    executor.copy(unmanagedCompletionStage).thenAcceptAsync(value -&amp;gt; {
        &lt;span class=&quot;comment&quot;&gt;// requires java:comp namespace of the application,&lt;/span&gt;
        &lt;span class=&quot;predefined-type&quot;&gt;DataSource&lt;/span&gt; ds = &lt;span class=&quot;predefined-type&quot;&gt;InitialContext&lt;/span&gt;.doLookup(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;java:comp/env/jdbc/ds&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
        ...
    });
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Find out more:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-context-propagation-1.2-RC1/microprofile-context-propagation-spec-1.2-RC1.html&quot;&gt;The MicroProfile Context Propagation 1.2 Release Candidate 1 specification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-context-propagation-1.2-RC1/apidocs/&quot;&gt;The MicroProfile Context Propagation 1.2 Release Candidate 1 JavaDoc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;requestTiming&quot;&gt;Ability to control whether thread dumps are collected when a hung request is detected in the Request Timing feature&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Request Timing feature (&lt;code&gt;requestTiming-1.0&lt;/code&gt;) provides diagnostic information when the duration of any request exceeds the configured threshold. It provides a way to monitor requests with respect to time. The feature can automatically detect slow and hung requests and provide detailed diagnostic information; warning messages, thread stacks, and the creation of thread dumps.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When a hung request is detected in the Request Timing feature, a warning message is written in the messages log file along with a dump of the events that happened during the request. Following that, a set of three thread dumps will be initiated, 1 minute apart. After the completion of the three thread dumps, further set of three thread dumps are created only if new requests are detected to be hanging.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Some operations teams do not want so many thread dumps to be generated due to performance overhead on requests that are known to be long. In previous Open Liberty releases, there was no option to disable the thread dumps from being generated.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can now control whether the Request Timing feature collects thread dumps. By setting the &lt;strong&gt;NEW&lt;/strong&gt; &lt;code&gt;enableThreadDumps&lt;/code&gt; Request Timing server configuration attribute to false, thread dumps will not be created during hung requests. If the new server configuration attribute is set to true or not specified at all, thread dumps will still be created.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new Request Timing server configuration attribute can be configured in your server.xml as follows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;requestTiming&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;includeContextInfo&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;slowRequestThreshold&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;120s&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;hungRequestThreshold&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;10s&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;sampleRate&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;enableThreadDumps&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/requestTiming&amp;gt;&lt;/span&gt;`&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;enableThreadDumps&lt;/code&gt; server configuration attribute can also be used in embedded Request Timing sub-elements:
&lt;code&gt;&amp;lt;servletTiming/&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;jdbcTiming/&amp;gt;&lt;/code&gt;, as follows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;requestTiming&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;includeContextInfo&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;slowRequestThreshold&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;120s&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;hungRequestThreshold&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;10s&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;sampleRate&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;servletTiming&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;appName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;MyApp&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;servletName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;MyServletApp&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;slowRequestThreshold&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;100s&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;hungRequestThreshold&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;5s&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;enableThreadDumps&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/requestTiming&amp;gt;&lt;/span&gt;`&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Note: An embedded &lt;code&gt;&amp;lt;servletTiming/&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;jdbcTiming/&amp;gt;&lt;/code&gt; configuration element in the server.xml file overrides the configured slow and hung request threshold that are defined in &lt;code&gt;&amp;lt;requestTiming/&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on the Request Timing feature, please refer to the following documentations:
- &lt;a href=&quot;/docs/latest/reference/feature/requestTiming-1.0.html&quot;&gt;Open Liberty Documentation on requestTiming-1.0 feature&lt;/a&gt;
- &lt;a href=&quot;/docs/latest/reference/config/requestTiming.html&quot;&gt;Open Liberty Documentation on requestTiming Configuration&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;leakedConnections&quot;&gt;Automatic Cleanup of Leaked Connections&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty connection management is enhanced with the ability to automatically detect and close unsharable connections that are left open by the application across the end of a request.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Occasionally, application code might forget to close an unsharable connection that it obtains. This prevents the connection from being returned to the connection pool for use by other requests. Over time, these leaked connections can degrade performance and eventually exhaust the connection pool. Open Liberty connection management now has the ability to detect and automatically close these leaked connections to prevent this from happening.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To take advantage of this new capability, configure one of the Open Liberty features that leverages the &lt;code&gt;connectionManager&lt;/code&gt; element. For example, JDBC:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jdbc-4.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jndi-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- more features --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Configure connection managers for your data sources to enable the new &lt;code&gt;autoCloseConnections&lt;/code&gt; attribute,&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dataSource&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DefaultDataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;connectionManager&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;maxPoolSize&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;autoCloseConnections&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;jdbcDriver&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;libraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;PostgreSQL&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties.postgresql&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;databaseName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;TESTDB&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;serverName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;portNumber&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;5432&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dataSource&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;PostgreSQL&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;file&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/usr/local/postgresql/postgresql-42.2.18.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Find out more:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/config/connectionManager.html&quot;&gt;connectionManager config documentation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;expandLocation&quot;&gt;expandLocation property for App Manager configuration&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This enhancement allows the user to specify a expansion location (&lt;code&gt;expandLocation&lt;/code&gt;) on the &lt;code&gt;applicationManager&lt;/code&gt; configuration to be utilized when the &lt;code&gt;autoExpand&lt;/code&gt; attribute is set to &quot;true&quot;. As currently implemented, when an application is autoExpanded the default location for the expanded files are hard coded to &lt;code&gt;${server.config.dir}/apps/expanded/&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The user is now able to configure that location to a new value on the file system.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;applicationManager&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;autoExpand&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;expandLocation&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/myApps/&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;would result in the application being expanded at &lt;code&gt;${server.config.dir}/myApps/{appname}/&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This enhancement gives users more flexibility regarding the location of their expanded applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can find out more at &lt;a href=&quot;/docs/latest/reference/config/applicationManager.html&quot;&gt;Open Liberty applicationManager documentation&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This Open Liberty beta introduces the following Jakarta EE 9 feature which now possesses its all-new Jakarta EE 9 package name:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mail&quot;&gt;JakartaMail (&lt;code&gt;mail-2.0&lt;/code&gt;)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This feature joins the Jakarta EE 9 features in &lt;a href=&quot;/blog/2021/01/26/ee9-messaging-security-21002-beta.html#jakarta&quot;&gt;Open Liberty 21.0.0.2-beta Jakarta functions&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mail&quot;&gt;JakartaMail&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Java EE framework has been migrated to the open source Eclipse Jakarta EE Project. As part of this migration JavaMail version 1.6 has been migrated to JakartaMail 2.0. The API package names for the classes previously found under the javax.mail have been migrated to jakarta.mail.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Jakarta mail API as described by the Jakarta Mail FAQ “The Jakarta Mail API is a set of abstract APIs that model a mail system. (Jakarta Mail was previously known as JavaMail.) The API provides a platform independent and protocol independent framework to build Java technology based email client applications. The Jakarta Mail API provides facilities for reading and sending email. Service providers implement particular protocols. Several service providers are included with the Jakarta Mail API package; others are available separately. The Jakarta Mail API is implemented as a Java optional package that can be used on JDK 1.4 and later on any operating system. The Jakarta Mail API is also a required part of the Jakarta EE Platform and the Java Platform, Enterprise Edition (Java EE).”&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Configuring mail sessions works basically the same as with the Liberty Feature JavaMail-1.5 and JavaMail-1.6. They can be configured using the API, or through the server.xml&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Below is an example of a SMTP Mail session configured through the server.xml:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mail-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jndi-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;mailSession&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;mailSessionID&amp;gt;&lt;/span&gt;testSMTPMailSession&lt;span class=&quot;tag&quot;&gt;&amp;lt;/mailSessionID&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;jndiName&amp;gt;&lt;/span&gt;TestingApp/SMTPMailSessionServlet/testSMTPMailSession&lt;span class=&quot;tag&quot;&gt;&amp;lt;/jndiName&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;description&amp;gt;&lt;/span&gt;mailSession for testing SMTP protocol&lt;span class=&quot;tag&quot;&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;transportProtocol&amp;gt;&lt;/span&gt;smtp&lt;span class=&quot;tag&quot;&gt;&amp;lt;/transportProtocol&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;host&amp;gt;&lt;/span&gt;localhost&lt;span class=&quot;tag&quot;&gt;&amp;lt;/host&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;user&amp;gt;&lt;/span&gt;somuser@someemailserver.com&lt;span class=&quot;tag&quot;&gt;&amp;lt;/user&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;password&amp;gt;&lt;/span&gt;usersPassword&lt;span class=&quot;tag&quot;&gt;&amp;lt;/password&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;from&amp;gt;&lt;/span&gt;someuser@someemailserver.com&lt;span class=&quot;tag&quot;&gt;&amp;lt;/from&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mail.smtp.host&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mail.smtp.port&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;3025&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/mailSession&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Find out more:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://eclipse-ee4j.github.io/mail/&quot;&gt;Jakarta mail&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/docs/latest/reference/config/mailSession.html&quot;&gt;Mail Session Object (mailSession)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9 beta features in your server&amp;#8217;s &lt;code&gt;server.xml&lt;/code&gt; configuration file. You can enable the individual features you want or you can just add the Jakarta EE 9 convenience feature to enable all of the Jakarta EE 9 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta or Jakarta EE 9 Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates for All Beta:&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.3-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Or for Jakarta EE 9:&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.3-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt; for All Beta:&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[21.0.0.3-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Or for Jakarta EE 9:&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[21.0.0.3-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 19 Feb 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/02/19/mpcontextpropagation-requesttiming-21003-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/02/19/mpcontextpropagation-requesttiming-21003-beta
          
        </guid>
        
        <category>microprofile</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>With Jakarta Batch and XML Web Services features, all Jakarta EE 9 features now available in Open Liberty 21.0.0.2-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;New in Open Liberty 21.0.0.2-beta are four Jakarta EE 9 packages, Jakarta Messaging 3.0, Jakarta Security 2.0, Jakarta Batch 2.0, and Jakarta XML Web Services 3.0, that join the collection of Jakarta EE 9 packages already available within Open Liberty. With these additions, all features needed to run Jakarta EE 9 applications are available in this Open Liberty beta release. Open Liberty 21.0.0.2-beta also includes previews for 7 of the updated MicroProfile features, including Config, Metrics, OpenTracing, Health, OpenAPI, Rest Client, and JWT.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a larger package that contains all Open Liberty beta features (including Jakarta EE 9 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The main change visible to developers in Jakarta EE is the names of packages changing to accomodate the new &lt;code&gt;jakarta.*&lt;/code&gt; namespace. In this Open Liberty beta, we have a number of new API Release Candidates to join the expanding library of supported Jakarta packages.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This Open Liberty beta introduces the following Jakarta EE 9 features which now possess their all-new Jakarta EE 9 package names:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#messaging&quot;&gt;Jakarta Messaging 3.0 (&lt;code&gt;messaging-3.0, messagingClient-3.0, messagingServer-3.0, messagingSecurity-3.0&lt;/code&gt;)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#security&quot;&gt;Jakarta Security 2.0 (&lt;code&gt;appSecurity-4.0, appSecurityClient-1.0&lt;/code&gt;)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#xmlws&quot;&gt;Jakarta XML Web Services 3.0 (&lt;code&gt;xmlWS-3.0&lt;/code&gt;)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Batch 2.0 (&lt;code&gt;batch-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These join the Jakarta EE 9 features in &lt;a href=&quot;https://openliberty.io/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty betas&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Mail (&lt;code&gt;mail-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Faces Container 3.0 (&lt;code&gt;facesContainer-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Persistent Timer 4.0 (&lt;code&gt;enterpriseBeansPersistentTimer-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Password Utilities 1.0 (&lt;code&gt;passwordUtilities-1.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Connectors 2.0 Inbound Security (&lt;code&gt;connectorsInboundSecurity-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta WebSocket 2.0 (&lt;code&gt;websocket-2.0&lt;/code&gt;; now with full CDI integration)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RESTful Web Services 3.0 (&lt;code&gt;restfulWS-3.0&lt;/code&gt; and &lt;code&gt;restfulWSClient-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Server Faces 3.0 (&lt;code&gt;faces-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Connectors 2.0 (&lt;code&gt;connectors-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans 4.0 (&lt;code&gt;enterpriseBeans-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Remote 4.0 (&lt;code&gt;enterpriseBeansRemote-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Home 4.0 (&lt;code&gt;enterpriseBeansHome-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Lite 4.0 (&lt;code&gt;enterpriseBeansLite-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Persistent Timers 4.0 (&lt;code&gt;enterpriseBeansPersistentTimer-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta EE Application Client 9.0 (&lt;code&gt;jakartaeeClient-9.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Authentication 2.0 (&lt;code&gt;appAuthentication-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Authorization 2.0 (&lt;code&gt;appAuthorization-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Persistence 3.0 (includes Eclipselink 3.0-GA.) (&lt;code&gt;persistence-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta XML Binding 3.0 (&lt;code&gt;xmlBinding-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Managed Beans 2.0 (&lt;code&gt;managedBeans-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Concurrency 2.0 (&lt;code&gt;concurrent-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Bean Validation 3.0 (&lt;code&gt;beanValidation-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Contexts and Dependency Injection 3.0 (&lt;code&gt;cdi-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Message-Driven Beans 4.0 (&lt;code&gt;mdb-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JDBC 4.2 &amp;amp; 4.3 (&lt;code&gt;jdbc-4.2&lt;/code&gt; &amp;amp; &lt;code&gt;jdbc-4.3&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Binding 2.0 (&lt;code&gt;jsonb-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Processing 2.0 (&lt;code&gt;jsonp-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Servlet 5.0 (&lt;code&gt;servlet-5.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Server Pages 3.0 (&lt;code&gt;pages-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Expression Language 4.0 (&lt;code&gt;expressionLanguage-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;messaging&quot;&gt;Jakarta Messaging 3.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Messaging is an API and services that enable applications to create, send, and receive messages via loosely coupled, reliable asynchronous communications. Support for version 3.0 updates the API and services to the jakarta.* namespace and introduces four new features for Jakarta EE 9: &lt;code&gt;messaging-3.0&lt;/code&gt;, &lt;code&gt;messagingClient-3.0&lt;/code&gt;, &lt;code&gt;messagingServer-3.0&lt;/code&gt;, &lt;code&gt;messagingSecurity-3.0&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Configuration is the same as the corresponding features for Jakarta EE 8 (&lt;code&gt;jms-2.0&lt;/code&gt;, &lt;code&gt;wasJmsClient-2.0&lt;/code&gt;, &lt;code&gt;wasJmsServer-1.0&lt;/code&gt;, &lt;code&gt;wasJmsSecurity-1.0&lt;/code&gt;) with one exception: version 3.0 support does not introduce a new feature corresponding to &lt;code&gt;jmsMdb-1.0&lt;/code&gt;. Instead, use Jakarta EE 9 feature &lt;code&gt;mdb-4.0&lt;/code&gt; when deploying message-driven beans to connect to MQ providers, Jakarta Connectors resource adapters, or the embedded messaging server.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the new Jakarta EE 9 messaging features, add them to your &lt;code&gt;server.xml&lt;/code&gt;. Here&amp;#8217;s a feature configuration that enables applications to access message queues via the Messaging 3.0 API, enables message-driven beans to connect to the embedded messaging server, and enables JNDI lookups for messaging resources.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following features can be included in your server.xml:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt; &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;messagingClient-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mdb-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jndi-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Messaging 3.0 was originally included in the Open Liberty &lt;a href=&quot;https://openliberty.io/blog/2020/11/24/microprofile-rest-client-kubernetes-secrets-21001beta.html&quot;&gt;21.0.0.1-beta&lt;/a&gt;, but missed publication.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Additional information about the Jakarta Messaging 3.0 specification can be found &lt;a href=&quot;https://jakarta.ee/specifications/messaging/3.0/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;security&quot;&gt;Jakarta Security 2.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new &lt;code&gt;appSecurity-4.0&lt;/code&gt; feature has been created to support Jakarta EE 9 and introduces Jakarta Security 2.0 support. The &lt;code&gt;appSecurityClient-1.0&lt;/code&gt;, &lt;code&gt;audit-1.0&lt;/code&gt;, &lt;code&gt;constrainedDelegation-1.0&lt;/code&gt;, &lt;code&gt;jcaInboundSecurity-1.0&lt;/code&gt;, &lt;code&gt;jwt-1.0&lt;/code&gt;, &lt;code&gt;passwordUtilities-1.0&lt;/code&gt; and &lt;code&gt;spnego-1.0&lt;/code&gt; features have been updated to also support Jakarta EE 9.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;appSecurity-4.0&lt;/code&gt; feature must be added to &lt;code&gt;server.xml&lt;/code&gt; when using application security with Jakarta EE 9. The other Liberty security features will automatically adapt to the level of Java EE or Jakarta EE that is already in use, so no change is needed when using them with Jakarta EE 9.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following features can be included in your server.xml:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt; &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;appSecurity-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;appSecurityClient-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;audit-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;constrainedDelegation-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jcaInboundSecurity-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jwt-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;passwordUtilities-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;spnego-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Additional information about the Jakarta Security 2.0 specification can be found &lt;a href=&quot;https://jakarta.ee/specifications/security/2.0/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;xmlws&quot;&gt;Jakarta XML Web Services 3.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta XML Web Services 3.0 is an API that enables applications to create SOAP based Web Services. The &lt;code&gt;xmlWS-3.0&lt;/code&gt; feature provides API updates to the Jakarta XML Web Services 3.0 API, Jakarta Web Services Metadata 3.0 API and Jakarta SOAP with Attachments 2.0 API. The &lt;code&gt;jakartaeeClient-9.0&lt;/code&gt; feature has been also been updated to provide Application Client Container support for the Jakarta XML Web Services 3.0 API.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;xmlWS-3.0&lt;/code&gt; feature provides the Jakarta EE 9 XML Web Services 3.0 tools for Top Down and Bottom Up Web Services Creation: &lt;code&gt;wsgen&lt;/code&gt; and &lt;code&gt;wsimport&lt;/code&gt;. These can be found in a new location in the Open Liberty image: wlp/bin/xmlWS/. Both commands perform nearly identical to the Jakarta EE 8 tooling, with the exception that the &lt;code&gt;-target&lt;/code&gt; argument is no longer required.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the new Jakarta EE 9 XML Web Services 3.0 feature, add the xmlWS-3.0 feature to your server.xml. Here&amp;#8217;s an example of what the feature configuration looks like:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt; &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;xmlWS-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To run Jakarta XML Web Services on the Application Client Container: Here&amp;#8217;s an example of what the client.xml configuration looks:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt; &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaeeClient-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information see the &lt;a href=&quot;https://jakarta.ee/specifications/xml-web-services/3.0/&quot;&gt;Jakarta XML Web Services Specification&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9 beta features in your app&amp;#8217;s &lt;code&gt;server.xml&lt;/code&gt;. You can enable the individual features you want or you can just add the Jakarta EE 9 convenience feature to enable all of the Jakarta EE 9 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9 Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, add the following &lt;code&gt;runtimeArtifact&lt;/code&gt; section to the &lt;code&gt;configuration&lt;/code&gt; section of your &lt;code&gt;pom.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.2-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[21.0.0.2-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features (in addition to all Jakarta EE 9 beta features):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/blog/2020/10/27/microprofile40-jakartaee9-beta-200012.html#conf&quot;&gt;MicroProfile Config 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/blog/2020/09/02/jakarta-microprofile-beta-200010.html#metrics&quot;&gt;MicroProfile Metrics 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/blog/2020/09/02/jakarta-microprofile-beta-200010.html#opentracing&quot;&gt;MicroProfile OpenTracing 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/blog/2020/09/02/jakarta-microprofile-beta-200010.html#health&quot;&gt;MicroProfile Health 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/blog/2020/09/29/microprofile-openapi-beta-200011.html#openAPI&quot;&gt;MicroProfile OpenAPI 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/blog/2020/11/24/microprofile-rest-client-kubernetes-secrets-21001beta.html#MP&quot;&gt;MicroProfile Rest Client 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/blog/2020/10/27/microprofile40-jakartaee9-beta-200012.html#jwt&quot;&gt;MicroProfile JWT 1.2&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openliberty.io/blog/2020/11/24/microprofile-rest-client-kubernetes-secrets-21001beta.html#kube&quot;&gt;Using Kubernetes secrets in Liberty variables&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Currently, due to an &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/15649&quot;&gt;issue in MicroProfile Fault Tolerance 3.0&lt;/a&gt;, neither the &lt;code&gt;mpFaultTolerance-3.0&lt;/code&gt; feature nor the &lt;code&gt;microProfile-4.0&lt;/code&gt; convenience feature can be used in the Open Liberty 21.0.0.2-beta. All other MicroProfile 4.0 features can still be individually installed.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now-2&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, add the following &lt;code&gt;runtimeArtifact&lt;/code&gt; section to the &lt;code&gt;configuration&lt;/code&gt; section of your &lt;code&gt;pom.xml&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;runtimeArtifact&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.2-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/runtimeArtifact&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[21.0.0.2-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 26 Jan 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2021/01/26/ee9-messaging-security-21002-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2021/01/26/ee9-messaging-security-21002-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>release</category>
        
        <category>beta</category>
        
        <category>security</category>
        
        <category>jakarta-ee</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Get a jump on Jakarta EE9 with Open Liberty Beta</title>
        <description></description>        
        <pubDate>Wed, 13 Jan 2021 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/redirected.html</link>
        <guid isPermaLink="true">
          
            https://newsroom.eclipse.org/news/community-news/down-day-one-open-liberty-and-jakarta-ee-9/
          
        </guid>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>MicroProfile Rest Client 2.0, using Kubernetes secrets in Liberty variables and more Jakarta EE 9 features in Open Liberty 21.0.0.1-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 21.0.0.1-beta provides MicroProfile Rest Client 2.0 (which is part of MicoProfile 4.0), which adds support for HTTP proxy servers as well as automatically following HTTP redirects. Also, you can now use Kubernetes secrets in Liberty variables, plus Jakarta Faces Container 3.0 and Jakarta Enterprise Beans Persistent Timer 4.0 which are part of Jakarta EE 9.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a larger package that contains all Open Liberty beta features (including Jakarta EE 9 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#MP&quot;&gt;MicroProfile Rest Client 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#kube&quot;&gt;Using Kubernetes secrets in Liberty variables&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;MP&quot;&gt;MicroProfile Rest Client 2.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile REST Client is a type-safe client API enabling rapid development of applications capable of consuming RESTful services. Version 2.0 is the latest update and adds support for HTTP proxy servers, automatically following HTTP redirects, Server Sent Events, and additional configuration options for JSON-B providers and multiple query parameters.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable this feature, add &lt;code&gt;&amp;lt;feature&amp;gt;mpRestClient-2.0&amp;lt;/feature&amp;gt;&lt;/code&gt; to the list of features in the &lt;code&gt;&amp;lt;featureManager&amp;gt;&lt;/code&gt; element as shown in the example below:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpRestClient-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Alternatively, the &lt;code&gt;microprofile-4.0&lt;/code&gt; convenience feature can be used instead, as shown below:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;microprofile-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In order to start coding with the updated API, you will also need to pull in the MP Rest Client 2.0 dependencies. If you use
Maven, try these coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.microprofile.rest.client&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;microprofile-rest-client-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&quot;tag&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;or, if you use Gradle:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    mpRestClient group: 'org.eclipse.microprofile.rest.client', name: 'microprofile-rest-client-api', version: '2.0'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This allows you to change how multi-valued query parameters are formatted, specify a proxy server, configure the client
to automatically follow redirects and more.  Here is an example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;MyClient client =
    RestClientBuilder.newBuilder()
                     .baseUri(someURI)
                     .queryParamStyle(QueryParamStyle.COMMA_SEPARATED) &lt;span class=&quot;comment&quot;&gt;// or ARRAY_PAIRS or MULTI_PAIRS (default)...&lt;/span&gt;
                     .proxyAddress(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myProxyServer&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;integer&quot;&gt;1080&lt;/span&gt;)
                     .followRedirects(&lt;span class=&quot;predefined-constant&quot;&gt;true&lt;/span&gt;)
                     .build(MyMultiValuedQueryParamClient.class);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These can also be configured via MP Config using the following properties, respectively:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;com.mypkg.MyClient/mp-rest/queryParamStyle=COMMA_SEPARATED&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;com.mypkg.MyClient/mp-rest/proxyAddress=myProxyServer:1080&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;com.mypkg.MyClient/mp-rest/followRedirects=true&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In a future blog post, we&amp;#8217;ll discuss how you can also use MP Rest Client 2.0 to consume Server Sent Events.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For examples of how to use these new features, please refer to the &lt;a href=&quot;http://download.eclipse.org/microprofile/microprofile-rest-client-2.0-RC2/microprofile-rest-client-2.0-RC2.html&quot;&gt;specification document&lt;/a&gt; or the &lt;a href=&quot;https://github.com/eclipse/microprofile-rest-client&quot;&gt;MicroProfile Rest Client project page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can also see these new features in action below:&lt;/p&gt;
&lt;/div&gt;
&lt;iframe src=&quot;https://video.ibm.com/embed/recorded/129457969&quot; style=&quot;border: 0;&quot; webkitallowfullscreen allowfullscreen frameborder=&quot;no&quot; width=&quot;480&quot; height=&quot;270&quot; referrerpolicy=&quot;no-referrer-when-downgrade&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;kube&quot;&gt;Using Kubernetes secrets in Liberty variables&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In a cloud environment, sensitive information such as passwords and OAuth tokens may be stored in Kubernetes secrets. To access these secrets today in Liberty via configuration variables they would need to be exposed as environment variables in a Kubernetes pod. This update will allow configuration variables to be automatically populated from Kubernetes secrets without having to expose them as environment variables.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To make use of this function, the Kubernetes secrets need to be mapped to the file system, either by using the service binding operator or by mounting the secrets to a volume in the pod definition. Files will be read from the location defined in the &lt;code&gt;SERVICE_BINDING_ROOT&lt;/code&gt; environment variable, which defaults to &lt;code&gt;WLP_CONFIG_DIR&lt;/code&gt;/bindings. The variable name will be taken from the name of the file, and the value will be the contents of the file.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For example, we may have a Kubernetes secret named 'account-database' that contains a username and password:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_dark&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/blog_21001_beta_username_password.png&quot; alt=&quot;blog 21001 beta username password&quot; width=&quot;Image of Kubernetes secret named 'account-database'&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The service binding operator can automatically map that secret to the file system, or it could be done manually in a deployment definition:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_dark&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/blog_21001_deployment_definition.png&quot; alt=&quot;blog 21001 deployment definition&quot; width=&quot;Image of Kubernetes secret named 'account-database'&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The above definition will result in the files &lt;code&gt;/bindings/account-database/username&lt;/code&gt; and &lt;code&gt;/bindings/account-database/password&lt;/code&gt; being created when the pod is created. Liberty will create variables from both files, and users can access them using normal Liberty variable syntax, &lt;code&gt;${account-database/username}&lt;/code&gt; and &lt;code&gt;${account-database/password}&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/k8s-service-bindings/spec&quot;&gt;Service Binding specification&lt;/a&gt;&lt;br&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://kubernetes.io/docs/concepts/configuration/secret/&quot;&gt;Kubernetes Secrets&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.1-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[21.0.0.1-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The main change visible to developers in Jakarta EE is the names of packages changing to accomodate the new &lt;code&gt;jakarta.*&lt;/code&gt; namespace. In this Open Liberty beta, we have two new API Release Candidates to join the expanding library of supported Jakarta packages.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This Open Liberty beta introduces the following Jakarta EE 9 features which now possess their all-new Jakarta EE 9 package names:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#face&quot;&gt;Jakarta Faces Container 3.0 (&lt;code&gt;facesContainer-3.0&lt;/code&gt;)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#timer&quot;&gt;Jakarta Enterprise Beans Persistent Timer 4.0 (&lt;code&gt;enterpriseBeansPersistentTimer-4.0&lt;/code&gt;)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#messaging&quot;&gt;Jakarta Messaging 3.0 (&lt;code&gt;messaging-3.0, messagingClient-3.0, messagingServer-3.0, messagingSecurity-3.0&lt;/code&gt;)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These join the Jakarta EE 9 features in &lt;a href=&quot;https://openliberty.io/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty betas&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Password Utilities 1.0 (&lt;code&gt;passwordUtilities-1.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Connectors 2.0 Inbound Security (&lt;code&gt;connectorsInboundSecurity-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta WebSocket 2.0 (&lt;code&gt;websocket-2.0&lt;/code&gt;; now with full CDI integration)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RESTful Web Services 3.0 (&lt;code&gt;restfulWS-3.0&lt;/code&gt; and &lt;code&gt;restfulWSClient-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Server Faces 3.0 (&lt;code&gt;faces-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Connectors 2.0 (&lt;code&gt;connectors-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans 4.0 (&lt;code&gt;enterpriseBeans-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Remote 4.0 (&lt;code&gt;enterpriseBeansRemote-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Home 4.0 (&lt;code&gt;enterpriseBeansHome-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Lite 4.0 (&lt;code&gt;enterpriseBeansLite-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta EE Application Client 9.0 (&lt;code&gt;javaeeClient-9.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Authentication 2.0 (&lt;code&gt;jaspic-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Authorization 2.0 (&lt;code&gt;jacc-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Persistence 3.0 (includes Eclipselink 3.0-RC1.) (&lt;code&gt;jpa-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta XML Binding 3.0 (&lt;code&gt;jaxb-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Managed Beans 2.0 (&lt;code&gt;managedBeans-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Concurrency 2.0 (&lt;code&gt;concurrent-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Bean Validation 3.0 (&lt;code&gt;beanValidation-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Contexts and Dependency Injection 3.0 (&lt;code&gt;cdi-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Message-Driven Beans 4.0 (&lt;code&gt;mdb-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JDBC 4.2 &amp;amp; 4.3 (&lt;code&gt;jdbc-4.2&lt;/code&gt; &amp;amp; &lt;code&gt;jdbc-4.3&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Transactions 2.0 (&lt;code&gt;transaction-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Binding 2.0 (&lt;code&gt;jsonb-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Processing 2.0 (&lt;code&gt;jsonp-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Servlet 5.0 (&lt;code&gt;servlet-5.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Server Pages 3.0 (&lt;code&gt;jsp-3.0&lt;/code&gt; now &lt;code&gt;pages-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Expression Language 4.0 (&lt;code&gt;el-4.0&lt;/code&gt; now &lt;code&gt;expressionLanguage-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;face&quot;&gt;Jakarta Faces Container 3.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This feature is part of the Jakarta EE9 features. The largest change in this feature is it has been updated to support and reference the new jakarta namespace. Previously the jsfContainer features supported the javax namespace, but as part of Jakarta EE9, the packages were updated from javax to jakarta.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Open Liberty &lt;code&gt;facesContainer-3.0&lt;/code&gt; allows developers to use their preferred Jakarta Server Faces API &amp;amp; Implementation, such a Mojarra, by bundling it with their application. Historically, this container feature has been named using the acronym jsf (such as &lt;code&gt;jsfContainer-2.3&lt;/code&gt;). However, starting with Jakarta Faces Container 3.0, the feature name will now begin with faces to move away from the Oracle trademarked acronyms. Otherwise, developers can simply use the Open Liberty provided &lt;code&gt;faces-3.0&lt;/code&gt; feature which uses the Apache MyFaces API and Implementation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following feature can be included in your server.xml:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;facesContainer-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Additional information about the Jakarta Server Faces 3.0 specification can be found &lt;a href=&quot;https://jakarta.ee/specifications/faces/3.0/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;timer&quot;&gt;Jakarta Enterprise Beans Persistent Timer 4.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;enterpriseBeansPersistentTimer-4.0&lt;/code&gt; feature enables the use of persistent timers in Jakarta Enterprise Beans. Configuration is the same as the corresponding feature from Jakarta EE 8,  &lt;code&gt;ejbPersistentTimer-3.2&lt;/code&gt;.  With this final Jakarta Enterprise Beans 4.0 feature, the full capabilities of Jakarta Enterprise Beans 4.0 are now available in beta.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;messaging&quot;&gt;Jakarta Messaging 3.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta Messaging is an API and services that enable applications to create, send, and receive messages via loosely coupled, reliable asynchronous communications. Support for version 3.0 updates the API and services to the jakarta.* namespace and introduces four new features for Jakarta EE 9: &lt;code&gt;messaging-3.0&lt;/code&gt;, &lt;code&gt;messagingClient-3.0&lt;/code&gt;, &lt;code&gt;messagingServer-3.0&lt;/code&gt;, &lt;code&gt;messagingSecurity-3.0&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Configuration is the same as the corresponding features for Jakarta EE 8 (&lt;code&gt;jms-2.0&lt;/code&gt;, &lt;code&gt;wasJmsClient-2.0&lt;/code&gt;, &lt;code&gt;wasJmsServer-1.0&lt;/code&gt;, &lt;code&gt;wasJmsSecurity-1.0&lt;/code&gt;) with one exception: version 3.0 support does not introduce a new feature corresponding to &lt;code&gt;jmsMdb-1.0&lt;/code&gt;. Instead, use Jakarta EE 9 feature &lt;code&gt;mdb-4.0&lt;/code&gt; when deploying message-driven beans to connect to MQ providers, Jakarta Connectors resource adapters, or the embedded messaging server.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the new Jakarta EE 9 messaging features, add them to your &lt;code&gt;server.xml&lt;/code&gt;. Here&amp;#8217;s a feature configuration that enables applications to access message queues via the Messaging 3.0 API, enables message-driven beans to connect to the embedded messaging server, and enables JNDI lookups for messaging resources.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following features can be included in your server.xml:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt; &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;messagingClient-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mdb-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jndi-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Additional information about the Jakarta Messaging 3.0 specification can be found &lt;a href=&quot;https://jakarta.ee/specifications/messaging/3.0/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9 beta features in your app&amp;#8217;s &lt;code&gt;server.xml&lt;/code&gt;. You can enable the individual features you want or you can just add the Jakarta EE 9 convenience feature to enable all of the Jakarta EE 9 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now-2&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9 Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;21.0.0.1-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[21.0.0.1-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 24 Nov 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2020/11/24/microprofile-rest-client-kubernetes-secrets-21001beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2020/11/24/microprofile-rest-client-kubernetes-secrets-21001beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>kubernetes</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Support for gRPC, Java SE 15, and Custom JNDI for Enterprise Beans (EJBs) in Open Liberty 20.0.0.12</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In Open Liberty 20.0.0.12 we now support gRPC 1.0 and gRPC Client 1.0 features. gRPC is a &quot;high-performance, open source universal RPC framework.&quot; We&amp;#8217;ve also added support for custom JNDI (Java Naming and Directory Interface) for Enterprise Beans (EJBs). This allows you to use custom JDNI names for looking up and/or injecting enterprise beans. Another major addition for this release is support for running Open Liberty on Java SE 15, which is currently the latest version of Java SE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; 20.0.0.12:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#grpc&quot;&gt;Provide and consume gRPC services from your web applications (gRPC Service 1.0 and gRPC Client 1.0)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jndi&quot;&gt;Support for Custom JNDI Names for Enterprise Beans (Jakarta Enterprise Beans 1.x, 2.x, 3.x)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#java15&quot;&gt;Support for Java SE 15&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#bugs&quot;&gt;Significant bugs fixed in this release&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;View the list of fixed bugs in &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3A%22release+bug%22+label%3Arelease%3A200012&quot;&gt;20.0.0.12&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;run&quot;&gt;Run your apps using 20.0.0.12&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20.0.0.12&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '[20.0.0.12,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or if you&amp;#8217;re using Docker:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;FROM open-liberty&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://stackoverflow.com/tags/open-liberty&quot;&gt;&lt;img src=&quot;/img/blog/blog_btn_stack.svg&quot; alt=&quot;Ask a question on Stack Overflow&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;grpc&quot;&gt;Provide and consume gRPC services from your web applications (gRPC Service 1.0 and gRPC Client 1.0)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://grpc.io/docs/what-is-grpc/introduction/&quot;&gt;gRPC&lt;/a&gt; is a high-performance, open source universal RPC framework. gRPC support on Liberty allows developers to both provide and consume gRPC services from your web applications. The introduction of gRPC support in Open Liberty means you can now take advantage of the benefits of gRPC more easily than before. Those benefits include great performance, simple service definitions via Protocol Buffers, cross-platform and language support, and wide industry adoption.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These two features were previously only available in beta are now generally available:&lt;br&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;grpc-1.0&lt;/code&gt;, which enables gRPC services, and&lt;br&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;grpcClient-1.0&lt;/code&gt;, which enables the use of a gRPC client for outbound calls.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;grpc-service&quot;&gt;gRPC Service&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;grpc-1.0&lt;/code&gt; feature works by scanning web apps for gRPC service implementations, through implementors of &lt;code&gt;io.grpc.BindableService&lt;/code&gt;. The web app must include the protocol buffer compiler-generated code for the services it intends to provide, and additionally the service class must provide a no-argument constructor. The web app does not need to include any core gRPC libraries; those are provided by the Liberty runtime. Once a gRPC service is scanned and started, it becomes accessible to remote gRPC clients on the configured HTTP ports.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;grpc-client&quot;&gt;gRPC Client&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;grpcClient-1.0&lt;/code&gt; feature provides applications with access to a &lt;a href=&quot;https://netty.io/&quot;&gt;Netty&lt;/a&gt; gRPC client, as well as the related libraries. A web app must provide a client implementation and stubs, and can make outbound calls with a &lt;code&gt;io.grpc.ManagedChannel&lt;/code&gt; without needing to provide the supporting client libraries.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-out-grpc&quot;&gt;Try out gRPC&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can now try gRPC by either following the instructions in this &lt;a href=&quot;https://github.com/OpenLiberty/sample-grpc&quot;&gt;GitHub repository&amp;#8217;s&lt;/a&gt; README or following this basic Hello World service (add the &lt;code&gt;grpc-1.0&lt;/code&gt; feature to your &lt;code&gt;server.xml&lt;/code&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;com.ibm.ws.grpc&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;com.ibm.ws.grpc.beans.GreetingBean&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.examples.helloworld.GreeterGrpc&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.examples.helloworld.HelloReply&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.examples.helloworld.HelloRequest&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.stub.StreamObserver&lt;/span&gt;;

&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;HelloWorldService&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; GreeterGrpc.GreeterImplBase {

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; HelloWorldService(){}

    &lt;span class=&quot;annotation&quot;&gt;@Override&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; sayHello(HelloRequest req, StreamObserver&amp;lt;HelloReply&amp;gt; responseObserver) {
        HelloReply reply = HelloReply.newBuilder().setMessage(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Hello &lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; + req.getName()).build();
        responseObserver.onNext(reply);
        responseObserver.onCompleted();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For this example, the application must provide the &lt;a href=&quot;https://github.com/grpc/grpc-java/blob/master/examples/src/main/proto/helloworld.proto&quot;&gt;helloworld protobuf definition&lt;/a&gt; along with the protobuf compiler output. No additional libraries need to be provided with the application, and once it&amp;#8217;s started the helloworld greeter service will be accessible on the server&amp;#8217;s HTTP endpoints.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For a client example, a basic Servlet using gRPC can be defined using the &lt;code&gt;grpcClient-1.0&lt;/code&gt; feature with:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;com.ibm.ws.grpc&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.examples.helloworld.GreeterGrpc&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.examples.helloworld.HelloReply&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.examples.helloworld.HelloRequest&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.ManagedChannel&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.ManagedChannelBuilder&lt;/span&gt;;
...
&lt;span class=&quot;annotation&quot;&gt;@WebServlet&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;grpcClient&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, urlPatterns = { &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/grpcClient&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; }, loadOnStartup = &lt;span class=&quot;integer&quot;&gt;1&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;GrpcClientServlet&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; HttpServlet {

        ManagedChannel channel;
        &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; GreeterGrpc.GreeterBlockingStub greetingService;

        &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; startService(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; address, &lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; port)
        {
            channel = ManagedChannelBuilder.forAddress(address , port).usePlaintext().build();
            greetingService = GreeterGrpc.newBlockingStub(channel);
        }

        &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; stopService()
        {
            channel.shutdownNow();
        }

        &lt;span class=&quot;annotation&quot;&gt;@Override&lt;/span&gt;
        &lt;span class=&quot;directive&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doGet(HttpServletRequest reqest, HttpServletResponse response)
            &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt;
        {

            &lt;span class=&quot;comment&quot;&gt;// set user, address, port params&lt;/span&gt;
        }

        &lt;span class=&quot;annotation&quot;&gt;@Override&lt;/span&gt;
        &lt;span class=&quot;directive&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doPost(HttpServletRequest request, HttpServletResponse response)
            &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt;
        {

        &lt;span class=&quot;comment&quot;&gt;// grab user, address, port params&lt;/span&gt;
        startService(address, port);
        HelloRequest person = HelloRequest.newBuilder().setName(user).build();
        HelloReply greeting = greetingService.sayHello(person);

        &lt;span class=&quot;comment&quot;&gt;// send the greeting in a response&lt;/span&gt;
        stopService();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As with the service example, the application must provide the &lt;a href=&quot;https://github.com/grpc/grpc-java/blob/master/examples/src/main/proto/helloworld.proto&quot;&gt;helloworld protobuf definition&lt;/a&gt; along with the protobuf compiler output. All required gRPC client libraries are provided by the &lt;code&gt;grpcClient-1.0&lt;/code&gt; feature.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jndi&quot;&gt;Support for Custom JNDI Names for Enterprise Beans (Jakarta Enterprise Beans 1.x, 2.x, 3.x)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Support for Custom JNDI Names for Enterprise Beans (EJBs) is an enhancement to all existing enterprise beans features that allows an application to configure and use custom JDNI names for looking up and/or injecting enterprise beans, or use legacy default JNDI names instead of the specification defined JNDI names.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Prior to this enhancement, Liberty only supported looking up enterprise beans using the specification defined JNDI names : &lt;code&gt;java:global/&amp;lt;app&amp;gt;/&amp;lt;module&amp;gt;/&amp;lt;bean&amp;gt;!&amp;lt;interface&amp;gt;&lt;/code&gt; &amp;amp; variations for &lt;code&gt;java:app&lt;/code&gt; and &lt;code&gt;java:module&lt;/code&gt;. With this enhancement, and without any additional configuration, legacy default JNDI names are now available for use by applications to lookup and/or inject enterprise beans. Also, rather than using the defaults, a custom name for each EJB may be specified in the &lt;code&gt;ibm-ejb-jar-bnd.xml&lt;/code&gt; file (or &lt;code&gt;ibm-ejb-jar-bnd.xmi&lt;/code&gt; file for EJB 2.x and 1.x modules). These new JNDI name options are available in addition to the existing specification required names.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For EJB 3.x modules, the following defaults will be available if a custom name is not provided:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Short form local interfaces and homes    &lt;code&gt;ejblocal:&amp;lt;package.qualified.interface&amp;gt;&lt;/code&gt;&lt;br&gt;
Short form remote interfaces and homes   &lt;code&gt;&amp;lt;package.qualified.interface&amp;gt;&lt;/code&gt;&lt;br&gt;
Long form local interfaces and homes     &lt;code&gt;ejblocal:&amp;lt;component-id&amp;gt;#&amp;lt;package.qualified.interface&amp;gt;&lt;/code&gt;&lt;br&gt;
Long form remote interfaces and homes    &lt;code&gt;ejb/&amp;lt;component-id&amp;gt;#&amp;lt;package.qualified.interface&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The component-id defaults to &lt;code&gt;&amp;lt;application-name&amp;gt;/&amp;lt;module-jar-name&amp;gt;/&amp;lt;ejb-name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;easier-migration-for-enterprise-bean-applications&quot;&gt;Easier Migration for Enterprise Bean Applications&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Custom JNDI name support for enterprise beans provides an easier migration path for applications from other platforms (including WebSphere traditional).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Prior to Java EE 6, the Enterprise Beans specification did not prescribe the JNDI names required for enterprise beans, so every platform provided platform specific default names and custom binding file formats. Since Liberty only supported the specification defined JNDI names, migrating applications from other platforms often requires code changes to modify the platform specific JNDI names to the newer specification defined names. Now, migration from other platforms is simplified because applications may be migrated without changing code, but instead migrating the other platform specific binding files to the new Liberty platform specific binding file format. In some cases, use of the new legacy default names may also allow applications to migrate to liberty without specifying custom JNDI names in a binding file.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;application-configuration-details&quot;&gt;Application Configuration details&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Full details about the legacy default bindings provided, as well as the syntax for declaring custom JNDI names in the &lt;code&gt;ibm-ejb-jar-bnd.xml&lt;/code&gt; file, including examples, may be found in &lt;a href=&quot;https://www.ibm.com/support/knowledgecenter/SSEQTP_9.0.5/com.ibm.websphere.base.doc/ae/cejb_bindingsejbfp.html&quot;&gt;this IBM Knowledge Center article&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Custom bindings may be configured for an application in the following three locations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;specify-custom-bindings-in-ibm-ejb-jar-bnd-xml-for-ejb-3-x&quot;&gt;Specify Custom bindings in ibm-ejb-jar-bnd.xml for EJB 3.x&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Following are examples of how to configure custom bindings for EJB 3.x beans in an EJB JAR module or WAR module in &lt;code&gt;ibm-ejb-jar-bnd.xml&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Specify a binding per interface:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;XML&quot;&gt;   &lt;span class=&quot;tag&quot;&gt;&amp;lt;session&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;NoInterceptorBasicStateless&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;interface&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;com.ejbs.InventoryService&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;binding-name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ejb/Inventory&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;/session&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Specify a component id (a prefix for default long form bindings)&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;XML&quot;&gt;   &lt;span class=&quot;tag&quot;&gt;&amp;lt;session&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;AccountServiceBean&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;component-id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Dept549/AccountProcessor&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Simple binding name (one name used for both local and remote)&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;XML&quot;&gt;   &lt;span class=&quot;tag&quot;&gt;&amp;lt;session&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;AccountServiceBean&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;simple-binding-name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ejb/AccountService&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Local and Remote home specific binding names&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;XML&quot;&gt;   &lt;span class=&quot;tag&quot;&gt;&amp;lt;session&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;AccountServiceBean&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;local-home-binding-name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ejblocal:AccountService&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;session&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;AccountServiceBean&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;remote-home-binding-name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ejb/services/AccountService&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;specify-custom-bindings-in-server-xml&quot;&gt;Specify Custom bindings in server.xml&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Following is an example of how to configure custom bindings for EJB 3.x beans in an EJB JAR module or WAR module in &lt;code&gt;server.xml&lt;/code&gt; in the &lt;code&gt;&amp;lt;application&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;ejbApplication&amp;gt;&lt;/code&gt; elements:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;XML&quot;&gt;   &lt;span class=&quot;tag&quot;&gt;&amp;lt;ejbApplication&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;location&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;EJBTest.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;ejb-jar-bnd&amp;gt;&lt;/span&gt;
         &lt;span class=&quot;tag&quot;&gt;&amp;lt;session&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;InventoryServiceBean&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;interface&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;com.ejbs.InventoryService&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;binding-name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ejb/Inventory&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
         &lt;span class=&quot;tag&quot;&gt;&amp;lt;/session&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;/ejb-jar-bnd&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;/ejbApplication&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;specify-custom-bindings-in-ibm-ejb-jar-bnd-xmi-for-ejb-1-x2-x&quot;&gt;Specify Custom bindings in ibm-ejb-jar-bnd.xmi for EJB 1.x/2.x&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Following is an example of how to configure custom bindings for EJB 1.x or 2.x beans in an EJB JAR module in &lt;code&gt;ibm-ejb-jar-bnd.xmi&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;EJB 1.x and 2.x provide a single JNDI name that applies to both the remote and local home:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;XML&quot;&gt;   &lt;span class=&quot;tag&quot;&gt;&amp;lt;ejbBindings&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;xmi:id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;BeanBinding_8&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;jndiName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;suite/r6x/base/misc/poollimits/SLCMTTxTimeoutHome&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;tag&quot;&gt;&amp;lt;enterpriseBean&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;xmi:type&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ejb:Session&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;href&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;META-INF/ejb-jar.xml#SLCMTTxTimeout&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;/ejbBindings&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For a bean with both a remote and local home, the above will provide the following custom bindings:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;text&quot;&gt;   Remote Home : suite/r6x/base/misc/poollimits/SLCMTTxTimeoutHome
   Local Home  : local:suite/r6x/base/misc/poollimits/SLCMTTxTimeoutHome&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;feature-configuration-details&quot;&gt;Feature configuration details&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Support for custom and legacy default JNDI names is enabled by default for all Enterprise Bean (EJB) features. This support will not interfere with the existing specification defined &lt;code&gt;java&lt;/code&gt;: support. However, it is possible to completely disable the new support with the following setting in server.xml:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;XML&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;ejbContainer&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;bindToServerRoot&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;It is also possible to disable just the legacy short form default JNDI name support (i.e. the bean is bound using the interface name) with the following setting in server.xml:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;XML&quot;&gt;   &lt;span class=&quot;tag&quot;&gt;&amp;lt;ejbContainer&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;disableShortDefaultBindings&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Since the new support for custom JNDI names and legacy defaults provide alternative JNDI names, it is now possible to disable the EJB specification required JNDI names. This is done in server.xml as follows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;XML&quot;&gt;   &lt;span class=&quot;tag&quot;&gt;&amp;lt;ejbContainer&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;bindToJavaGlobal&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Finally, the following new configuration attribute on the &lt;code&gt;&amp;lt;ejbContainer&amp;gt;&lt;/code&gt; element in open-liberty enables the failing application start when multiple beans are bound to the same JNDI name:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;XML&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;ejbContainer&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;customBindingsOnError&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;FAIL&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;java15&quot;&gt;Support for Java SE 15&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Any official Java SE 15 release from &lt;a href=&quot;https://adoptopenjdk.net?variant=openjdk15&amp;amp;jvmVariant=openj9&quot;&gt;AdoptOpenJDK&lt;/a&gt;, &lt;a href=&quot;https://jdk.java.net/15/&quot;&gt;Oracle&lt;/a&gt;, or other OpenJDK vendors will work with Open Liberty. Although Java SE 15 is currently the latest available version, it is not a long-term supported release, with standard support scheduled to end in March 2021.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Keep in mind, Eclipse OpenJ9 &lt;a href=&quot;/blog/2019/10/30/faster-startup-open-liberty.html&quot;&gt;typically offers faster startup times&lt;/a&gt; than Hotspot.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The primary features added in this release include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/379&quot;&gt;JEP 379&lt;/a&gt; Shenandoah: A Low-Pause-Time Garbage Collector&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/377&quot;&gt;JEP 377&lt;/a&gt; ZGC: A Scalable Low-Latency Garbage Collector&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/378&quot;&gt;JEP 378&lt;/a&gt; Text Blocks&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/384&quot;&gt;JEP 384&lt;/a&gt; Records (Second Preview)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/360&quot;&gt;JEP 360&lt;/a&gt; Sealed Classes (Preview)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on downloading a version of Java 15, see &lt;a href=&quot;https://adoptopenjdk.net/index.html?variant=openjdk15&amp;amp;jvmVariant=openj9&quot;&gt;AdoptOpenJDK.net&lt;/a&gt;, &lt;a href=&quot;https://www.eclipse.org/openj9/&quot;&gt;Eclipse.org&lt;/a&gt; or &lt;a href=&quot;https://openjdk.java.net/groups/hotspot&quot;&gt;OpenJDK.java.net&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For working with the &lt;code&gt;server.env&lt;/code&gt; file in Open Liberty, see the &lt;code&gt;Configuration Files&lt;/code&gt; section of the Open Liberty &lt;a href=&quot;/docs/latest/reference/config/server-configuration-overview.html&quot;&gt;Server Configuration Overview documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on new features available in Java 15, see &lt;a href=&quot;https://openjdk.java.net/projects/jdk/15/&quot;&gt;OpenJDK&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;bugs&quot;&gt;Significant bugs fixed in this release&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We’ve spent some time fixing bugs. The following sections describe just some of the issues resolved in this release. If you’re interested, here’s the  &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues?q=label%3A%22release+bug%22+label%3Arelease%3A200012&quot;&gt;full list of bugs fixed in 20.0.0.12&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/14542&quot;&gt;IllegalAccessError when using MP Rest Client with Java SE 15&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;There was a MP Rest Client failure when running with Java SE 15.. This was fixed by changing the visibility of the &lt;code&gt;compareCustomStatus&lt;/code&gt; method to public. If you would like to know more about MP Rest Client check out our &lt;a href=&quot;https://openliberty.io/guides/microprofile-rest-client.html&quot;&gt;Consuming RESTful services with template interfaces&lt;/a&gt; and &lt;a href=&quot;https://openliberty.io/guides/microprofile-rest-client-async.html&quot;&gt;Consuming RESTful services asynchronously with template interfaces&lt;/a&gt; guides.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/14650&quot;&gt;MP GraphQL does not scan JARs in WEB-INF/lib for GraphQL components&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Classes annotated with things like &lt;code&gt;@GraphQLApi&lt;/code&gt;, &lt;code&gt;@Type&lt;/code&gt;, etc. or types referenced from root level queries that exist in JARs in the WEB-INF/lib directory were not processed. This meant that only classes in the WEB-INF/classes directory were processed by the MP GraphQL runtime.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/14597&quot;&gt;Increased CPU when moving from Liberty 19.0.0.6 to newer releases&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When moving from 19.0.0.6 to a newer release, there was an issue with an increase in CPU usage. This was caused by a fix for a previous issue which made the processing of the Audit feature&amp;#8217;s method arguments to be performed whether the feature was enabled or not. This issue was fixed by undoing the previous change and fixing the original problem differently. For more details on Liberty&amp;#8217;s performance, see this &lt;a href=&quot;https://openliberty.io/blog/2020/10/21/memory-footprint-throughput.html&quot;&gt;post&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/14743&quot;&gt;Variables in include files not recognized after config update&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We added support for using variables in include elements in 20.0.0.3. The changes required to support temporary resolution of variables during processing of configuration resulted in a bug where changes to variables may not be recognized during a configuration update. For more information take a look at our &lt;a href=&quot;https://openliberty.io/docs/20.0.0.11/reference/config/server-configuration-overview.html&quot;&gt;Server Configuration Overview&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/14582&quot;&gt;Prevent jsonp-1.0 and jsonpContainer-1.1 features from both starting&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When &lt;code&gt;jsonp-1.0&lt;/code&gt; and &lt;code&gt;jsonContainer-1.1&lt;/code&gt; were configured at the same time it would cause a cryptic &lt;code&gt;CWWKE0702E&lt;/code&gt; error of:&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;CWWKE0702E: Could not resolve module: com.ibm.websphere.javaee.jsonp.1.0 [265]
Bundle was not resolved because of a uses constraint violation.&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The error handling of this invalid configuration has been improved to give an error message of:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;text&quot;&gt;CWWKF0033E: The singleton features com.ibm.websphere.appserver.jsonpImpl-1.1.0 and com.ibm.websphere.appserver.jsonpImpl-1.0.0 cannot be loaded at the same time. The configured features jsonpContainer-1.1 and jsonp-1.0 include one or more features that cause the conflict. Your configuration is not supported; update server.xml to remove incompatible features.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-open-liberty-20-0-0-12-now&quot;&gt;Get Open Liberty 20.0.0.12 now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Available through &lt;a href=&quot;#run&quot;&gt;Maven, Gradle, Docker, and as a downloadable archive&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 20 Nov 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2020/11/20/JNDI-gRPC-200012.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2020/11/20/JNDI-gRPC-200012
          
        </guid>
        
        <category>announcements</category>
        
        <category>java-se</category>
        
        <category>release</category>
        
        <category>jakarta-ee</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>JAX-RS and Open Liberty: BYO Jackson</title>
        <description>&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Chances are that if you use JAX-RS 2.0 or 2.1 in Open Liberty, then you use JSON to format your data.
If so, it&amp;#8217;s equally likely that you use Jackson as your JSON provider.
Open Liberty’s JAX-RS 2.0 implementation uses Jackson as its default JSON provider.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You might be wondering, &lt;em&gt;That’s pretty cool, but how can I take advantage of Jackson in my application?&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Good question!
Open Liberty uses Jackson but intentionally doesn&amp;#8217;t expose Jackson to user applications.
If you want to use some of &lt;a href=&quot;https://github.com/FasterXML/jackson-core/wiki/JsonParser-Features&quot;&gt;the cool features in Jackson&lt;/a&gt;, such as annotating fields to ignore or providing serialization processing instructions, just bring your own Jackson.
In other words, package the Jackson JAX-RS provider JAR files in the WAR file of your application.
You need the following JAR files:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://mvnrepository.com/artifact/com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider&quot;&gt;jackson-jaxrs-json-provider&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core&quot;&gt;jackson-core&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://mvnrepository.com/artifact/com.fasterxml.jackson.jaxrs/jackson-jaxrs-base&quot;&gt;jackson-jaxrs-base&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind&quot;&gt;jackson-databind&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://mvnrepository.com/artifact/com.fasterxml.jackson.module/jackson-module-jaxb-annotations&quot;&gt;jackson-module-jaxb-annotations&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations&quot;&gt;jackson-annotations&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;JacksonJsonProvider&lt;/code&gt; class is automatically registered if all of these JAR files are in the &lt;code&gt;WEB-INF/lib&lt;/code&gt; directory of your WAR file.
However, if you specify any classes in your &lt;code&gt;Application&lt;/code&gt; subclass by using the &lt;code&gt;getClasses()&lt;/code&gt; method or the &lt;code&gt;getSingletons()&lt;/code&gt; method, as shown in the following example, then you need to register the &lt;code&gt;JacksonJsonProvider&lt;/code&gt; class:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;HelloWorldApplication&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; Application {
    &lt;span class=&quot;annotation&quot;&gt;@Override&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;Set&lt;/span&gt;&amp;lt;&lt;span class=&quot;predefined-type&quot;&gt;Class&lt;/span&gt;&amp;lt;?&amp;gt;&amp;gt; getClasses() {
        &lt;span class=&quot;predefined-type&quot;&gt;Set&lt;/span&gt;&amp;lt;&lt;span class=&quot;predefined-type&quot;&gt;Class&lt;/span&gt;&amp;lt;?&amp;gt;&amp;gt; classes = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;HashSet&lt;/span&gt;&amp;lt;&amp;gt;();
        &lt;span class=&quot;comment&quot;&gt;// ...&lt;/span&gt;
        classes.add(JacksonJaxbJsonProvider.class);
        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; classes;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Automatic discovery and registration isn&amp;#8217;t available in the JAX-RS Client APIs, so you need to explicitly register the &lt;code&gt;JacksonJsonProvider&lt;/code&gt; class:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;That’s it!
Now Open Liberty’s JAX-RS implementation uses the Jackson provider from your application instead of the Jackson provider that&amp;#8217;s built into Open Liberty.
Your application can now use those cool Jackson features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You don&amp;#8217;t even need to do any classloading tricks, such as specifying your delegation as &lt;code&gt;parentLast&lt;/code&gt;.
The Open Liberty server doesn&amp;#8217;t expose the Jackson API packages, so your application can load only the Jackson classes that you provide.
The application also works regardless of the delegation policy, so &lt;a href=&quot;https://openliberty.io/docs/latest/reference/config/classloader.html&quot;&gt;you can use a parentLast delegation&lt;/a&gt; if you really want to.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re interested in learning more about Jackson with Open Liberty, check out the &lt;a href=&quot;https://github.com/WASdev/sample.BYOJackson&quot;&gt;sample.BYOJackson app&lt;/a&gt; at the WASdev GitHub repo.
By the way, Jackson isn&amp;#8217;t the only Java-to-JSON converter that you can choose.
If you&amp;#8217;re using JAX-RS 2.1, then you can also use JSON-B to get Java-to-JSON (and vice versa) conversion magic provided by Open Liberty.
To enable JSON-B, see the &lt;a href=&quot;https://openliberty.io/docs/latest/reference/feature/jsonb-1.0.html&quot;&gt;JavaScript Object Notation Binding 1.0 feature documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;</description>        
        <pubDate>Wed, 11 Nov 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2020/11/11/byo-jackson.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2020/11/11/byo-jackson
          
        </guid>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>More MicroProfile 4.0 previews, MicroProfile LRA, and more Jakarta EE 9 features in Open Liberty 20.0.0.12-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 20.0.0.12-beta comes with previews of a range of MicroProfile updates, and support for Java SE 15. The MicroProfile updates include more features in MicroProfile 4.0 (MicroProfile Config 2.0 and MicroProfile JWT 1.2), as well as the new MicroProfile LRA. Also available for preview are a multitude of Jakarta EE 9 features amongst which are changes to the Jakarta RESTful Web Services specification and the addition of message-driven bean support.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a larger package that contains all Open Liberty beta features (including Jakarta EE 9 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#mp4&quot;&gt;New features in MicroProfile 4.0&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#conf&quot;&gt;New capabilities (Config Profile, Config Properties, ConfigValue support, and more) in MicroProfile Config (MicroProfile Config 2.0)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jwt&quot;&gt;New configuration properties for MicroProfile JWT (MicroProfile JWT 1.2)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#lra&quot;&gt;Enable loosely-coupled services to coordinate long running activities (MicroProfile LRA Participants 1.0 &amp;amp; MicroProfile LRA Coordinator 1.0)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#java15&quot;&gt;Support for Java SE 15&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;mp4&quot;&gt;New features in MicroProfile 4.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty 20.0.0.12-beta provides another two feature updates for MicroProfile 4.0:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#conf&quot;&gt;MicroProfile Config 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jwt&quot;&gt;MicroProfile JWT 1.2&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Other MicroProfile 4.0 features were part of earlier betas:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile OpenAPI 2.0 (&lt;a href=&quot;/blog/2020/09/29/microprofile-openapi-beta-200011.html#openAPI&quot;&gt;20.0.0.11-beta&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile Fault Tolerance 3.0 (&lt;a href=&quot;/blog/2020/09/02/jakarta-microprofile-beta-200010.html#allbeta&quot;&gt;20.0.0.10-beta&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile Metrics 3.0 (&lt;a href=&quot;/blog/2020/09/02/jakarta-microprofile-beta-200010.html#allbeta&quot;&gt;20.0.0.10-beta&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile Health 3.0 (&lt;a href=&quot;/blog/2020/09/02/jakarta-microprofile-beta-200010.html#allbeta&quot;&gt;20.0.0.10-beta&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MicroProfile OpenTracing 2.0 (&lt;a href=&quot;/blog/2020/09/02/jakarta-microprofile-beta-200010.html#allbeta&quot;&gt;20.0.0.10-beta&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;While we&amp;#8217;d hoped to also include MicroProfile Rest Client 2.0 (also part of MicroProfile 4.0), we didn&amp;#8217;t quite make it this time so it will make its debut in a future beta. However, if you just can&amp;#8217;t wait until then, you can always give the feature a try in one of our &lt;a href=&quot;/downloads/#development_builds&quot;&gt;nightly builds&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable all the available MicroProfile 4.0 features at once, just add our MicroProfile 4.0 convenience feature to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;   &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;microProfile-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information about the MicroProfile updates included in this milestone, visit the &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-4.0-M1/microprofile-spec-4.0-M1.html#microprofile4.0-M1&quot;&gt;release page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;conf&quot;&gt;New capabilities (Config Profile, Config Properties, ConfigValue support, and more) in MicroProfile Config (MicroProfile Config 2.0)&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-config&quot;&gt;MicroProfile Config&lt;/a&gt; enables application configuration from different locations (ConfigSources). MicroProfile Config 2.0 in Open Liberty consumes &lt;a href=&quot;https://github.com/smallrye/smallrye-config&quot;&gt;SmallRye&amp;#8217;s implementation&lt;/a&gt; of the specification.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Config 2.0 is a major version release (from 1.4) which introduces Functional and API/SPI changes in Microprofile Config 2.0.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;functional-changes&quot;&gt;Functional Changes&lt;/h4&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Provides a way to retrieve a number of related configuration properties with a specified prefix into a CDI bean, using the &lt;a href=&quot;https://github.com/eclipse/microprofile-config/blob/master/api/src/main/java/org/eclipse/microprofile/config/inject/ConfigProperties.java&quot;&gt;@ConfigProperties&lt;/a&gt; annotation.&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@ConfigProperties&lt;/span&gt;(prefix=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;customer&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;annotation&quot;&gt;@Dependent&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;BeanOne&lt;/span&gt; {
   &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name;
   &lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; age;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The code above retrieves the following defined properties for the &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;age&lt;/code&gt; fields:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;customer.name=Bob
customer.age=&lt;span class=&quot;integer&quot;&gt;24&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Allows you to easily determine which was the &quot;winning&quot; &lt;code&gt;ConfigSource&lt;/code&gt; (the &lt;code&gt;ConfigSource&lt;/code&gt; with the highest ordinal) for a specified property via &lt;a href=&quot;https://github.com/eclipse/microprofile-config/blob/master/api/src/main/java/org/eclipse/microprofile/config/ConfigValue.java&quot;&gt;ConfigValue&lt;/a&gt;. A &lt;code&gt;ConfigValue&lt;/code&gt; object holds information about the configuration property name, configuration value, the ConfigSource name from where the configuration property was loaded and the ordinal of the &lt;code&gt;ConfigSource&lt;/code&gt;. You can access these values with the following method:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;ConfigValue cv = Config.getConfigValue(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; propertyName);
cv.getSourceName() &lt;span class=&quot;comment&quot;&gt;// the config source that supplies the configure value for the above property&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enables an application to include configuration for different environments and development stages while only one of them is active (e.g. &lt;code&gt;dev&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;prod&lt;/code&gt;) using configuration profiles. The config profile can be specified using the &lt;code&gt;mp.config.profile&lt;/code&gt; property, which can be set in any of the configuration sources. Once it is set, the corresponding properties associated with the active profile are used. The value can also be set at application start-up, for example:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;java -jar myapp.jar -Dmp.config.profile=testing&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;mp.config.profile&lt;/code&gt; property works on both the property level and config file level:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;On the property level profiles can be used by setting Config property values specific to the selected profile. For example, the &lt;code&gt;vehicle.name&lt;/code&gt; property in the following example would be set to &lt;code&gt;bike&lt;/code&gt; from the previous Config start-up command:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;%dev.vehicle.name=car
%testing.vehicle.name=bike
vehicle.name=lorry&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If &lt;code&gt;mp.config.profile&lt;/code&gt; was not set, &lt;code&gt;vehicle.name&lt;/code&gt; would be set to &lt;code&gt;lorry&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;On the config file (&lt;code&gt;microprofile-config.property&lt;/code&gt;) level the property &lt;code&gt;mp.config.profile&lt;/code&gt; also activates the corresponding &lt;code&gt;microprofile-config-&amp;lt;mp.config.profile&amp;gt;.properties&lt;/code&gt; with &lt;code&gt;microprofile-config.properties&lt;/code&gt; as the fallback.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Supports &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-config-2.0-RC1/microprofile-config-spec.html#property-expressions&quot;&gt;Property Expressions&lt;/a&gt;, which provide a way to set and expand variables in property values. For example, in the following configuration properties, the property &lt;code&gt;server.url&lt;/code&gt; will be resolved to &lt;code&gt;&lt;a href=&quot;http://example.org/endpoint&quot; class=&quot;bare&quot;&gt;http://example.org/endpoint&lt;/a&gt;&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;server.url=http:&lt;span class=&quot;comment&quot;&gt;//${server.host}/endpoint&lt;/span&gt;
server.host=example.org&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Previous working configurations might behave differently if the configuration in use contains values with Property Expressions syntax.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Two new methods have been introduced to &lt;a href=&quot;https://github.com/eclipse/microprofile-config/blob/master/api/src/main/java/org/eclipse/microprofile/config/Config.java&quot;&gt;Config.java&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Config.getValues(String propertyName, Class&amp;lt;T&amp;gt; propertyType)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Config.getOptionalValues(String propertyName, Class&amp;lt;T&amp;gt; propertyType)&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The methods have been added to enable you to retrieve multi-valued properties as lists instead of arrays. The methods return the resolved property values with the specified &lt;code&gt;propertyType&lt;/code&gt; for the specified &lt;code&gt;propertyName&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;OptinalInt&lt;/code&gt;, &lt;code&gt;OptionalLong&lt;/code&gt; and &lt;code&gt;OptionalDouble&lt;/code&gt; are now provided as built-in &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-config-2.0-RC1/microprofile-config-spec.html#converter&quot;&gt;Converters&lt;/a&gt;. The new Converters can be used like any of the other built-in Converters, converting injected Config property values to a defined type:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
&lt;span class=&quot;annotation&quot;&gt;@ConfigProperty&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;my.optional.int.property&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; OptionalInt optionalIntProperty;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;incompatible-changes&quot;&gt;Incompatible changes&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you move up from MicroProfile Config 1.x to 2.0, please take care of the following incompatible changes:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ConfigSource.getPropertyNames&lt;/code&gt; is no longer a default method. The implementation of a &lt;code&gt;ConfigSource&lt;/code&gt; must implement this method.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Previous versions of the specification would not evaluate property expressions. As such, previous working configuration may behave differently (if the used configuration contains values with property expressions syntax). property expressions can be disabled by setting the property &lt;code&gt;mp.config.property.expressions.enabled&lt;/code&gt; with the value of &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Empty values or other special characters are no longer valid Config property values. This means that &lt;code&gt;Config.getValue(String propertyName, Class&amp;lt;T&amp;gt; propertyType)&lt;/code&gt; will never return &lt;code&gt;null&lt;/code&gt;; a &lt;code&gt;NoSuchElementException&lt;/code&gt; will be thrown if either a Config property value is not defined, is defined as an empty string, or its converter returns &lt;code&gt;null&lt;/code&gt;. In the previous release, the empty value was returned as an empty value. For more information, please refer to this &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-config-2.0-RC1/microprofile-config-spec.html#_config_value_conversion_rules&quot;&gt;section of the spec&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the new beta features in your app, add them to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;cdi-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt; &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- required for supporting configuration injection --&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpConfig-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-config-2.0-RC1/microprofile-config-spec.html#release_notes_20&quot;&gt;Release Notes for MicroProfile Config 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-config/milestone/8?closed=1&quot;&gt;MicroProfile Config 2.0 Milestone&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;jwt&quot;&gt;New configuration properties for MicroProfile JWT (MicroProfile JWT 1.2)&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With MicroProfile JSON Web Token (JWT) 1.2 you can use a JWT token for authenticating and authorizing requests to a service. MicroProfile JWT 1.2 simplifies the configuration for managing the validation of the JWT by introducing new MicroProfile Config properties. Enhanced signature algorithm support is added in this Open Liberty beta.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile JSON Web Token 1.2 adds the following MicroProfile Config properties to control different aspects of the JWT validation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;mp-jwt-token-header&quot;&gt;mp.jwt.token.header&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;mp.jwt.token.header&lt;/code&gt; property allows you to control the HTTP request header which is expected to contain a JWT token. You can specify either Authorization (default) or Cookie values.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;mp-jwt-token-cookie&quot;&gt;mp.jwt.token.cookie&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;mp.jwt.token.cookie&lt;/code&gt; property allows you to specify the name of the cookie which is expected to contain a JWT token. The default value is &lt;code&gt;Bearer&lt;/code&gt; if not specified.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;mp-jwt-verify-audiences&quot;&gt;mp.jwt.verify.audiences&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;mp.jwt.verify.audiences&lt;/code&gt; property allows you to create a list of allowable audience (&lt;code&gt;aud&lt;/code&gt;) values. At least one of these must be found in the claim. Previously, this had to be configured in the &lt;code&gt;server.xml&lt;/code&gt; file. Now, you can configure the audiences in the MicroProfile Config property as follows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;text&quot;&gt;mp.jwt.verify.audiences=conferenceService&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;mp-jwt-verify-publickey-algorithm&quot;&gt;mp.jwt.verify.publickey.algorithm&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;mp.jwt.verify.publickey.algorithm&lt;/code&gt; property allows you to control the Public Key Signature Algorithm that is supported by the MicroProfile JWT endpoint. The default value is RSA256 if not specified. Previously, this had to be configured in the &lt;code&gt;server.xml&lt;/code&gt; file. Now, you can configure the public key algorithm used for verification of the JWT in the MicroProfile Config property as follows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;text&quot;&gt;mp.jwt.verify.publickey.algorithm=ES256&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The specification also adds support for the ES256 signature algorithm, while this Open Liberty beta supports using the RS384, RS512, HS384, HS512, ES256, ES384, and the ES512 signature algorithms.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the the MicroProfile JWT 1.2 feature in your app, add the feature to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;   &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
       &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpJwt-1.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-jwt-auth/blob/master/spec/src/main/asciidoc/release-notes.asciidoc#release-notes-for-microprofile-jwt-12&quot;&gt;Release Notes for MicroProfile JWT 1.2&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-jwt-auth/blob/master/spec/src/main/asciidoc/microprofile-jwt-auth-spec.asciidoc&quot;&gt;MicroProfile JWT 1.2 Specification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;lra&quot;&gt;Enable loosely-coupled services to coordinate long running activities (MicroProfile LRA Participants 1.0 &amp;amp; MicroProfile LRA Coordinator 1.0)&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Long Running Actions (LRA) provide a cloud-native transaction model based on a &lt;a href=&quot;https://developer.ibm.com/depmodels/microservices/articles/use-saga-to-solve-distributed-transaction-management-problems-in-a-microservices-architecture#saga&quot;&gt;compensating Saga system&lt;/a&gt;. This allows loosely coupled services to coordinate long running activities, guaranteeing eventual data consistency without the need to put locks on data.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Two features have been provided for LRA support, a Coordinator feature and a Participant feature:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The Coordinator is a dedicated service with which participant microservices implicitly register their LRA’s through the use of annotations. It has the responsibility of driving actions such as completing or compensating on an LRA.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A Participant is a JAX-RS microservice that wishes to participate in an LRA and has been annotated appropriately.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In order for an LRA to be used a single instance of the Coordinator feature must be enabled which will start a Coordinator application. Then a participating mircoservice must be written with the Participant feature enabled to allow the LRA annotations to be used.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To start or join an LRA use the &lt;code&gt;@LRA&lt;/code&gt; annotation. Depending on the type provided it may create a new LRA, join the existing LRA or continue outside one if none is provided. A full list of options can be found in the Microprofile Long Running Actions &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-lra-1.0-M1/microprofile-lra-spec.html&quot;&gt;specification&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;An example of always creating a new LRA when called would be:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;    &lt;span class=&quot;annotation&quot;&gt;@LRA&lt;/span&gt;(LRA.Type.REQUIRES_NEW)
    &lt;span class=&quot;annotation&quot;&gt;@Path&lt;/span&gt;(&lt;span class=&quot;error&quot;&gt;“&lt;/span&gt;/start&lt;span class=&quot;error&quot;&gt;”&lt;/span&gt;)
    &lt;span class=&quot;annotation&quot;&gt;@PUT&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; Response startAction(&lt;span class=&quot;annotation&quot;&gt;@HeaderParam&lt;/span&gt;(LRA_HTTP_CONTEXT_HEADER) &lt;span class=&quot;predefined-type&quot;&gt;URI&lt;/span&gt; lraId)
    {
        &lt;span class=&quot;comment&quot;&gt;/*
         * Business logic that may call upon other services to participate in this Long Running Action
         */&lt;/span&gt;
         &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; Response.ok().build();
    }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Once the LRA has been successfully finished all participating services will have their &lt;code&gt;@Complete&lt;/code&gt; annotated methods called to perform the necessary cleanup:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;    &lt;span class=&quot;annotation&quot;&gt;@Complete&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Path&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/complete&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;annotation&quot;&gt;@PUT&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; Response completeAction(&lt;span class=&quot;annotation&quot;&gt;@HeaderParam&lt;/span&gt;(LRA_HTTP_CONTEXT_HEADER) &lt;span class=&quot;predefined-type&quot;&gt;URI&lt;/span&gt; lraId)
    {
        &lt;span class=&quot;comment&quot;&gt;/*
         * Business logic to cleanup resources once the LRA has closed successfully
         */&lt;/span&gt;
         &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; Response.ok().build();
    }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Should a service in an LRA be canceled or timeout, the &lt;code&gt;@Compensate&lt;/code&gt; methods for each participating service in the LRA will be called:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;    &lt;span class=&quot;annotation&quot;&gt;@Compensate&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Path&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/compensate&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;annotation&quot;&gt;@PUT&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; Response compensateAction(&lt;span class=&quot;annotation&quot;&gt;@HeaderParam&lt;/span&gt;(LRA_HTTP_CONTEXT_HEADER) &lt;span class=&quot;predefined-type&quot;&gt;URI&lt;/span&gt; lraId)
    {
        &lt;span class=&quot;comment&quot;&gt;/*
         * As the LRA has been canceled business logic to compensate any changes is necessary
         */&lt;/span&gt;
         &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; Response.ok().build();
    }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the LRA Coordinator feature in your app, add the feature to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;cdi-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jaxrs-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpLRACoordinator-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the LRA Participants feature in your app, add the feature to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;cdi-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jaxrs-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpLRA-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

&lt;span class=&quot;tag&quot;&gt;&amp;lt;lra&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;port&lt;/span&gt;=&lt;span class=&quot;error&quot;&gt;“&lt;/span&gt;&lt;span class=&quot;error&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;port&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;” host=&lt;span class=&quot;tag&quot;&gt;&amp;lt;hostname&amp;gt;&lt;/span&gt; path=&amp;quot;lrac&amp;quot; /&lt;span class=&quot;error&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Where &lt;code&gt;&amp;lt;port&amp;gt;&lt;/code&gt; is the default &lt;code&gt;HTTP&lt;/code&gt; port of the Open Liberty server with the Coordinator feature is enabled, and &lt;code&gt;&amp;lt;hostname&amp;gt;&lt;/code&gt; is the hostname provided for that Open Liberty server.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Long Running Actions is not a part of the &lt;a href=&quot;#mp4&quot;&gt;MicroProfile 4.0&lt;/a&gt; specification, and so needs to be explicitly added as a feature to be used.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-lra/blob/master/spec/src/main/asciidoc/microprofile-lra-spec.adoc&quot;&gt;Microprofile Long Running Actions Specification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;java15&quot;&gt;Support for Java SE 15&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Any official Java SE 15 release from &lt;a href=&quot;https://adoptopenjdk.net?variant=openjdk15&amp;amp;jvmVariant=openj9&quot;&gt;AdoptOpenJDK&lt;/a&gt;, &lt;a href=&quot;https://jdk.java.net/15/&quot;&gt;Oracle&lt;/a&gt;, or other OpenJDK vendor will work with Open Liberty. Java SE 15 is not a long-term supported release, with standard support scheduled to end in March 2021.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Keep in mind, Eclipse OpenJ9 &lt;a href=&quot;/blog/2019/10/30/faster-startup-open-liberty.html&quot;&gt;typically offers faster startup times&lt;/a&gt; than Hotspot.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The primary features added in this release include:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/379&quot;&gt;JEP 379&lt;/a&gt; Shenandoah: A Low-Pause-Time Garbage Collector&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/377&quot;&gt;JEP 377&lt;/a&gt; ZGC: A Scalable Low-Latency Garbage Collector&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/378&quot;&gt;JEP 378&lt;/a&gt; Text Blocks&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/384&quot;&gt;JEP 384&lt;/a&gt; Records (Second Preview)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/360&quot;&gt;JEP 360&lt;/a&gt; Sealed Classes (Preview)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on downloading a version of Java 15, see &lt;a href=&quot;https://adoptopenjdk.net/index.html?variant=openjdk15&amp;amp;jvmVariant=openj9&quot;&gt;AdoptOpenJDK.net&lt;/a&gt;, &lt;a href=&quot;https://www.eclipse.org/openj9/&quot;&gt;Eclipse.org&lt;/a&gt; or &lt;a href=&quot;https://openjdk.java.net/groups/hotspot&quot;&gt;OpenJDK.java.net&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For working with the &lt;code&gt;server.env&lt;/code&gt; file in Open Liberty, see the &lt;code&gt;Configuration Files&lt;/code&gt; section of the Open Liberty &lt;a href=&quot;/docs/latest/reference/config/server-configuration-overview.html&quot;&gt;Server Configuration Overview documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on new features available in Java 15, see &lt;a href=&quot;https://openjdk.java.net/projects/jdk/15/&quot;&gt;OpenJDK&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20.0.0.12-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[20.0.0.12-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The main change visible to developers in Jakarta EE is the names of packages changing to accommodate the new &lt;code&gt;jakarta.*&lt;/code&gt; namespace. In this Open Liberty beta, we have a number of new API Release Candidates to join the expanding library of supported Jakarta packages.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This Open Liberty beta introduces the following Jakarta EE 9 features which now possess their all-new Jakarta EE 9 package names:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jakarta WebSocket 2.0 (&lt;code&gt;websocket-2.0&lt;/code&gt;; now with full CDI integration)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enterprise Beans Remote Client 2.0 (&lt;code&gt;ejbRemoteClient-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RESTful Web Services 3.0 (&lt;code&gt;restfulWS-3.0&lt;/code&gt; and &lt;code&gt;restfulWSClient-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Server Faces 3.0 (&lt;code&gt;faces-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Connectors 2.0 (&lt;code&gt;connectors-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These join the Jakarta EE 9 features in &lt;a href=&quot;https://openliberty.io/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty betas&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Remote 4.0 (&lt;code&gt;ejbRemote-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta EE Application Client 9.0 (&lt;code&gt;javaeeClient-9.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Authentication 2.0 (&lt;code&gt;jaspic-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Authorization 2.0 (&lt;code&gt;jacc-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Persistence 3.0 (includes Eclipselink 3.0-RC1.) (&lt;code&gt;jpa-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta XML Binding 3.0 (&lt;code&gt;jaxb-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Managed Beans 2.0 (&lt;code&gt;managedBeans-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Concurrency 2.0 (&lt;code&gt;concurrent-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Home 4.0 (&lt;code&gt;ejbHome-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Lite 4.0 (&lt;code&gt;ejbLite-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Bean Validation 3.0 (&lt;code&gt;beanValidation-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Contexts and Dependency Injection 3.0 (&lt;code&gt;cdi-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JDBC 4.2 &amp;amp; 4.3 (&lt;code&gt;jdbc-4.2&lt;/code&gt; &amp;amp; &lt;code&gt;jdbc-4.3&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Transactions 2.0 (&lt;code&gt;transaction-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Binding 2.0 (&lt;code&gt;jsonb-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Processing 2.0 (&lt;code&gt;jsonp-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Servlet 5.0 (&lt;code&gt;servlet-5.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Server Pages 3.0 (&lt;code&gt;jsp-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Expression Language 4.0 (&lt;code&gt;el-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9 beta features in your app&amp;#8217;s &lt;code&gt;server.xml&lt;/code&gt;. You can enable the individual features you want or you can just add the Jakarta EE 9 convenience feature to enable all of the Jakarta EE 9 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now-2&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9 Beta Features package instead of the main release. The beta works with Java SE 15, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20.0.0.12-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[20.0.0.12-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 27 Oct 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2020/10/27/microprofile40-jakartaee9-beta-200012.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2020/10/27/microprofile40-jakartaee9-beta-200012
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>MicroProfile OpenAPI 2.0 preview plus new features and loads of improvements for Jakarta EE 9 in Open Liberty 20.0.0.11-beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In 20.0.0.11-beta we have a preview of MicroProfile OpenAPI 2.0, which enables you to generate documentation directly from APIs. We have also added two new Jakarta EE 9 features, along with improvements to existing Jakarta EE 9 features, many moving up to the latest API Release Candidates.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a new, larger package that contains all Open Liberty beta features (including Jakarta EE 9 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes &lt;a href=&quot;#openAPI&quot;&gt;MicroProfile OpenAPI 2.0&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/logos/home_logo_microprofile.png&quot; alt=&quot;MicroProfile Logo&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;openAPI&quot;&gt;MicroProfile OpenAPI 2.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile OpenAPI 2.0 builds on top of the OpenAPI v3 specification. The &lt;a href=&quot;https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md&quot;&gt;OpenAPI v3 specification&lt;/a&gt; defines a standard, language-agnostic, interface for describing REST APIs which allows documentation to be generated from the APIs themselves. The &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-open-api-2.0-RC3/microprofile-openapi-spec.html&quot;&gt;MicroProfile OpenAPI specification&lt;/a&gt; provides a unified Java API for the OpenAPI v3 specification which allows Java developers to generate OpenAPI v3 documents from their JAX-RS applications.
MicroProfile OpenAPI 2.0 introduces some new annotations that simplify the process of generating OpenAPI documentation for your REST APIs. It also introduces a new MicroProfile Config property prefix that can be used to define the schema for Java classes that you do not have the source code for.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;schemaproperty&quot;&gt;@SchemaProperty&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;@SchemaProperty&lt;/code&gt; annotation has been added to allow you to include properties in the definition of a schema when using the &lt;code&gt;@Schema&lt;/code&gt; annotation. Previously, the &lt;code&gt;@Schema&lt;/code&gt; annotation did not allow you to define any properties. Properties were introspected from the implementation class.
With the introduction of the &lt;code&gt;@SchemaProperty&lt;/code&gt; annotation, a list of properties can now defined using the properties attribute on the &lt;code&gt;@Schema&lt;/code&gt; annotation, as follows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Schema&lt;/span&gt;(
    name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
        description = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Telephone number to contact the user”,
        implementation = User.class,
        properties = {
            @SchemaProperty(
                name = &lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;phone&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;,
                description = &lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;Telephone number to contact the user&lt;span class=&quot;error&quot;&gt;”&lt;/span&gt;
            )
        }
    )}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;requestbodyschema&quot;&gt;@RequestBodySchema&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;@RequestBodySchema&lt;/code&gt; annotation has been added to provide a shorthand mechanism to specify the schema for a request body. Previously, defining the schema for a request body required the use of three different annotations, as follows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@RequestBody&lt;/span&gt;(
    content = {
        &lt;span class=&quot;annotation&quot;&gt;@Content&lt;/span&gt;(
            schema = &lt;span class=&quot;annotation&quot;&gt;@Schema&lt;/span&gt;(
                implementation = MyRequestObject.class
            )
        )
    }
)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the introduction of the &lt;code&gt;@RequestBodySchema&lt;/code&gt; annotation, this can be simplified to the following single annotation:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@RequestBodySchema&lt;/span&gt;(MyRequestObject.class)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;apiresponseschema&quot;&gt;@APIResponseSchema&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;@APIResponseSchema&lt;/code&gt; annotation has been added to provide a shorthand mechanism to specify the schema for a response body. Previously, defining the schema for a response body required the use of three different annotations, as follows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@APIResponse&lt;/span&gt;(
    content = {
            &lt;span class=&quot;annotation&quot;&gt;@Content&lt;/span&gt;(
                schema = &lt;span class=&quot;annotation&quot;&gt;@Schema&lt;/span&gt;(
                    implementation = MyResponseObject.class
                )
            )
        }
    )&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the introduction of the &lt;code&gt;@RequestBodySchema&lt;/code&gt; annotation, this can be simplified to the following single annotation:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@APIResponseSchema&lt;/span&gt;(MyResponseObject.class)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;mpopenapischeme&quot;&gt;mp.openapi.schema.*&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;mp.openapi.schema.*&lt;/code&gt; MicroProfile Config property prefix has been added to allow you to define the schema for Java classes using configuration rather than code. The use of this property is functionally equivalent to the use of the &lt;code&gt;@Schema&lt;/code&gt; annotation on a Java class, but may be used in cases where you do not have access to the source code of a class. The remainder of the property key must be the fully-qualified class name and the value must be a valid OpenAPI schema object, specified in the JSON format.
For example, in the case where an application needs to represent dates in epoch milliseconds, the following configuration could be used (line escapes and indentation added for readability):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;mp.openapi.schema.java.util.Date = { \
   &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;EpochMillis&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; \
   &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, \
   &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;int64&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, \
   &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Milliseconds since January 1, 1970, 00:00:00 GMT&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; \
 }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable OpenAPI 2.0 in the &lt;code&gt;server.xml&lt;/code&gt;, along with any other features you’re using.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpOpenAPI-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-openapi.html&quot;&gt;Guide: Documenting RESTful APIs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-open-api-2.0-RC3/apidocs/&quot;&gt;Javadoc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-open-api-2.0-RC3/microprofile-openapi-spec.html#release_notes_20&quot;&gt;Release notes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 14, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20.0.0.11-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[20.0.0.11-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The main change you should be aware of in Jakarta EE 9 is the names of packages changing to accomodate the new &lt;code&gt;jakarta.*&lt;/code&gt; namespace. In this Open Liberty beta, we have more Jakarta EE 9 features with their name change completed. Most features have improvements too, including many moving up to the latest API Release Candidates.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/logos/Jakarta_EE_logo.png&quot; alt=&quot;Jakarta EE Logo&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This Open Liberty beta introduces the following Jakarta EE 9 features which now possess their all-new Jakarta EE 9 package names:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Remote 4.0 (&lt;code&gt;ejbRemote-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta EE Application Client 9.0 (&lt;code&gt;javaeeClient-9.0&lt;/code&gt;) (now supports Jakarta Enterprise Beans Remote Client 4.0)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These join the Jakarta EE 9 features in &lt;a href=&quot;//blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty betas&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Authentication 2.0 (&lt;code&gt;jaspic-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Authorization 2.0 (&lt;code&gt;jacc-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Persistence 3.0 (includes Eclipselink 3.0-RC1.) (&lt;code&gt;jpa-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta XML Binding 3.0 (&lt;code&gt;jaxb-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Managed Beans 2.0 (&lt;code&gt;managedBeans-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Concurrency 2.0 (&lt;code&gt;concurrent-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Home 4.0 (&lt;code&gt;ejbHome-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Lite 4.0 (&lt;code&gt;ejbLite-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Bean Validation 3.0 (&lt;code&gt;beanValidation-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Contexts and Dependency Injection 3.0 (&lt;code&gt;cdi-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta WebSocket 2.0 (&lt;code&gt;websocket-2.0&lt;/code&gt;; currently the integration with CDI is not complete)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JDBC 4.2 &amp;amp; 4.3 (&lt;code&gt;jdbc-4.2&lt;/code&gt; &amp;amp; &lt;code&gt;jdbc-4.3&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Transactions 2.0 (&lt;code&gt;transaction-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Binding 2.0 (&lt;code&gt;jsonb-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Processing 2.0 (&lt;code&gt;jsonp-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Servlet 5.0 (&lt;code&gt;servlet-5.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Server Pages 3.0 (&lt;code&gt;jsp-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Expression Language 4.0 (&lt;code&gt;el-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9 beta features in your app&amp;#8217;s &lt;code&gt;server.xml&lt;/code&gt;. You can enable the individual features you want or you can just add the Jakarta EE 9 convenience feature to enable all of the Jakarta EE 9 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now-2&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9 Beta Features package instead of the main release. The beta works with Java SE 14, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20.0.0.11-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[20.0.0.11-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 29 Sep 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2020/09/29/microprofile-openapi-beta-200011.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2020/09/29/microprofile-openapi-beta-200011
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>With our new reactive guides, that makes 50!</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We recently published a series of guides on how to write reactive Java microservices. There are currently five reactive guides, &lt;a href=&quot;/guides/#reactive_service&quot;&gt;four on writing the code&lt;/a&gt; and &lt;a href=&quot;/guides/reactive-service-testing.html&quot;&gt;one on testing it&lt;/a&gt; in true-to-production environments. This brings our total number of Open Liberty guides to more than 50, which we are rather proud of in just three years, considering the amount of work and quality-checking that goes into each of them.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;d like to find out more about our new reactive guides, read on. If you&amp;#8217;re not already familiar with the Open Liberty guides already, we&amp;#8217;ll start with a brief introduction&amp;#8230;&amp;#8203;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;what-are-guides&quot;&gt;What are guides?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;/guides/&quot;&gt;Open Liberty guides&lt;/a&gt; are similar to tutorials but, instead of asking you to work through a set of step-by-step instructions with no explanation of the code you&amp;#8217;re constructing, the guides take an aspect of a simple web services application and talk you through how you&amp;#8217;d build it yourself, explaining how the code works as you go. You can complete a guide in just 15 mins or so.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Each guide has two copies of a simple application in its GitHub repository: a &lt;code&gt;finish&lt;/code&gt; version, which you can just run to see what it does, and a &lt;code&gt;start&lt;/code&gt; version, which has pieces of the application missing. As you work through the guide, you create the missing pieces of the &lt;code&gt;start&lt;/code&gt; version, which can include, for example, adding one or more Java classes, adding a server configuration, or updating a Maven configuration. All the code is provided for you so you can be confident that what you create will work at the end.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The guides assume no prior knowledge of a topic, and they take you from beginning to end (but if you&amp;#8217;re intermediate, just use the Table of Contents to skip forward to a specific part). Prerequisites are also kept to a minimum. And if you don&amp;#8217;t want to bother with any code on your local machine, take a look at our &lt;a href=&quot;/guides/?search=interactive&amp;amp;key=tag&quot;&gt;interactive guides&lt;/a&gt; which require only a browser:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/interactive-guides.png&quot; alt=&quot;A simple reactive messaging app&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When you&amp;#8217;ve finished working through the guide as a tutorial, you can then take the code from the example application and continue learning by adapting or extending the code for your own purposes. Alternatively, if you&amp;#8217;re just looking for code examples, you can just browse the guide&amp;#8217;s GitHub repository for code similar to what you need and read how it works in the guide.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;learning-with-guides&quot;&gt;Learning with guides&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We recently published a new series of guides about writing reactive microservices using MicroProfile Reactive Messaging. These reactive messaging guides take a similar approach to our existing guides and demonstrate how to write simple web services with a reactive architecture.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The first in the reactive series of guides looks at how to create reactive Java microservices. It takes a simple reactive messaging app and shows you how to build it:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center img_border_light&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/reactive-messaging-system-inventory.png&quot; alt=&quot;A simple reactive messaging app&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The guide introduces the concepts that you need to understand to follow the guide. In this case, it gives a brief introduction to asynchronous messaging between microservices and how MicroProfile Reactive Messaging makes it easy to asynchronously send, receive, and process messages when they&amp;#8217;re received as continuous streams of events.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The guide then takes you through each of the main classes for the services in the application and explains the key parts of how the code works. You can copy the code to the partial application in the GitHub repository&amp;#8217;s &lt;code&gt;start&lt;/code&gt; directory to build the app as you read. The guide then shows you how to build, run, and test it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After that, you can play with the code by yourself and adapt it for your own purposes or move on to another of the guides. Each guide focuses on a single aspect of writing reactive Java microservices.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new &lt;a href=&quot;/guides/#reactive_service&quot;&gt;reactive series&lt;/a&gt; contains the following guides:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-reactive-messaging.html&quot;&gt;Creating reactive Java microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-reactive-messaging-rest-integration.html&quot;&gt;Integrating RESTful services with a reactive system&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-reactive-messaging-acknowledgment.html&quot;&gt;Acknowledging messages using MicroProfile Reactive Messaging&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/reactive-rest-client.html&quot;&gt;Consuming RESTful services using the reactive JAX-RS client&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/reactive-service-testing.html&quot;&gt;Testing reactive Java microservices&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;learning-to-write-cloud-native-java-microservices&quot;&gt;Learning to write cloud-native Java microservices&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The new reactive guides are just the latest of more than 50 developer guides that we&amp;#8217;ve published on the Open Liberty website over the past three years. Many of the guides cover topics relating to how to develop cloud-native Java applications, in particular using &lt;a href=&quot;https://microprofile.io/&quot;&gt;Eclipse MicroProfile&lt;/a&gt; technologies, including:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/rest-intro.html&quot;&gt;Creating a RESTful web service&lt;/a&gt; using JAX-RS and JSON-B.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-rest-client.html&quot;&gt;Consuming a RESTful web service&lt;/a&gt; using MicroProfile Rest Client.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-openapi.html&quot;&gt;Documenting RESTful APIs&lt;/a&gt; using MicroProfile OpenAPI.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-config.html&quot;&gt;Configuring microservices&lt;/a&gt; using MicroProfile Config.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-fallback.html&quot;&gt;Building fault-tolerant microservices with the @Fallback annotation&lt;/a&gt; using MicroProfile Fault Tolerance.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-metrics.html&quot;&gt;Providing metrics from a microservices&lt;/a&gt; using MicroProfile Metrics.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-opentracing-jaeger.html&quot;&gt;Enabling distributed tracing in microservices with Jaeger&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-jwt.html&quot;&gt;Securing microservices with JSON Web Tokens&lt;/a&gt; using MicroProfile JWT.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/social-media-login.html&quot;&gt;Authenticating users through social media providers&lt;/a&gt;.
&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;There is also a selection of &lt;a href=&quot;/guides/?search=interactive&amp;amp;key=tag&quot;&gt;interactive MicroProfile guides&lt;/a&gt; which are all browser-based and focus on explaining the concepts in an interactive way, including:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/microprofile-config-intro.html&quot;&gt;Separating configuration from code in microservices&lt;/a&gt; using MicroProfile Config.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/circuit-breaker.html&quot;&gt;Preventing repeated failed calls to microservices&lt;/a&gt; using MicroProfile Fault Tolerance&amp;#8217;s Circuitbreaker and Fallback policies.
&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Beyond MicroProfile, there are guides on complementary technologies for writing cloud-native Java applications using established Jakarta EE technologies, including:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/security-intro.html&quot;&gt;Securing a web application&lt;/a&gt; using Jakarta EE Security.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;/guides/jpa-intro.html&quot;&gt;Accessing and persisting data in microservices using JPA&lt;/a&gt;.
&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The guides cover the whole developer lifecycle including building an application with &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt; or &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;, &lt;a href=&quot;/guides/microshed-testing.html&quot;&gt;testing the application&lt;/a&gt;, &lt;a href=&quot;/guides/containerize.html&quot;&gt;containerizing the application&lt;/a&gt;, and then deploying the application to one of several commercial cloud platforms, including &lt;a href=&quot;/guides/cloud-ibm.html&quot;&gt;IBM Cloud&lt;/a&gt;, &lt;a href=&quot;/guides/cloud-openshift.html&quot;&gt;Red Hat OpenShift&lt;/a&gt;, and &lt;a href=&quot;/guides/cloud-azure.html&quot;&gt;Microsoft Azure&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;will-there-be-more-new-guides&quot;&gt;Will there be more new guides?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Our guides have been really well-received so we&amp;#8217;re not stopping at 50. We have a &lt;a href=&quot;https://github.com/OpenLiberty/guides-common/projects/1&quot;&gt;large backlog of proposed guides&lt;/a&gt;, some of which we&amp;#8217;re already working on and are nearly ready to publish, on topics such as using the Open Liberty Operator, securing applications with OpenID Connect, and accessing data in MongoDB.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;get-involved&quot;&gt;Get involved&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You&amp;#8217;re welcome to propose new guides by &lt;a href=&quot;https://github.com/OpenLiberty/guides-common/projects/1&quot;&gt;raising an issue and writing an outline for consideration&lt;/a&gt;. Especially let us know if you can contribute in some way once the guide has been accepted, whether that&amp;#8217;s by writing the guide, writing some code, or both.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you see any errors in our existing guides, feel free to raise an issue against that guide&amp;#8217;s GitHub repository (each guide has its own repository, which you can find in the guide text) or to create a PR to fix it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the meantime though, grab a hot drink and &lt;a href=&quot;/guides/&quot;&gt;browse our 50+ guides&lt;/a&gt;. To stay up to date with our new guides, follow us on &lt;a href=&quot;https://twitter.com/openlibertyio&quot;&gt;Twitter&lt;/a&gt; or bookmark &lt;a href=&quot;/guides/?search=new&amp;amp;key=tag&quot;&gt;new guides&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 24 Sep 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2020/09/24/reactive-developer-guides.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2020/09/24/reactive-developer-guides
          
        </guid>
        
        <category>microprofile</category>
        
        <category>metrics</category>
        
        <category>jakarta-ee</category>
        
        <category>developer-experience</category>
        
        <category>reactive</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Pre-populating database connections for better response times in the cloud</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In modern cloud environments we often use lightweight and disposable instances of our applications, as opposed to long-lived instances. This methodology is sometimes called &quot;scale up vs. scale out&quot;, and sometimes it is called &quot;cattle, not pets&quot;. The main idea here is that we should expect application instances to be disposed of if they stop working or are no longer needed, or more importantly, that we can easily make more instances if we need more.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When we apply the &quot;cattle, not pets&quot; methodology to applications that use database connections, we realize that the default behavior of lazily getting new connections as requests come in may not provide the best response times for our users.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;cdi-to-the-rescue&quot;&gt;CDI to the rescue!&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To alleviate this problem, we can &quot;pre-populate&quot; (or &quot;pre-warm&quot;) the database connection pool by eagerly obtaining a number of connections immediately once the application instance starts. Some frameworks have proprietary ways of doing this, but there is also a standard way of doing so that will work for any Java EE-, Jakarta EE- or MicroProfile-compliant runtime:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.sql.Connection&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.sql.SQLException&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.ArrayList&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;java.util.List&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.annotation.Resource&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.enterprise.context.ApplicationScoped&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.enterprise.context.Initialized&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.enterprise.event.Observes&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.inject.Inject&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.sql.DataSource&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;org.eclipse.microprofile.config.inject.ConfigProperty&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@ApplicationScoped&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;ConnectionWarmer&lt;/span&gt; {

  &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
  &lt;span class=&quot;annotation&quot;&gt;@ConfigProperty&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DB_PREWARM_CONNECTIONS&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, defaultValue = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
  &lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; preWarmConnections;

  &lt;span class=&quot;annotation&quot;&gt;@Resource&lt;/span&gt;(lookup = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jdbc/myDB&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, shareable = &lt;span class=&quot;predefined-constant&quot;&gt;false&lt;/span&gt;)
  &lt;span class=&quot;predefined-type&quot;&gt;DataSource&lt;/span&gt; ds;

  &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;volatile&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; isWarm = &lt;span class=&quot;predefined-constant&quot;&gt;false&lt;/span&gt;;

  &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;boolean&lt;/span&gt; isWarm() {
    &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; isWarm;
  }

  &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; warmConnections(&lt;span class=&quot;annotation&quot;&gt;@Observes&lt;/span&gt; &lt;span class=&quot;annotation&quot;&gt;@Initialized&lt;/span&gt;(ApplicationScoped.class) &lt;span class=&quot;predefined-type&quot;&gt;Object&lt;/span&gt; context) &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;exception&quot;&gt;Exception&lt;/span&gt; {
    &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (preWarmConnections &amp;lt; &lt;span class=&quot;integer&quot;&gt;1&lt;/span&gt;)
      &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;

    &lt;span class=&quot;predefined-type&quot;&gt;System&lt;/span&gt;.out.println(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Pre-populating &lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; + preWarmConnections + &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt; DB connections&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);

    &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;&lt;span class=&quot;predefined-type&quot;&gt;Connection&lt;/span&gt;&amp;gt; connections = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;ArrayList&lt;/span&gt;&amp;lt;&amp;gt;();
    &lt;span class=&quot;keyword&quot;&gt;try&lt;/span&gt; {
      &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;integer&quot;&gt;0&lt;/span&gt;; i &amp;lt; preWarmConnections; i++) {
        connections.add(ds.getConnection());
      }
    } &lt;span class=&quot;keyword&quot;&gt;finally&lt;/span&gt; {
      connections.forEach(&lt;span class=&quot;local-variable&quot;&gt;this&lt;/span&gt;::closeQuietly);
    }

    isWarm = &lt;span class=&quot;predefined-constant&quot;&gt;true&lt;/span&gt;;
    &lt;span class=&quot;predefined-type&quot;&gt;System&lt;/span&gt;.out.println(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Done pre-populating &lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; + preWarmConnections + &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt; connections&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
  }

  &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; closeQuietly(&lt;span class=&quot;predefined-type&quot;&gt;Connection&lt;/span&gt; con) {
    &lt;span class=&quot;keyword&quot;&gt;try&lt;/span&gt; {
      con.close();
    } &lt;span class=&quot;keyword&quot;&gt;catch&lt;/span&gt; (&lt;span class=&quot;exception&quot;&gt;SQLException&lt;/span&gt; ignore) {
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To accomplish this we are using a few tricks:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Using &lt;code&gt;@Observes @Initialized(ApplicationScoped.class)&lt;/code&gt; from CDI, we can create a method that is triggered as soon as the application starts.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using &lt;code&gt;@ConfigProperty(name = &quot;DB_PREWARM_CONNECTIONS&quot;, defaultValue = &quot;5&quot;)&lt;/code&gt; from MicroProfile Config, we define externalized configuration for how many connections to pre-populate, with a default value of &lt;code&gt;5&lt;/code&gt; connections to pre-populate.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using &lt;code&gt;@Resource(lookup = &quot;jdbc/myDB&quot;, shareable = false)&lt;/code&gt; from Common Annotations, we can inject the datasource used by our application and define it as &lt;code&gt;shareable = false&lt;/code&gt; which will ensure that each &lt;code&gt;getConnection()&lt;/code&gt; request in the sequence will obtain a new physical database connection. The default value is &lt;code&gt;shareable = true&lt;/code&gt; which would cause all 5 connections to re-use the same physical database connection (normally efficient, but not what we want in this case).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;waiting-to-serve-requests-until-the-connection-pool-is-warm&quot;&gt;Waiting to serve requests until the connection pool is warm&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Getting a number of connections right away when the application starts is only half of the solution. We also want our application to wait to report that it&amp;#8217;s ready until the necessary number of connections have been pre-populateed. To accomplish this, we can add a readiness check from MicroProfile Health like so:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.enterprise.context.ApplicationScoped&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;javax.inject.Inject&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;org.eclipse.microprofile.health.HealthCheck&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;org.eclipse.microprofile.health.HealthCheckResponse&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;org.eclipse.microprofile.health.Readiness&lt;/span&gt;;

&lt;span class=&quot;annotation&quot;&gt;@Readiness&lt;/span&gt;
&lt;span class=&quot;annotation&quot;&gt;@ApplicationScoped&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;WarmConnectionsReady&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;implements&lt;/span&gt; HealthCheck {

  &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
  ConnectionWarmer warmer;

  &lt;span class=&quot;annotation&quot;&gt;@Override&lt;/span&gt;
  &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; HealthCheckResponse call() {
    &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; HealthCheckResponse.named(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;DB connections warm&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
        .state(warmer.isWarm())
        .build();
  }

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Using this readiness check, the entire application/container waits to report it is ready until the DB connections have been pre-populateed when the cloud infrastructure polls the readiness URL of: &lt;a href=&quot;http://localhost:9080/health/ready&quot;&gt;http://localhost:9080/health/ready&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;try-it-out&quot;&gt;Try it out!&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The complete code mentioned in this post can be found in &lt;a href=&quot;https://github.com/aguibert/basic-liberty-mvn/tree/datasource-prewarm&quot;&gt;my sample repository&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code&gt;# clone the repo
$ git clone git@github.com:aguibert/basic-liberty-mvn.git -b datasource-prewarm
cd basic-liberty-mvn

# in a separate terminal window, start DB2
cd /path/to/basic-liberty-mvn
./startDB2.sh

# in the original terminal window run the app
mvn liberty:dev&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Wed, 09 Sep 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2020/09/09/pre-populating-db-connections.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2020/09/09/pre-populating-db-connections
          
        </guid>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>performance-enhancements</category>
        
        <category>data-sources</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Securing Open Liberty applications with Azure Active Directory using OpenID Connect</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Long gone are the days when you had to create your own user account management, authentication, and authorization for your web delivered software. Instead, contemporary applications make use of Identity and Access Management (IAM) services from external providers. As a full-featured Java application runtime, Open Liberty has great options for externally provided IAM.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty supports IAM mainstays, such as Social Media Login, SAML Web Single Sign-on, and OpenID Connect Client. In Bruce Tiffany’s blog post &lt;a href=&quot;/blog/2019/08/29/securing-microservices-social-login-jwt.html&quot;&gt;“Securing Open Liberty apps and micro-services with MicroProfile JWT and Social Media login,”&lt;/a&gt; you have a solid example of how to use the Open Liberty Social Media Login feature to authenticate users using their existing social media credentials. In this blog post, let’s take a look at another example of how to configure the Liberty Social Media Login feature as an OpenID Connect client to secure Java applications with Azure Active Directory.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The sample code used in this blog is hosted on this &lt;a href=&quot;https://github.com/Azure-Samples/liberty-aad-oidc&quot;&gt;GitHub repository&lt;/a&gt;. Feel free to check it out and follow its user guide to run the Java EE demo application before or after reading this blog.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#setupAzure&quot;&gt;Set up Azure Active Directory&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#sociallogin&quot;&gt;Configure social media login as OpenID Connect client&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#openid&quot;&gt;Use OpenID Connect to authenticate users&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#workflow&quot;&gt;Workflow&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#secureRest&quot;&gt;Secure internal REST calls using JWT RBAC&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#summary&quot;&gt;Summary&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;setupAzure&quot;&gt;Set up Azure Active Directory&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Azure Active Directory (Azure AD) implements OpenID Connect (OIDC), an authentication protocol built on OAuth 2.0, which lets you securely sign in a user from Azure AD to an application. Before going into the sample code, you must first set up an Azure AD tenant and create an application registration with a redirect URL and client secret. The tenant ID, application (client) ID, and client secret are used by Open Liberty to negotiate with Azure AD to complete an OAuth 2.0 authorization code flow.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Learn how to set up Azure AD from these articles:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/en-gb/azure/active-directory/develop/quickstart-create-new-tenant&quot;&gt;Create a new tenant&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/en-gb/azure/active-directory/develop/quickstart-register-app&quot;&gt;Register an application&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/en-gb/azure/active-directory/develop/howto-create-service-principal-portal#create-a-new-application-secret&quot;&gt;Add a new client secret&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;sociallogin&quot;&gt;Configure social media login as OpenID Connect client&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following sample code shows how an application running on an Open Liberty server is configured with the &lt;code&gt;socialLogin-1.0&lt;/code&gt; feature as an OpenID Connect client to authenticate a user from an OpenID Connect Provider, with Azure AD as the designated security provider.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The relevant server configuration in &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;preprocessor&quot;&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;description&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultServer&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Enable features --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;cdi-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jaxb-2.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jpa-2.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jsf-2.3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jaxrs-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;ejbLite-3.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;socialLogin-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;transportSecurity-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;appSecurity-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jwt-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpJwt-1.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpConfig-1.3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- trust JDK’s default truststore --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;ssl&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultSSLConfig&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;attribute-name&quot;&gt;trustDefaultCerts&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;oidcLogin&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;liberty-aad-oidc-javaeecafe&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;clientId&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${client.id}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;clientSecret&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${client.secret}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;discoveryEndpoint&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;https://login.microsoftonline.com/${tenant.id}/v2.0/.well-known/openid-configuration&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;signatureAlgorithm&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;RS256&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;userNameAttribute&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;preferred_username&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- JWT consumer --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;mpJwt&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jwtUserConsumer&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;jwksUri&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;https://login.microsoftonline.com/${tenant.id}/discovery/v2.0/keys&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;issuer&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;https://login.microsoftonline.com/${tenant.id}/v2.0&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;audiences&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${client.id}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;userNameAttribute&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;preferred_username&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;authFilterRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mpJwtAuthFilter&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- JWT auth filter --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;authFilter&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mpJwtAuthFilter&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;requestUrl&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myRequestUrl&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;urlPattern&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/rest&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;matchType&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;contains&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/authFilter&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;httpEndpoint&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultHttpEndpoint&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;host&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;httpPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9080&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;httpsPort&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;9443&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Automatically expand WAR files and EAR files --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;applicationManager&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;autoExpand&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;dataSource&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;JavaEECafeDB&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;jdbcDriverRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;postgresql-driver&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;jndiName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jdbc/JavaEECafeDB&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;transactional&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;javax.sql.ConnectionPoolDataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;properties&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;databaseName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;postgres&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;portNumber&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;5432&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;attribute-name&quot;&gt;serverName&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${postgresql.server.name}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;user&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${postgresql.user}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;attribute-name&quot;&gt;password&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${postgresql.password}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/dataSource&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;jdbcDriver&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;postgresql-driver&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;javax.sql.ConnectionPoolDataSource&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;org.postgresql.ds.PGConnectionPoolDataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;javax.sql.XADataSource&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;org.postgresql.xa.PGXADataSource&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;libraryRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;postgresql-library&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;library&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;postgresql-library&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;fileset&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;dir&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${shared.resource.dir}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;PostgreSQLFileset&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;includes&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;postgresql-42.2.4.jar&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;webApplication&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;javaee-cafe&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;location&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${server.config.dir}/apps/javaee-cafe.war&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;application-bnd&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;security-role&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;users&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;tag&quot;&gt;&amp;lt;special-subject&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;ALL_AUTHENTICATED_USERS&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;/security-role&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/application-bnd&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/webApplication&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;(Find this &lt;a href=&quot;https://github.com/Azure-Samples/liberty-aad-oidc/blob/master/javaee-cafe/src/main/liberty/config/server.xml&quot;&gt;code sample&lt;/a&gt; in GitHub.)&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;oidcLogin&lt;/code&gt; element has a large number of available configuration options in Open Liberty. With Azure AD, most of them are not required and you can use only the few options used in the code example. This is because Azure AD supports discovery endpoints as is shown in the code example. Discovery endpoints allow for most OpenID Connect configuration to be automatically retrieved by the client, significantly simplifying configuration. In addition, Azure AD instances follow a known pattern for discovery endpoint URLs, allowing us to parameterize the URL using a tenant ID. In addition to that, a client ID and secret are needed. RS256 must be used as the signature algorithm with Azure AD.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;userNameAttribute&lt;/code&gt; parameter is used to map a token value from Azure AD to a unique subject identity in Liberty. There are  &lt;a href=&quot;https://docs.microsoft.com/en-gb/azure/active-directory/develop/access-tokens&quot;&gt;a number of Azure AD token values&lt;/a&gt; you can use. Do be cautious, as the required tokens that exist for v1.0 and v2.0 differ (with v2.0 not supporting some v1.0 tokens). Either &lt;code&gt;preferred_username&lt;/code&gt; or &lt;code&gt;oid&lt;/code&gt; can be safely used, although in most cases you will probably want to use the &lt;code&gt;preferred_username&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Using Azure AD allows your application to use a certificate with a root CA signed by Microsoft’s public certificate. This certificate is added to the default cacerts of the JVM. Trusting the JVM default cacerts ensures a successful SSL handshake between the OIDC Client and Azure AD (i.e., setting the &lt;code&gt;defaultSSLConfig&lt;/code&gt; &lt;code&gt;trustDefaultCerts&lt;/code&gt; value to &lt;code&gt;true&lt;/code&gt;).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In our case, we assign all users authenticated via Azure AD the users role. More complex role mappings are possible with Liberty if desired.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;openid&quot;&gt;Use OpenID Connect to authenticate users&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The sample application exposes a JSF client, which defines a Java EE security constraint that only users with the role &lt;code&gt;users&lt;/code&gt; can access.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The relevant configuration in &lt;code&gt;web.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;preprocessor&quot;&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;web-app&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;version&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;3.1&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;attribute-name&quot;&gt;xmlns&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;http://xmlns.jcp.org/xml/ns/javaee&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;attribute-name&quot;&gt;xmlns:xsi&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;attribute-name&quot;&gt;xsi:schemaLocation&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;context-param&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;param-name&amp;gt;&lt;/span&gt;javax.faces.PROJECT_STAGE&lt;span class=&quot;tag&quot;&gt;&amp;lt;/param-name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;param-value&amp;gt;&lt;/span&gt;Production&lt;span class=&quot;tag&quot;&gt;&amp;lt;/param-value&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/context-param&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;servlet&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;servlet-name&amp;gt;&lt;/span&gt;Faces Servlet&lt;span class=&quot;tag&quot;&gt;&amp;lt;/servlet-name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;servlet-class&amp;gt;&lt;/span&gt;javax.faces.webapp.FacesServlet&lt;span class=&quot;tag&quot;&gt;&amp;lt;/servlet-class&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;load-on-startup&amp;gt;&lt;/span&gt;1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/load-on-startup&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/servlet&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;servlet-mapping&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;servlet-name&amp;gt;&lt;/span&gt;Faces Servlet&lt;span class=&quot;tag&quot;&gt;&amp;lt;/servlet-name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;url-pattern&amp;gt;&lt;/span&gt;*.xhtml&lt;span class=&quot;tag&quot;&gt;&amp;lt;/url-pattern&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;servlet&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;servlet-name&amp;gt;&lt;/span&gt;javax.ws.rs.core.Application&lt;span class=&quot;tag&quot;&gt;&amp;lt;/servlet-name&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/servlet&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;servlet-mapping&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;servlet-name&amp;gt;&lt;/span&gt;javax.ws.rs.core.Application&lt;span class=&quot;tag&quot;&gt;&amp;lt;/servlet-name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;url-pattern&amp;gt;&lt;/span&gt;/rest/*&lt;span class=&quot;tag&quot;&gt;&amp;lt;/url-pattern&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;session-config&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;session-timeout&amp;gt;&lt;/span&gt;
            30
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/session-timeout&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/session-config&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;welcome-file-list&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;welcome-file&amp;gt;&lt;/span&gt;index.xhtml&lt;span class=&quot;tag&quot;&gt;&amp;lt;/welcome-file&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/welcome-file-list&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;security-role&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;role-name&amp;gt;&lt;/span&gt;users&lt;span class=&quot;tag&quot;&gt;&amp;lt;/role-name&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/security-role&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;tag&quot;&gt;&amp;lt;security-constraint&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;web-resource-collection&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;web-resource-name&amp;gt;&lt;/span&gt;javaee-cafe&lt;span class=&quot;tag&quot;&gt;&amp;lt;/web-resource-name&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;url-pattern&amp;gt;&lt;/span&gt;/*&lt;span class=&quot;tag&quot;&gt;&amp;lt;/url-pattern&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/web-resource-collection&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;auth-constraint&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;tag&quot;&gt;&amp;lt;role-name&amp;gt;&lt;/span&gt;users&lt;span class=&quot;tag&quot;&gt;&amp;lt;/role-name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;/auth-constraint&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/security-constraint&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/web-app&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;(Find this &lt;a href=&quot;https://github.com/Azure-Samples/liberty-aad-oidc/blob/master/javaee-cafe/src/main/webapp/WEB-INF/web.xml&quot;&gt;code sample&lt;/a&gt; in GitHub.)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;workflow&quot;&gt;Workflow&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The following diagram illustrates the OpenID Connect sign-in and token acquisition flow from &lt;a href=&quot;https://docs.microsoft.com/en-gb/azure/active-directory/develop/v2-protocols-oidc#protocol-diagram-access-token-acquisition&quot;&gt;Microsoft identity platform and OpenID Connect protocol&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/workflow-MSAzure.png&quot; alt=&quot;OpenID Connect sign-in and token acquisition flow&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This is standard Java EE security. When an unauthenticated user attempts to access the JSF client, they are redirected to Microsoft to provide their Azure AD credentials. Upon success, the browser gets redirected back to the client with an authorization code. The client then contacts Microsoft again with the authorization code, client ID and secret to obtain an ID token and access token, and finally create an authenticated user on the client, which then gets access to the JSF client.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To get authenticated user information, use the &lt;code&gt;@Inject&lt;/code&gt; annotation to obtain a reference to the &lt;code&gt;javax.security.enterprise.SecurityContext&lt;/code&gt; and call its method &lt;code&gt;getCallerPrincipal()&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Named&lt;/span&gt;
&lt;span class=&quot;annotation&quot;&gt;@SessionScoped&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;Cafe&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;Serializable&lt;/span&gt; {

    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;transient&lt;/span&gt; SecurityContext securityContext;

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; getLoggedOnUser() {
        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; securityContext.getCallerPrincipal().getName();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Find this &lt;a href=&quot;https://github.com/Azure-Samples/liberty-aad-oidc/blob/master/javaee-cafe/src/main/java/cafe/web/view/Cafe.java&quot;&gt;code sample&lt;/a&gt; in GitHub.)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;secureRest&quot;&gt;Secure internal REST calls using JWT RBAC&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;Cafe&lt;/code&gt; bean depends on &lt;code&gt;CafeResource&lt;/code&gt;, a REST service built with JAX-RS, to create, read, update and delete coffees. The CafeResource service implements RBAC (role-based access control) using MicroProfile JWT to verify the &lt;code&gt;groups&lt;/code&gt; claim of the token.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Path&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;coffees&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;CafeResource&lt;/span&gt; {

    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;Logger&lt;/span&gt; logger = &lt;span class=&quot;predefined-type&quot;&gt;Logger&lt;/span&gt;.getLogger(MethodHandles.lookup().lookupClass().getName());

    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; CafeRepository cafeRepository;

    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@ConfigProperty&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;admin.group.id&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; ADMIN_GROUP_ID;

    &lt;span class=&quot;annotation&quot;&gt;@Inject&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; JsonWebToken jwtPrincipal;

    &lt;span class=&quot;annotation&quot;&gt;@DELETE&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Path&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;{id}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; deleteCoffee(&lt;span class=&quot;annotation&quot;&gt;@PathParam&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class=&quot;predefined-type&quot;&gt;Long&lt;/span&gt; coffeeId) {
        &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (!&lt;span class=&quot;local-variable&quot;&gt;this&lt;/span&gt;.jwtPrincipal.getGroups().contains(ADMIN_GROUP_ID)) {
            &lt;span class=&quot;keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; WebApplicationException(Response.Status.FORBIDDEN);
        }

        &lt;span class=&quot;keyword&quot;&gt;try&lt;/span&gt; {
            &lt;span class=&quot;local-variable&quot;&gt;this&lt;/span&gt;.cafeRepository.removeCoffeeById(coffeeId);
        } &lt;span class=&quot;keyword&quot;&gt;catch&lt;/span&gt; (&lt;span class=&quot;exception&quot;&gt;IllegalArgumentException&lt;/span&gt; ex) {
            logger.log(&lt;span class=&quot;predefined-type&quot;&gt;Level&lt;/span&gt;.SEVERE, &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Error calling deleteCoffee() for coffeeId {0}: {1}.&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                    &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;type&quot;&gt;[]&lt;/span&gt; { coffeeId, ex });
            &lt;span class=&quot;keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; WebApplicationException(Response.Status.NOT_FOUND);
        }
    }

    &lt;span class=&quot;annotation&quot;&gt;@GET&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Produces&lt;/span&gt;({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;List&lt;/span&gt;&amp;lt;Coffee&amp;gt; getAllCoffees() {
        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;local-variable&quot;&gt;this&lt;/span&gt;.cafeRepository.getAllCoffees();
    }

    &lt;span class=&quot;annotation&quot;&gt;@POST&lt;/span&gt;
    &lt;span class=&quot;annotation&quot;&gt;@Consumes&lt;/span&gt;({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
    &lt;span class=&quot;annotation&quot;&gt;@Produces&lt;/span&gt;({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; Coffee createCoffee(Coffee coffee) {
        &lt;span class=&quot;keyword&quot;&gt;try&lt;/span&gt; {
            &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;local-variable&quot;&gt;this&lt;/span&gt;.cafeRepository.persistCoffee(coffee);
        } &lt;span class=&quot;keyword&quot;&gt;catch&lt;/span&gt; (PersistenceException e) {
            logger.log(&lt;span class=&quot;predefined-type&quot;&gt;Level&lt;/span&gt;.SEVERE, &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Error creating coffee {0}: {1}.&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;predefined-type&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;type&quot;&gt;[]&lt;/span&gt; { coffee, e });
            &lt;span class=&quot;keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; WebApplicationException(e, Response.Status.INTERNAL_SERVER_ERROR);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;(Find this &lt;a href=&quot;https://github.com/Azure-Samples/liberty-aad-oidc/blob/master/javaee-cafe/src/main/java/cafe/web/rest/CafeResource.java&quot;&gt;code sample&lt;/a&gt; in GitHub.)&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;admin.group.id&lt;/code&gt; is injected into the application using MicroProfile Config at the application startup using the &lt;code&gt;ConfigProperty&lt;/code&gt; annotation. MicroProfile JWT enables you to &lt;code&gt;@Inject&lt;/code&gt; the JWT (JSON Web Token). The &lt;code&gt;CafeResource&lt;/code&gt; REST endpoint receives the JWT with the &lt;code&gt;preferred_username&lt;/code&gt; and &lt;code&gt;groups&lt;/code&gt; claims from the ID Token issued by Azure AD in the OpenID Connect authorization workflow. The ID Token can be retrieved using the &lt;code&gt;com.ibm.websphere.security.social.UserProfileManager and com.ibm.websphere.security.social.UserProfile&lt;/code&gt; APIs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Here is the relevant configuration snippet in &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;preprocessor&quot;&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;description&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;defaultServer&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- Enable features --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jwt-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpJwt-1.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpConfig-1.3&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- JWT consumer --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;mpJwt&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;jwtUserConsumer&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;jwksUri&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;https://login.microsoftonline.com/${tenant.id}/discovery/v2.0/keys&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;issuer&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;https://login.microsoftonline.com/${tenant.id}/v2.0&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;audiences&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;${client.id}&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;userNameAttribute&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;preferred_username&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;attribute-name&quot;&gt;authFilterRef&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mpJwtAuthFilter&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- JWT auth filter --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;authFilter&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;mpJwtAuthFilter&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;tag&quot;&gt;&amp;lt;requestUrl&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;myRequestUrl&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;urlPattern&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/rest&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;matchType&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;contains&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/authFilter&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;(Find this &lt;a href=&quot;https://github.com/Azure-Samples/liberty-aad-oidc/blob/master/javaee-cafe/src/main/liberty/config/server.xml&quot;&gt;code sample&lt;/a&gt; in GitHub.)&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Note, the &lt;code&gt;groups&lt;/code&gt; claim is not propagated by default and requires additional Azure AD configuration. To add a &lt;code&gt;groups&lt;/code&gt; claim into the ID token, you need to create a group with type as &lt;code&gt;Security&lt;/code&gt; and add one or more members to it in Azure AD. In the application registration created as part of Azure AD configuration, you also need to find &lt;strong&gt;Token configuration&lt;/strong&gt;, select &lt;strong&gt;Add groups claim&lt;/strong&gt;, select &lt;strong&gt;Security groups&lt;/strong&gt; as group types to include in ID token, then expand &lt;strong&gt;ID&lt;/strong&gt; and select &lt;strong&gt;Group ID&lt;/strong&gt; in the &lt;strong&gt;Customize token properties by type&lt;/strong&gt; section. Learn more details from these articles:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/en-gb/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal&quot;&gt;Create a new group and add members&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/en-gb/azure/active-directory/develop/active-directory-optional-claims#configuring-groups-optional-claims&quot;&gt;Configuring groups optional claims&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this blog entry, we demonstrated how to effectively secure an Open Liberty application using OpenID Connect and Azure Active Directory. This write-up and the underlying &lt;a href=&quot;https://github.com/Azure-Samples/liberty-aad-oidc&quot;&gt;official Azure sample&lt;/a&gt; should also easily work for WebSphere Liberty. This effort is part of a broader collaboration between Microsoft and IBM to provide better guidance and tools for developers using Java EE, Jakarta EE (Java EE has been transferred to the Eclipse Foundation as Jakarta EE under vendor-neutral open source governance), and MicroProfile (MicroProfile is a set of open source specifications that build upon Java EE technologies and target the microservices domain) on Azure.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We would like to hear from you as to what kind of tools and guidance you need. If possible, please &lt;a href=&quot;https://microsoft.qualtrics.com/jfe/form/SV_b903dEDAOzbiXDT&quot;&gt;fill out a five-minute survey&lt;/a&gt; on this topic and share your invaluable feedback—especially if you are interested in working closely with us (for free) on a cloud migration case.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;em&gt;Reza Rahman is Principal Program Manager for Java on Azure at Microsoft.&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Fri, 04 Sep 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2020/09/04/securing-open-liberty-azure.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2020/09/04/securing-open-liberty-azure
          
        </guid>
        
        <category>security</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>New features for MicroProfile 4.0 and more Jakarta EE 9 features in Open Liberty 20.0.0.10 beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In this release of Open Liberty Beta you can try the new features for MicroProfile 4.0 which are Fault Tolerance 3.0, Metrics 3.0, Health 3.0 and OpenTracing 2.0 plus more Jakarta EE 9 features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a new, larger package that contains all Open Liberty beta features (including Jakarta EE 9 beta features) and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools (either the All Beta Features package or the Jakarta EE 9 Beta Features package, depending on what you want to try).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The All Beta Features package includes the following beta features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#fault&quot;&gt;MicroProfile Fault Tolerance 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#metrics&quot;&gt;MicroProfile Metrics 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#health&quot;&gt;MicroProfile Health 3.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#opentracing&quot;&gt;MicroProfile OpenTracing 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/logos/home_logo_microprofile.png&quot; alt=&quot;MicroProfile Logo&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;fault&quot;&gt;MicroProfile Fault Tolerance 3.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Fault Tolerance allows you to easily apply strategies for mitigating failure to their code. It provides annotations which you can add to methods to use bulkhead, circuit breaker, retry, timeout and fallback strategies.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Fault Tolerance 3.0 overhauls the metrics that are automatically exported by Fault Tolerance to take advantage of tags and make it easier to use those metrics to understand when and where your application is failing.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Information which was previously included in the metric name is now included as metric tags, making it much easier to query for data from multiple methods and pick out which, if any, is causing issues.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Old metric: &lt;code&gt;application:ft.&amp;lt;name&amp;gt;.timeout.callsTimedOut.total&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;New metric: &lt;code&gt;base:ft.timeout.calls.total{method=&quot;&amp;lt;name&amp;gt;&quot;, timedOut=&quot;true&quot;}`&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable Fault Tolerance 3.0 and CDI in the &lt;code&gt;server.xml&lt;/code&gt;, along with any other features you&amp;#8217;re using.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpFaultTolerance-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;cdi-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jaxrs-2.1&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Add any of the Fault Tolerance annotations to a business method of a CDI bean.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;annotation&quot;&gt;@Retry&lt;/span&gt;(&lt;span class=&quot;integer&quot;&gt;5&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; User lookupUserFromRegistry(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; name) {
  &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; registry.getUser(name);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When that method is called as a a CDI business method, the fault tolerance strategy will be used. In this example, if &lt;code&gt;lookupUserFromRegistry()&lt;/code&gt; would throw an exception, it will instead be retried up to five times.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Get an introduction to MicroProfile Fault Tolerance with the Open Liberty guides &lt;a href=&quot;/guides/retry-timeout.html&quot;&gt;Failing fast and recovering from errors&lt;/a&gt; and &lt;a href=&quot;/guides/circuit-breaker.html&quot;&gt;Preventing repeated failed calls to microservices&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-fault-tolerance/releases/tag/3.0-RC2&quot;&gt;MicroProfile Fault Tolerance 3.0 Release Page (Javadoc &amp;amp; Spec)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-fault-tolerance/blob/master/spec/src/main/asciidoc/release_notes.asciidoc#release-notes-for-microprofile-fault-tolerance-30&quot;&gt;Release Notes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;metrics&quot;&gt;MicroProfile Metrics 3.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Metrics 3.0 (as part of MicroProfile 4.0) introduces new metric values for the existing SimpleTimer and Timer metrics. Additionally a new REST metric is introduced for better monitoring and handling of unmapped exceptions. Manual configuration for re-usability has been removed. A notable change to the MicroProfile Metrics programming model regarding CDI Producers has been made. Lastly a medley of API improvements and refactoring have been added in this release.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;simpletimer&quot;&gt;SimpleTimer&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The SimpleTimer metric now tracks and reports the highest and lowest recorded time duration of the previous complete minute. See &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-metrics-3.0-RC1/apidocs/index.html?org/eclipse/microprofile/metrics/SimpleTimer.html&quot;&gt;SimpleTimer Javadoc&lt;/a&gt; for more information.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;timer&quot;&gt;Timer&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Time metric now tracks and reports the total elapsed time duration. See &lt;a href=&quot;https://download.eclipse.org/microprofile/microprofile-metrics-3.0-RC1/apidocs/index.html?org/eclipse/microprofile/metrics/Timer.html&quot;&gt;Timer Javadoc&lt;/a&gt; for more information.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;rest-metric&quot;&gt;REST metric&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A new &lt;code&gt;REST.request.unmappedException.total&lt;/code&gt; metric that is backed by a counter metric has been introduced. Similar to the &lt;code&gt;REST.request&lt;/code&gt; metric, there will be one unique metric for each REST endpoint identified by a class and method label. The new REST metric will count the amount of times the request ends in an unmapped exception. The REST.request metric corresponding to this REST endpoint will not record any values if an unmapped exception has occured.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;cdi-producer&quot;&gt;CDI Producer&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;@Metrics&lt;/code&gt; annotation will no longer support the method target (i.e it can not be annotated on a method). Additionally, it will not support usage with CDI Producers.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;try-it-now-2&quot;&gt;Try it now&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable Metrics 3.0 in the &lt;code&gt;server.xml&lt;/code&gt;, along with any other features you&amp;#8217;re using.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpMetrics-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;More information:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-metrics/releases/tag/3.0-RC1&quot;&gt;MicroProfile Metrics 3.0 Release Page (Javadoc &amp;amp; Spec)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-metrics/blob/3.0-RC1/spec/src/main/asciidoc/changelog.adoc&quot;&gt;Release Notes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;health&quot;&gt;MicroProfile Health 3.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Health 3.0 enables you to provide your own health check procedures to be invoked by Open Liberty, to verify the health of your microservice.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Health allows services to report their health, and it publishes the overall health status to a defined endpoint. A service reports UP if it is available and reports DOWN if it is unavailable. MicroProfile Health reports an individual service status at the endpoint and indicates the overall status as UP if all the services are UP. A service orchestrator can then use the health statuses to make decisions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile Health checks its own health by performing necessary self-checks and then reports its overall status by implementing the API provided by MicroProfile Health. A self-check can be a check on anything that the service needs, such as a dependency, a successful connection to an endpoint, a system property, a database connection, or the availability of required resources. MicroProfile offers checks for both liveness and readiness.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the &lt;code&gt;mpHealth-3.0&lt;/code&gt; feature for Open Liberty:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The overall default Readiness status was changed to DOWN, with an empty response until all the deployed application(s) have been started. A new MicroProfile Config property (&lt;code&gt;mp.health.default.readiness.empty.response=UP&lt;/code&gt;) is introduced to change the overall default Readiness check status to UP, during application start up, that do not have any user-defined health checks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;HealthCheckResponseBuilder.state(Boolean UP)&lt;/code&gt; method was also renamed to &lt;code&gt;HealthCheckResponseBuilder.status(Boolean UP)&lt;/code&gt; for HealthCheckResponse deserialization compatibility, where the JSON health check response string can now be deserialized into an HealthCheckResponse object.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The deprecated &lt;code&gt;@Health&lt;/code&gt; qualifier was removed, and you should use the &lt;code&gt;@Liveness&lt;/code&gt; or &lt;code&gt;@Readiness&lt;/code&gt; qualifiers in your HealthCheck implementations, as appropriate.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Applications are expected to provide health check procedures by implementing the HealthCheck interface with the &lt;code&gt;@Liveness&lt;/code&gt; or &lt;code&gt;@Readiness&lt;/code&gt; annotations. These are used by Open Liberty to verify the Liveness or Readiness of the application, respectively. Add the logic of your health check in the call() method, and return the &lt;code&gt;HealthCheckResponse&lt;/code&gt; object, by using the simple up()/down() methods from the API:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;**Liveness Check**
&lt;span class=&quot;annotation&quot;&gt;@Liveness&lt;/span&gt;
&lt;span class=&quot;annotation&quot;&gt;@ApplicationScoped&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;AppLiveCheck&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;implements&lt;/span&gt; HealthCheck {
...
    &lt;span class=&quot;annotation&quot;&gt;@Override&lt;/span&gt;
     &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; HealthCheckResponse call() {
       ...
       HealthCheckResponse.up(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;my-liveness-check&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
       ...
     }
}

**Readiness Check**
&lt;span class=&quot;annotation&quot;&gt;@Readiness&lt;/span&gt;
&lt;span class=&quot;annotation&quot;&gt;@ApplicationScoped&lt;/span&gt;
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;AppReadyCheck&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;implements&lt;/span&gt; HealthCheck {
...
    &lt;span class=&quot;annotation&quot;&gt;@Override&lt;/span&gt;
     &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; HealthCheckResponse call() {
       ...
       HealthCheckResponse.named(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;my-app-readiness&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;).status(isMyAppReady()).build();
       ...
     }
}
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To view the status of each health check, access the either the &lt;code&gt;&lt;a href=&quot;http://&amp;lt;hostname&amp;gt;:&amp;lt;port&amp;gt;/health/live&quot; class=&quot;bare&quot;&gt;http://&amp;lt;hostname&amp;gt;:&amp;lt;port&amp;gt;/health/live&lt;/a&gt;&lt;/code&gt; or &lt;code&gt;&lt;a href=&quot;http://&amp;lt;hostname&amp;gt;:&amp;lt;port&amp;gt;/health/ready&quot; class=&quot;bare&quot;&gt;http://&amp;lt;hostname&amp;gt;:&amp;lt;port&amp;gt;/health/ready&lt;/a&gt; endpoints&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;More information:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-health/releases/tag/3.0-RC1&quot;&gt;MicroProfile Health 3.0 Release Page (Javadoc &amp;amp; Spec)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-health/blob/master/spec/src/main/asciidoc/release_notes.asciidoc&quot;&gt;Release notes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;opentracing&quot;&gt;MicroProfile OpenTracing 2.0&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile OpenTracing 2.0 can be used to profile and monitor applications built using microservice architecture.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile OpenTracing 2.0 has upgraded the OpenTracing API to version 0.33.0.  This allows the
use of tracing backends and their libraries that are built on OpenTracing API 0.33.0.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;try-it-now-3&quot;&gt;Try it now&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Include the following in the &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;mpOpenTracing-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Also configure a tracing backend such as Jaeger or Zipkin.&lt;br&gt;
For Jaeger, add the following maven dependencies in the application&amp;#8217;s pom.xml.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.jaegertracing&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jaeger-client&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.slf4j&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;slf4j-api&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.7.30&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.slf4j&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;slf4j-jdk14&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.7.30&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You can find out more about about configuring Jaeger settings using environment variables by looking
at &lt;a href=&quot;https://github.com/jaegertracing/jaeger-client-java/blob/v1.2.0/jaeger-core/README.md&quot;&gt;jaeger-client-java readme&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For the &lt;code&gt;JAEGER_PASSWORD&lt;/code&gt; environment variable, the password can be encoded using the &lt;code&gt;securityUtility&lt;/code&gt; command.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Depending on Jaeger’s sampling settings &lt;code&gt;JAEGER_SAMPLER_TYPE&lt;/code&gt; and &lt;code&gt;JAEGER_SAMPLER_PARAM&lt;/code&gt;,
Jaeger may not report every span created by the applications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For Zipkin, take a look at the &lt;a href=&quot;https://github.com/WASdev/sample.opentracing.zipkintracer&quot;&gt;sample project&lt;/a&gt; to see how to implement a tracer for Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Define your application in the &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;webApplication&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;location&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;yourapp.war&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;contextRoot&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/yourapp&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- enable visibility to third party APIs --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;classloader&lt;/span&gt; &lt;span class=&quot;attribute-name&quot;&gt;apiTypeVisibility&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;+third-party&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/webApplication&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Once you have hit some JAX-RS endpoints of your application, you should be able to find spans in the user interface of your tracing backend.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;More information:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-opentracing/releases/tag/2.0-RC2&quot;&gt;MicroProfile OpenTracing 2.0 Release Page (Javadoc &amp;amp; Spec)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eclipse/microprofile-opentracing/blob/master/spec/src/main/asciidoc/changelog.asciidoc&quot;&gt;Release notes&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now-4&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 14, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20.0.0.10-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[20.0.0.10-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/logos/Jakarta_EE_logo.png&quot; alt=&quot;Jakarta EE Logo&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The main change visible to developers in the Jakarta EE 9 planned release is the names of packages changing to accomodate the new &lt;code&gt;jakarta.*&lt;/code&gt; namespace. In this Open Liberty beta, we have more Jakarta EE 9 features with their name change completed.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This Open Liberty beta introduces the following Jakarta EE 9 features which now possess their all-new Jakarta EE 9 package names:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Authentication 2.0 (&lt;code&gt;jaspic-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Authorization 2.0 (&lt;code&gt;jacc-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Persistence 3.0 (includes Eclipselink 3.0-RC1.) (&lt;code&gt;jpa-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These join the Jakarta EE 9 features in &lt;a href=&quot;/blog/?search=beta&amp;amp;key=tag&quot;&gt;previous Open Liberty betas&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jakarta XML Binding 3.0 (&lt;code&gt;jaxb-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Managed Beans 2.0 (&lt;code&gt;managedBeans-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Concurrency 2.0 (&lt;code&gt;concurrent-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Home 4.0 (&lt;code&gt;ejbHome-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Lite 4.0 (&lt;code&gt;ejbLite-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Bean Validation 3.0 (&lt;code&gt;beanValidation-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Contexts and Dependency Injection 3.0 (&lt;code&gt;cdi-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta WebSocket 2.0 (&lt;code&gt;websocket-2.0&lt;/code&gt;; currently the integration with CDI is not completed)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JDBC 4.2 &amp;amp; 4.3 (&lt;code&gt;jdbc-4.2&lt;/code&gt; &amp;amp; &lt;code&gt;jdbc-4.3&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Transactions 2.0 (&lt;code&gt;transaction-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Binding 2.0 (&lt;code&gt;jsonb-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Processing 2.0 (&lt;code&gt;jsonp-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Servlet 5.0 (&lt;code&gt;servlet-5.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Server Pages 3.0 (&lt;code&gt;jsp-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Expression Language 4.0 (&lt;code&gt;el-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect3&quot;&gt;
&lt;h4 id=&quot;try-it-now-5&quot;&gt;Try it now&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9 Beta Features package instead of the main release. The beta works with Java SE 14, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20.0.0.10-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[20.0.0.10-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9 beta features in your app&amp;#8217;s &lt;code&gt;server.xml&lt;/code&gt;. You can enable the individual features you want or you can just add the Jakarta EE 9 convenience feature to enable all of the Jakarta EE 9 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Wed, 02 Sep 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2020/09/02/jakarta-microprofile-beta-200010.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2020/09/02/jakarta-microprofile-beta-200010
          
        </guid>
        
        <category>announcements</category>
        
        <category>microprofile</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>More Jakarta EE 9 features and gRPC support in Open Liberty 20.0.0.9 beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We now have two beta packages for &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#jakarta&quot;&gt;Jakarta EE 9 Beta Features&lt;/a&gt;: a lightweight package that contains only the Jakarta EE 9 features.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#allbeta&quot;&gt;All Beta Features&lt;/a&gt;: a new, larger package that contains all Open Liberty beta and GA features and functions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This means that you can now try out our in-development Open Liberty features by just adding the relevant coordinates to your build tools (either the Jakarta EE 9 Beta Features package or the All Beta Features package, depending on what you want to try).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you try either package, &lt;a href=&quot;#feedback&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta&quot;&gt;Jakarta EE 9 Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The main change visible to developers in the Jakarta EE 9 planned release is the names of packages changing to accomodate the new &lt;code&gt;jakarta.*&lt;/code&gt; namespace. In this Open Liberty beta, we have more Jakarta EE 9 features with their name change completed. We&amp;#8217;ve also made excellent TCK progress with these features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This Open Liberty beta introduces the following Jakarta EE 9 features which now possess their all-new Jakarta EE 9 package names:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jakarta XML Binding 3.0 (&lt;code&gt;jaxb-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Managed Beans 2.0 (&lt;code&gt;managedBeans-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Concurrency 2.0 (&lt;code&gt;concurrent-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Home 4.0 (&lt;code&gt;ejbHome-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Enterprise Beans Lite 4.0 (&lt;code&gt;ejbLite-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Bean Validation 3.0 (&lt;code&gt;beanValidation-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Contexts and Dependency Injection 3.0 (&lt;code&gt;cdi-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta WebSocket 2.0 (&lt;code&gt;websocket-2.0&lt;/code&gt;; currently the integration with CDI is not completed)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Persistence 3.0 (&lt;code&gt;jpa-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;These join the Jakarta EE 9 features in &lt;a href=&quot;/blog/2020/07/07/jakartaee9-data-source-transactions-20008-beta.html&quot;&gt;previous Open Liberty betas&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;JDBC 4.2 &amp;amp; 4.3 (&lt;code&gt;jdbc-4.2&lt;/code&gt; &amp;amp; &lt;code&gt;jdbc-4.3&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Transactions 2.0 (&lt;code&gt;transaction-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Binding 2.0 (&lt;code&gt;jsonb-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta JSON Processing 2.0 (&lt;code&gt;jsonp-2.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Servlet 5.0 (&lt;code&gt;servlet-5.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Server Pages 3.0 (&lt;code&gt;jsp-3.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jakarta Expression Language 4.0 (&lt;code&gt;el-4.0&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these Jakarta EE 9 features on Open Liberty in a lightweight package, just update your build tools to pull the Open Liberty Jakarta EE 9 Beta Features package instead of the main release. The beta works with Java SE 14, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20.0.0.9-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[20.0.0.9-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Enable the Jakarta EE 9 beta features in your app&amp;#8217;s &lt;code&gt;server.xml&lt;/code&gt;. You can enable the individual features you want (but remember if you enable the &lt;code&gt;jsp-3.0&lt;/code&gt; feature, the &lt;code&gt;servlet-5.0&lt;/code&gt; and &lt;code&gt;el-4.0&lt;/code&gt; features are automatically enabled for you) or you can just add the Jakarta EE 9 convenience feature to enable all of the Jakarta EE 9 beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or you can add the Web Profile convenience feature to enable all of the Jakarta EE 9 Web Profile beta features at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;webProfile-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;tck-progress&quot;&gt;TCK progress&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;TCKs are the tests that we run to ensure that the implementation of a feature meets the Jakarta EE 9 spec. Every implementation, including Open Liberty, must run the TCKs and pass them before the implementation can be considered &quot;Jakarta EE compatible&quot;. We&amp;#8217;re running the TCKs for the Jakarta EE 9 specs and fixing any problems as we go so that we can be sure that all the features will pass 100% of the tests by the time we release the Jakarta EE 9 features for real. So far, particularly good progress has been made for the EJB Lite, Concurrency, and WebSocket features in this beta. So things are going well.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;allbeta&quot;&gt;All Beta Features package&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As well as the Jakarta EE 9 features listed above, the new All Beta Features package contains our new gRPC and gRPC Client features which have been available in our &lt;a href=&quot;/downloads/#development_builds&quot;&gt;nightly builds&lt;/a&gt; for a few weeks but are now easy to install from Maven Central too.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;grpc&quot;&gt;Provide and consume gRPC services from your web applications&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://grpc.io/docs/what-is-grpc/introduction/&quot;&gt;gRPC&lt;/a&gt; is a high-performance, open source universal RPC framework. gRPC support on Liberty allows developers to both provide and consume gRPC services from your web applications. The introduction of gRPC support in Open Liberty now means you can take advantage of the benefits of gRPC more easily than before. Those benefits include great performance, simple service definitions via Protocol Buffers, cross-platform and language support, and wide industry adoption.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Two features are available in beta: &lt;code&gt;grpc-1.0&lt;/code&gt;, which enables gRPC services, and &lt;code&gt;grpcClient-1.0&lt;/code&gt;, which enables the use of a gRPC client for outbound calls.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;grpc-1.0&lt;/code&gt; feature works by scanning web apps for gRPC service implementations, through implementors of &lt;code&gt;io.grpc.BindableService&lt;/code&gt;. The web app must include the protocol buffer compiler-generated code for the services it intends to provide, and additionally the service class must provide a no-argument constructor. The web app does not need to include any core gRPC libraries; those are provided by the Liberty runtime. Once a gRPC service is scanned and started, it becomes accessible to remote gRPC clients on the configured HTTP ports.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;code&gt;grpcClient-1.0&lt;/code&gt; feature provides applications with access to a &lt;a href=&quot;https://netty.io/&quot;&gt;Netty&lt;/a&gt; gRPC client, as well as the related libraries. A web app must provide a client implementation and stubs, and can make outbound calls with a &lt;code&gt;io.grpc.ManagedChannel&lt;/code&gt; without needing to provide the supporting client libraries.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Try out gRPC with the following basic Hello World service (add the  &lt;code&gt;grpc-1.0&lt;/code&gt; to the &lt;code&gt;server.xml&lt;/code&gt;):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;com.ibm.ws.grpc&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;com.ibm.ws.grpc.beans.GreetingBean&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.examples.helloworld.GreeterGrpc&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.examples.helloworld.HelloReply&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.examples.helloworld.HelloRequest&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.stub.StreamObserver&lt;/span&gt;;

&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;HelloWorldService&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; GreeterGrpc.GreeterImplBase {

    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; HelloWorldService(){}

    &lt;span class=&quot;annotation&quot;&gt;@Override&lt;/span&gt;
    &lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; sayHello(HelloRequest req, StreamObserver&amp;lt;HelloReply&amp;gt; responseObserver) {
        HelloReply reply = HelloReply.newBuilder().setMessage(&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;Hello &lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; + req.getName()).build();
        responseObserver.onNext(reply);
        responseObserver.onCompleted();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For this example, the application must provide the &lt;a href=&quot;https://github.com/grpc/grpc-java/blob/master/examples/src/main/proto/helloworld.proto&quot;&gt;helloworld protof definition&lt;/a&gt; along with the protobuf compiler output. No additional libraries need to be provided with the application, and once it&amp;#8217;s started the helloworld greeter service will be accessible on the server&amp;#8217;s HTTP endpoints.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For a client example, a basic Servlet using gRPC can be defined via &lt;code&gt;grpcClient-1.0&lt;/code&gt; with:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;namespace&quot;&gt;com.ibm.ws.grpc&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.examples.helloworld.GreeterGrpc&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.examples.helloworld.HelloReply&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.examples.helloworld.HelloRequest&lt;/span&gt;;

&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.ManagedChannel&lt;/span&gt;;
&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;include&quot;&gt;io.grpc.ManagedChannelBuilder&lt;/span&gt;;
...
&lt;span class=&quot;annotation&quot;&gt;@WebServlet&lt;/span&gt;(name = &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;grpcClient&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, urlPatterns = { &lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;/grpcClient&lt;/span&gt;&lt;span class=&quot;delimiter&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; }, loadOnStartup = &lt;span class=&quot;integer&quot;&gt;1&lt;/span&gt;)
&lt;span class=&quot;directive&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;class&quot;&gt;GrpcClientServlet&lt;/span&gt; &lt;span class=&quot;directive&quot;&gt;extends&lt;/span&gt; HttpServlet {

        ManagedChannel channel;
        &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; GreeterGrpc.GreeterBlockingStub greetingService;

        &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; startService(&lt;span class=&quot;predefined-type&quot;&gt;String&lt;/span&gt; address, &lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; port)
        {
            channel = ManagedChannelBuilder.forAddress(address , port).usePlaintext().build();
            greetingService = GreeterGrpc.newBlockingStub(channel);
        }

        &lt;span class=&quot;directive&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; stopService()
        {
            channel.shutdownNow();
        }

        &lt;span class=&quot;annotation&quot;&gt;@Override&lt;/span&gt;
        &lt;span class=&quot;directive&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doGet(HttpServletRequest reqest, HttpServletResponse response)
            &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt;
        {

            &lt;span class=&quot;comment&quot;&gt;// set user, address, port params&lt;/span&gt;
        }

        &lt;span class=&quot;annotation&quot;&gt;@Override&lt;/span&gt;
        &lt;span class=&quot;directive&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; doPost(HttpServletRequest request, HttpServletResponse response)
            &lt;span class=&quot;directive&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span class=&quot;exception&quot;&gt;IOException&lt;/span&gt;
        {

        &lt;span class=&quot;comment&quot;&gt;// grab user, address, port params&lt;/span&gt;
        startService(address, port);
        HelloRequest person = HelloRequest.newBuilder().setName(user).build();
        HelloReply greeting = greetingService.sayHello(person);

        &lt;span class=&quot;comment&quot;&gt;// send the greeting in a response&lt;/span&gt;
        stopService();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As with the service example, the application must provide the &lt;a href=&quot;https://github.com/grpc/grpc-java/blob/master/examples/src/main/proto/helloworld.proto&quot;&gt;helloworld protof definition&lt;/a&gt; along with the protobuf compiler output. All required gRPC client libraries are provided by &lt;code&gt;grpcClient-1.0&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;try-it-now-2&quot;&gt;Try it now&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To try out these gRPC features, just update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 14, Java SE 11, or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-runtime&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20.0.0.9-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[20.0.0.9-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the new beta features in your app, add them to your &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;grpc-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;grpcClient-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Your feedback is welcomed&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Wed, 05 Aug 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2020/08/05/jakarta-grpc-beta-20009.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2020/08/05/jakarta-grpc-beta-20009
          
        </guid>
        
        <category>announcements</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta EE 9 data source access and transactions in Open Liberty beta</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In no time at all, we have a second Open Liberty beta which makes available another four Jakarta EE 9 features (JDBC 4.2 &amp;amp; 4.3, JTA 2.0, JSON-B 2.0, JSON-P 2.0), plus JNDI 1.0. This is in addition to the three features we beta&amp;#8217;d in the &lt;a href=&quot;/blog/2020/06/22/jakarta-ee-9-open-liberty-20007beta.html&quot;&gt;first Open Liberty beta&lt;/a&gt; (Servlet 5.0, JSP 3.0, Expression Language 4.0).&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta-ee-9-behind-the-scenes&quot;&gt;Jakarta EE 9: behind the scenes&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As we mentioned in our &lt;a href=&quot;/blog/2020/06/22/jakarta-ee-9-open-liberty-20007beta.html&quot;&gt;first beta blog post&lt;/a&gt;, the most visible change to developers between Jakarta EE 8 and Jakarta EE 9 is the new namespace: &lt;code&gt;javax.*&lt;/code&gt; package names are now &lt;code&gt;jakarta.*&lt;/code&gt; throughout the Jakarta EE 9 features. Behind the scenes, however, the Jakarta EE 9 project team have been working hard on changes to support Jakarta EE now and in future.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The list of specifications in Jakarta EE 9 has been modified since Jakarta EE 8. A subset of specifications that was part of Java SE 8 has been &lt;a href=&quot;https://openjdk.java.net/jeps/320&quot;&gt;moved into Jakarta EE 9&lt;/a&gt; instead. Some Jakarta 8 specifications have been removed from Jakarta EE 9, while other specifications from Jakarta EE 8 have been marked optional in Jakarta EE 9. This is intended to lower the bar of entry to new implementations by removing &quot;stable&quot; or legacy specifications, or at least making them optional so that application servers can be &lt;a href=&quot;https://jakarta.ee/compatibility/&quot;&gt;certified as compatible&lt;/a&gt; without necessarily supporting them.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re interested in reading the Jakarta EE 9 specifications, there are now specifications, APIs, TCKs, and Compatible Implementations (CIs) for every specification. From the &lt;a href=&quot;https://jakarta.ee/specifications/&quot;&gt;top-level specifications&lt;/a&gt;, you can navigate to any of the technologies to view their deliverables for their respective Milestone 1 releases. For example, here are the &lt;a href=&quot;https://jakarta.ee/specifications/platform/9/&quot;&gt;overall Jakarta EE 9 Platform&lt;/a&gt; and &lt;a href=&quot;https://jakarta.ee/specifications/cdi/3.0/&quot;&gt;Jakarta Context Dependency Injection (CDI) 3.0&lt;/a&gt; specifications.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In terms of progress, &lt;a href=&quot;https://jakarta.ee/specifications/platform/9/&quot;&gt;Jakarta EE 9 Milestone 1&lt;/a&gt; was a great achievement but there&amp;#8217;s still some way to go. The APIs are close to being finalized. Many of the component specifications are brand new from a Jakarta EE perspective so there is still some polishing required yet. All of the TCKs are buildable and executable but the success rate is variable, depending on the specific Jakarta EE technology being exercised. This is expected at this point in the game and will make progress every day. All of the &lt;a href=&quot;https://ci.eclipse.org/jakartaee-tck/job/jakartaee-9.0-release/&quot;&gt;TCK executions are on public Jenkins instances&lt;/a&gt; and can be monitored. Or, better yet, they always welcome more community help so, &lt;a href=&quot;https://eclipse-ee4j.github.io/jakartaee-tck/&quot;&gt;if you&amp;#8217;re interested, get involved&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Every specification and associated TCK requires a Compatible Implementation (CI) to show completeness.  For the Jakarta EE 9 Milestone 1 deliverable, &lt;a href=&quot;https://github.com/eclipse-ee4j/glassfish/releases/tag/6.0.0-M1&quot;&gt;Eclipse Glassfish 6.0.0-M1&lt;/a&gt; fulfills that role. But, as with Jakarta EE 8, there will be additional CIs for Jakarta EE 9, including &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We will demonstrate our on-going progress implementing Jakarta EE 9 on Open Liberty through our regular beta releases, now every 4 weeks.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta-ee-9-features-on-open-liberty&quot;&gt;Jakarta EE 9 features on Open Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This beta of Open Liberty implements Java Database Connectivity (JDBC) integration with Java Transaction API (JTA), JSON-B 2.0 and JSON-P 2.0, plus JNDI 1.0. JNDI is not part of Jakarta EE 9 but it&amp;#8217;s included to enable the use of data sources and transactions within applications. When added to the existing Jakarta EE 9 features, this means it is now possible to configure Servlet 5.0, JDBC 4.3 (on Java 11; JDBC 4.2 on Java 8), and JNDI 1.0 so that you can configure your applications to both access data sources and participate in global transactions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The JSON-B and JSON-P features will come into their own when we finish JAX-RS in a future beta. So keep an eye on &lt;a href=&quot;/blog/?search=beta&quot;&gt;future beta blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you want to get started with the beta just update your build tools to pull the Open Liberty beta instead of the main release. The beta works with Java SE 11 or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20.0.0.8-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[20.0.0.8-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the new beta features in your app, add one or more of them to your &lt;code&gt;server.xml&lt;/code&gt; (if you enable the &lt;code&gt;jsp-3.0&lt;/code&gt; feature, the &lt;code&gt;servlet-5.0&lt;/code&gt; and &lt;code&gt;el-4.0&lt;/code&gt; features are automatically enabled so you don’t need to explicitly list all three in that case):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Add the features to the &lt;code&gt;server.xml&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jdbc-4.2&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jsonb-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jsonp-2.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jndi-1.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jsp-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-5.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;el-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Alternatively, you can just enable the Jakarta EE 9 convenience feature to enable them all at once:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;server&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jakartaee-9.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;em&gt;Kevin is a co-Release Lead for the &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Jakarta EE 9 project&lt;/a&gt;, working with the wider community to help ensure that a cohesive specification is delivered and represents the expectations of the &lt;a href=&quot;https://jakarta.ee/about/&quot;&gt;Jakarta EE Working Group&lt;/a&gt;. Laura is Content Strategist for Open Liberty and Editor of the &lt;a href=&quot;/blog/&quot;&gt;OpenLiberty.io blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 07 Jul 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2020/07/07/jakartaee9-data-source-transactions-20008-beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2020/07/07/jakartaee9-data-source-transactions-20008-beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        <category>data-sources</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta EE beta on Open Liberty</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Our first Open Liberty beta (released today) makes available the first three Jakarta EE 9 features that we&amp;#8217;ve implemented. We&amp;#8217;ll be releasing regular betas and adding more Jakarta EE 9 features as we go.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;open-liberty-betas&quot;&gt;Open Liberty betas&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When we first released the &lt;a href=&quot;/&quot;&gt;Open Liberty&lt;/a&gt; open source project, we focused mainly on adding production-quality capabilities to Liberty and releasing completed features. While we have often talked about our in-development work so that you know what&amp;#8217;s coming, the only way to get hold of this unfinished code to it try out was to take a look at our nightly builds. This is never ideal because nightly builds can be somewhat unstable, so we wanted to release a regular Open Liberty beta.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Open Liberty betas will contain everything in the most recent Open Liberty release plus features that are not yet finished. While these features are not yet suitable for use in production, we want to get feedback from our user community and make them available to developers to use ahead of a production release. Of course, something appearing in a beta isn&amp;#8217;t a guarantee that it&amp;#8217;ll end up released: the feedback might be that it is a horrible, terrible, no good, very bad idea, and should be constrained to the dumpster of git history. At the very least, it might change a bit.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/logos/logo.png&quot; alt=&quot;Open Liberty logo&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;betas-and-releases-every-four-weeks&quot;&gt;Betas and releases every four weeks&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We intend to release a new beta every four weeks at the same time as our normal four-weekly Open Liberty release. Usually, the beta (which previews the next release) will be available on the same day as the normal Open Liberty release. So the second beta, 20.0.0.8-beta, will be released on the same day as the 20.0.0.7 Open Liberty release. Today&amp;#8217;s beta (which previews the 20.0.0.7 release) is versioned as 20.0.0.7-beta.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This first beta is out of cycle because we wanted it to align with the &lt;a href=&quot;https://jakarta.ee/specifications/platform/9/&quot;&gt;Jakarta EE 9 Milestone 1&lt;/a&gt; to showcase our Jakarta EE 9 work. So far, Open Liberty has implementations of the &lt;code&gt;servlet-5.0&lt;/code&gt;, &lt;code&gt;jsp-3.0&lt;/code&gt;, and &lt;code&gt;el-4.0&lt;/code&gt; features, which are all part of the Jakarta EE 9 specification. We will be adding to this list in future betas as we work towards complying with Jakarta EE 9 specification. We are running the TCKs as we go.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta-ee-9-changes&quot;&gt;Jakarta EE 9 changes&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;So, what changed between Jakarta EE 8 and Jakarta EE 9? As a developer, the main change you&amp;#8217;ll notice is that all the &lt;code&gt;javax&lt;/code&gt; package names have been updated to &lt;code&gt;jakarta&lt;/code&gt; (&lt;a href=&quot;https://eclipse-ee4j.github.io/jakartaee-platform/jakartaee9/JakartaEE9ReleasePlan&quot;&gt;other Jakarta EE 9 changes are behind-the-scenes&lt;/a&gt; and don&amp;#8217;t much affect how you use it). In line with Liberty&amp;#8217;s zero migration policy, we will release new versions of all the relevant features so that your existing applications will continue to work unchanged with the feature versions they are currently using.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you want to switch to running with the Jakarta EE 9 features, you can either recode to make use of the Jakarta EE 9 APIs, or you can use the &lt;a href=&quot;https://github.com/eclipse/transformer/blob/main/README.md&quot;&gt;Eclipse Transformer&lt;/a&gt; to bytecode-rewrite Jakarta EE 8 references to Jakarta EE 9. We have been using this tool on Liberty to provide the new Jakarta EE 9 features and it has so far been very successful.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/logos/Jakarta_EE_logo.png&quot; alt=&quot;Open Liberty logo&quot; width=&quot;70%&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you want to get started with the beta just update your build tools to pull the Open Liberty beta instead of the main release. The beta works with Java SE 11 or Java SE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;/guides/maven-intro.html&quot;&gt;Maven&lt;/a&gt;, here are the coordinates:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.openliberty.beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;openliberty-jakartaee9&lt;span class=&quot;tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20.0.0.7-beta&lt;span class=&quot;tag&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;tag&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;zip&lt;span class=&quot;tag&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or for &lt;a href=&quot;/guides/gradle-intro.html&quot;&gt;Gradle&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;gradle&quot;&gt;dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-jakartaee9', version: '[20.0.0.7-beta,)'
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Or take a look at our &lt;a href=&quot;/downloads/#runtime_betas&quot;&gt;Downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To enable the new beta features in your app, add one or more of them to your &lt;code&gt;server.xml&lt;/code&gt; (if you enable the &lt;code&gt;jsp-3.0&lt;/code&gt; feature, the other two are automatically enabled so you don&amp;#8217;t need to explicitly list all three in that case):&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre class=&quot;CodeRay highlight&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;featureManager&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;jsp-3.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;servlet-5.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;tag&quot;&gt;&amp;lt;feature&amp;gt;&lt;/span&gt;el-4.0&lt;span class=&quot;tag&quot;&gt;&amp;lt;/feature&amp;gt;&lt;/span&gt;
&lt;span class=&quot;tag&quot;&gt;&amp;lt;/featureManager&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let us know what you think on &lt;a href=&quot;https://groups.io/g/openliberty&quot;&gt;our mailing list&lt;/a&gt;. If you hit a problem, &lt;a href=&quot;https://stackoverflow.com/questions/tagged/open-liberty&quot;&gt;post a question on StackOverflow&lt;/a&gt;. If you hit a bug, &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues&quot;&gt;please raise an issue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;em&gt;Kevin is a co-Release Lead for the &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Jakarta EE 9 project&lt;/a&gt;, working with the wider community to help ensure that a cohesive specification is delivered and represents the expectations of the &lt;a href=&quot;https://jakarta.ee/about/&quot;&gt;Jakarta EE Working Group&lt;/a&gt;. He works with Alasdair, who is Chief Architect of the Open Liberty project and helps direct the Jakarta EE implementation on Open Liberty. They both work with Laura, who is Content Strategist for Open Liberty and Editor of this blog.&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Mon, 22 Jun 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2020/06/22/jakarta-ee-9-open-liberty-20007beta.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2020/06/22/jakarta-ee-9-open-liberty-20007beta
          
        </guid>
        
        <category>announcements</category>
        
        <category>beta</category>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta EE 8 CRUD API Tutorial using Java 11</title>
        <description></description>        
        <pubDate>Wed, 04 Mar 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/redirected.html</link>
        <guid isPermaLink="true">
          
            https://rieckpil.de/jakarta-ee-crud-api-tutorial/
          
        </guid>
        
        <category>announcements</category>
        
        <category>java-se</category>
        
        <category>java-se</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Modernizing Java EE apps to cloud-native with MicroProfile, Jakarta EE, and Open Liberty</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Michael is &lt;a href=&quot;https://www.linkedin.com/in/michael-frembs/&quot;&gt;Team lead for Cloud native and Senior Consultant at ARS Computer &amp;amp; Consulting&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This post is about the technical possibilities provided by Open Liberty and why I&amp;#8217;m very confident that you can go very smoothly from a Java EE application to a cloud-native one. I won&amp;#8217;t be talking about splitting monoliths into microservices, domain-driven design, or event storming. I&amp;#8217;m a senior consultant for cloud-native topics and have worked on Java EE applications with servers like IBM&amp;#8217;s WebSphere Application Server (WAS) or Red Hat&amp;#8217;s JBoss EAP. I advise companies to move to cloud technologies and to pick the right tools for their environment.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I recently had the task of modernizing an application. It was a Java EE 6 app running on WAS v8. The app itself is a kind of dispatcher. It has a SOAP endpoint to receive standardized XML-messages which it forwards to the desired service. One day, a second version of the XML standard was added. At this point it was easier to split the app in multiple services. At the front were two services (one for each version), which parsed the message. The core service made some transformations and distributed the message to the business services.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/blog_mfrembs_architecture.png&quot; alt=&quot;blog mfrembs architecture&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As a first step it is always a good idea to get rid of cumbersome traditional application servers. They are stable, high performance environments, but they need a lot of time to start and are hard to configure. If you are using traditional WAS you should move to Open Liberty (or WebSphere Liberty, which is built on Open Liberty). With some limitations (e.g. remote EJBs) it should be possible to easily run your app on Liberty without major adjustments. In fact, some of our clients are still using WAS. As developers, we use Liberty to build our apps locally, while in other environments, we use the client&amp;#8217;s setup.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/blog_mfrembs_microprofile.png&quot; alt=&quot;blog mfrembs microprofile&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Liberty enables you to add features from &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Java EE or Jakarta EE&lt;/a&gt; alongside features from &lt;a href=&quot;https://microprofile.io/&quot;&gt;MicroProfile&lt;/a&gt;. The image shows the MicroProfile features:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Blue blocks are good known features from Java EE.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Green blocks are the ones we used in our migrated microservices. I will be discuss in this post why they are useful.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;White blocks are other MicroProfile features that are worth looking into but weren’t used in this app.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;resiliency-in-microservices-with-microprofile-and-open-liberty&quot;&gt;Resiliency in microservices with MicroProfile and Open Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When you create microservices those microservices communicate with each other. Sometimes you have to use synchronous RESTful calls (as we did from the standard services to the core service). In this situation you should use resilience in your microservices. If you don&amp;#8217;t, a broken application can break every app in your calling chain, especially when the response times are long. With MicroProfile you can add resilience to your infrastructure, including defining &lt;a href=&quot;https://openliberty.io/guides/retry-timeout.html&quot;&gt;timeouts&lt;/a&gt; in your REST client and using &lt;a href=&quot;https://openliberty.io/guides/circuit-breaker.html&quot;&gt;circuitbreaker&lt;/a&gt; architectures by just adding annotations to your app code.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you disagree and say that resilience is the responsibility of a service mesh, you&amp;#8217;re right, but you might not yet a service mesh installed in your infrastructure. When you do install a service mesh, I&amp;#8217;ve got good news yor you: &lt;a href=&quot;https://www.eclipse.org/community/eclipse_newsletter/2018/september/MicroProfile_istio.php&quot;&gt;Open Liberty and MicroProfile integrate well with Istio&lt;/a&gt; and recognize the configurations from the mesh. If there are configurations on both the app and the service mesh the service mesh overrules the app. But the service mesh cannot provide &lt;a href=&quot;https://github.com/OpenLiberty/guide-microprofile-fallback&quot;&gt;fallback&lt;/a&gt; resilience. This is because you need business logic to react to errors with solutions (fallbacks) such as caching, returning default values, throwing errors with descriptive error messages, and so on.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;building-12-factor-apps-with-microprofile-and-open-liberty&quot;&gt;Building 12-factor apps with MicroProfile and Open Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you want to develop a cloud-native application, it is a good idea to look into the &lt;a href=&quot;https://12factor.net/&quot;&gt;12 factors&lt;/a&gt; app paradigm, which provides guidlines on how to build a &quot;Software as a Service&quot; application. Emily provides a good &lt;a href=&quot;https://openliberty.io/blog/2019/09/05/12-factor-microprofile-kubernetes.html&quot;&gt;overview&lt;/a&gt;. It is important that you prepare your application for cloud platforms and their requirements. I consider &quot;lift-and-shift&quot; to be an anti-pattern. Lift-and-shift just means that you run your application on a different virtual machine, but it&amp;#8217;s hard - if not impossible - to benefit from the advantages of elastic scaling, self-healing, or zero-downtime deployments. A better approach would be using the &lt;a href=&quot;https://martinfowler.com/bliki/StranglerFigApplication.html&quot;&gt;strangler pattern&lt;/a&gt;, in which you create a new system around the old system, gradually letting the new system grow over a few years until the old system is &quot;strangled&quot;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;providing-observability-with-microprofile-metrics-in-open-liberty&quot;&gt;Providing observability with MicroProfile Metrics in Open Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;MicroProfile provides you with features that you really should look into when developing cloud-native apps. Features like &lt;a href=&quot;https://openliberty.io/guides/microprofile-metrics.html&quot;&gt;MicroProfile Metrics&lt;/a&gt;. When you have multiple, maybe hundreds or thousands of apps running simultaneously, you have to monitor them. Metrics help you out. The applications provide monitoring systems like &lt;a href=&quot;https://prometheus.io/&quot;&gt;Prometheus&lt;/a&gt; (and &lt;a href=&quot;https://grafana.com/&quot;&gt;Grafana&lt;/a&gt; for the UI) with information that you can analyse and add alerts to it. You can probably get metrics like RAM or CPU usage, or the number of restarts, from the cloud platform (e.g. Kubernetes does this). Furthermore, you can create business-driven metrics like &quot;how many orders are placed in my shop&quot; or &quot;how many logins are made in this time&quot; and so on. Be creative! You get new possibilities with this feature. In our case, we added metrics to know which standard version was called with which metadata. That helped us with migrating the clients and business services to the new version.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;tracing-microservices-with-microprofile-opentracing-and-open-liberty&quot;&gt;Tracing microservices with MicroProfile OpenTracing and Open Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Another important topic is tracing. When you create a microservice infrastructure, you end up managing services that communicate synchronously and asynchronously. Either way it is important to be able to follow the path of communication, especially when diagnosing bugs. Imagine you have to find the bug in a calling chain containing 10 apps. Maybe the 10 apps are implemented by different teams. This is very hard with no further support. You can handle this by passing a trace ID to the message and sending this informations to services like &lt;a href=&quot;https://www.jaegertracing.io/&quot;&gt;Jaeger&lt;/a&gt; or &lt;a href=&quot;https://zipkin.io/&quot;&gt;Zipkin&lt;/a&gt;. MicroProfile supports you with a &lt;a href=&quot;https://github.com/OpenLiberty/guide-microprofile-opentracing&quot;&gt;MicroProfile OpenTracing&lt;/a&gt; implementation. Ideally, you trace the whole way. In our case, we trace not only the call from the standard service to the core service, but also at least from the client calling the standard service to the services called by the core service.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;checking-the-health-of-microservices-with-microprofile-health-check-and-open-liberty&quot;&gt;Checking the health of microservices with MicroProfile Health Check and Open Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Last, but not least, PaaS cloud platforms like Kubernetes offer &lt;a href=&quot;https://github.com/OpenLiberty/guide-microprofile-health&quot;&gt;self-healing&lt;/a&gt;. Kubernetes checks for &quot;liveness&quot; and, if your application is in an unstable state, reboots the app for you. Kubernetes also checks for &quot;readiness&quot; before adding your app to the load balancer so that it can receive traffic. However, Kubernetes defines a pod as ready to receive work when the container is started - not when the server with the app is started and ready. This is very important: imagine scaling your app so that a new instance is created and started. If Kubernetes doesn&amp;#8217;t check the readiness of the app itself, though, the first requests will fail because the server and the app aren&amp;#8217;t started already.  You can help Kubernetes by giving it endpoints in your app to provide information about your app&amp;#8217;s readiness.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;convert-your-java-ee-apps-to-cloud-native-apps-on-open-liberty&quot;&gt;Convert your Java EE apps to cloud-native apps on Open Liberty&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Overall, Open Liberty is a good choice to stepwise conversion of your Java EE applications to the cloud-native paradigm. You can add one feature at a time while you refactor your app to comply with the 12 factors and get rid of older technologies like remote EJBs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 16 Jan 2020 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2020/01/16/modernizing-javaee-cloud-native-open-liberty.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2020/01/16/modernizing-javaee-cloud-native-open-liberty
          
        </guid>
        
        <category>microprofile</category>
        
        <category>metrics</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Migrating our apps to microservices on Open Liberty</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Igor is &lt;a href=&quot;https://www.linkedin.com/in/igor-berchtold-712a76116/&quot;&gt;Director Framework &amp;amp; Integration at Suva&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;our-journey-starts&quot;&gt;Our journey starts&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A year ago we started to migrate our aging applications from a central Java EE platform to a new OpenShift platform. The goals were to promote the autonomy of the development team, to isolate the applications from each other, and to improve our development process as a whole.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We checked several MicroProfile app servers and soon concluded with certainty that Open Liberty has an active and well-structured community, a production-ready product, and also supports our desire for agile work according to &lt;a href=&quot;https://www.scaledagileframework.com/&quot;&gt;SAFe&lt;/a&gt; with monthly release cycles.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Our plan was to migrate four existing applications using the appropriate tools to efficiently develop and meet the requirements for productive use. However, we could not start on a greenfield site but had to consider and integrate into the existing landscape.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Our principles during this journey were to design first using OpenAPI v3 and to reuse as much as possible of existing frameworks and platforms as long as it makes sense in a microservice world. Whereever possible, we aimed to use standards, best practices, and a straightforward implementation strategy without compromising well-known enterprise architectural rules (e.g. &lt;a href=&quot;https://www.opengroup.org/togaf&quot;&gt;TOGAF&lt;/a&gt;).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;application-1-using-other-microservices&quot;&gt;Application 1: Using other microservices&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Our first application to migrate was a service to check if an employee is still employed by us in order to allow him to buy train ticket in the name of our company. This application provides two web services according to the interface description of our external partner. This was actually the contract of the service which we did not want to break, so we had to use web service technology for providing the service to our partner. It was a good use case to provide web services. Creating web services is very easy using Open Liberty: just add the &lt;code&gt;jaxws-2.2&lt;/code&gt; feature within the &lt;code&gt;server.xml&lt;/code&gt; configuration. The implementation of the web services in turn uses microservices of another application that provides organizational and employee data (Application 2). Great use case for using &lt;a href=&quot;https://openliberty.io/guides/microprofile-rest-client.html&quot;&gt;Microprofile Rest Client&lt;/a&gt; as an easy and type-safe approach to invoke other microservices.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;application-2-using-persistence&quot;&gt;Application 2: Using persistence&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This second application provides organization and employee data. Actually it was one of the oldest applications, going back almost 30 years. It started as Cobol, later on mixed with Java Business Interfaces. We then added some web services, and finally redesigned the persistence layer using JPA instead of native SQL queries. Last year, we ended up with some new requirements that the underlying data model could not handle well. The app grew and the amount of unused functionality and complexity was far greater than the effort of providing well-designed new services from scratch. So we decided not to migrate this app and, instead, do it all new.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The data storage is in an MSSQL database and Eclipselink/JPA was used for access. The REST interfaces were designed with OpenAPI v3; an OpenAPI generator was used to generate the corresponding Java objects of the interface. Open Liberty provides this functionality with the &lt;code&gt;jpa-2.2&lt;/code&gt;, &lt;code&gt;ejblite-3.2&lt;/code&gt;, and &lt;code&gt;mpOpenAPI-1.1&lt;/code&gt; features. With this last feature, Open Liberty provides a handy UI for developers exploring the microservice functionality. We were able to reuse logging (&lt;a href=&quot;https://logging.apache.org/log4j/2.x/&quot;&gt;Apache Log4j 2&lt;/a&gt;) and exception handling from the existing framework.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;application-3-using-existing-landscape&quot;&gt;Application 3: Using existing landscape&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The third application provides currency rates for other applications. The use of web services for access to our SAP systems and the currency service supplier was a special feature of this application. This time we did not provide web services; instead we reused existing web services. The data is retrieved in batch mode during the night and made available to other legacy applications. Our company central batch scheduler calls a microservice using a &lt;code&gt;curl&lt;/code&gt; command, which then receives a ZIP file containing all the necessary files for further distribution. This last step was already part of the old solution and did not have to be adapted. Finally, because of some security requirements, we used the &lt;code&gt;mpJwt-1.1&lt;/code&gt; and &lt;code&gt;jwt-1.0&lt;/code&gt; features, along with &lt;code&gt;appSecurity-3.0&lt;/code&gt;, to get some authentication and authorization functionality out-of-the-box.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;application-4-using-files&quot;&gt;Application 4: Using files&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The fourth application was all about files: it checked PDF files for &lt;a href=&quot;https://www.loc.gov/preservation/digital/formats/fdd/fdd000322.shtml&quot;&gt;PDF/A-2b&lt;/a&gt; conformity, converted any formats (such as MS Office documents, emails, and images) to PDF/A-2b format, and assembled several PDF files into one PDF file. JMS queues were used to meet the high speed and throughput requirements as well as the loose coupling principal, allowing parallel execution of incoming requests; this functionality was provided by using the &lt;code&gt;jms-2.0&lt;/code&gt;, &lt;code&gt;wasJmsClient-2.0&lt;/code&gt;, &lt;code&gt;wasJmsServer-1.0&lt;/code&gt;, and &lt;code&gt;mdb-3.2&lt;/code&gt; features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The interface was designed with OpenAPI v3. This time we used &lt;code&gt;multipart/form-data&lt;/code&gt; encoding for the documents transfer. We have reached the limits of the JAX-RS standards that we used. Since the use of &lt;code&gt;multipart/form-data&lt;/code&gt; is not yet standardized, the necessary Java objects could not simply be generated with the OpenAPI generator for use by Open Liberty. The JAX-RS community is working on extending the standard to &lt;a href=&quot;https://github.com/eclipse-ee4j/jaxrs-api/issues/418&quot;&gt;support multipart/form-data&lt;/a&gt;. Once this is done, the OpenAPI generator can be adapted accordingly and, hopefully, it will be possible to use a standardized interface. Today, we have to use the &lt;code&gt;IMultipartBody&lt;/code&gt; interface in Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;overall-experience-so-far&quot;&gt;Overall experience so far&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;During our implementation and testing efforts we noticed the outdated version of OpenAPI UI (aka Swagger UI) provided by Open Liberty. There are newer versions to support the use of &lt;code&gt;multipart/form-data&lt;/code&gt; and the upload of files. This would allow us to give the developers a tool to access the respective microservices to get familiar with the interface using the &quot;Try it out&quot; feature. Reporting this as an &lt;a href=&quot;https://github.com/OpenLiberty/open-liberty/issues/9203&quot;&gt;issue&lt;/a&gt; to the community we got attention and this should be fixed soon.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In addition to the actual migration of the applications, we have built a CI/CD pipeline that allows us to deploy our microservices to an existing OpenShift Container Platform easily and efficiently. Each application consists of an Open Liberty server in a Docker container. Depending on scalability and reliability considerations, one or more pods are started at runtime. The time needed to start a pod in our environment depends how many cores of CPU are defined to a pod. At the moment we manage to start a pod within 10 seconds, quick enough for our use cases. This is thanks to the low memory footprint, &lt;a href=&quot;https://openliberty.io/blog/2019/10/30/faster-startup-open-liberty.html&quot;&gt;the internal parallelized tasks and reduction of path length&lt;/a&gt; of Open Liberty.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With the use of &lt;a href=&quot;https://openliberty.io/guides/microprofile-health.html&quot;&gt;MicroProfile Health&lt;/a&gt; and &lt;a href=&quot;https://openliberty.io/guides/microprofile-metrics.html&quot;&gt;MicroProfile Metrics&lt;/a&gt;, we get tools that enable us as a team to take over the operational responsibility for our web services. Our experience so far shows that Open Liberty is very stable and easy to use as long as you have Java EE experience. Our applications run for weeks without restarts; previously we had to restart our central Java EE platform weekly. Open Liberty is absolutely production ready.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With our decision to use Open Liberty we did very well. I am confident that we can achieve our goal of migrating the remaining applications that we are responsible for within the coming year.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 17 Dec 2019 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2019/12/17/production-experience-open-liberty.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2019/12/17/production-experience-open-liberty
          
        </guid>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>community</category>
        
        <category>case-study</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Open Liberty is Jakarta EE 8 compatible</title>
        <description>&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Today is a big day in the enterprise Java world.
Two years ago, Oracle announced their intention to move Java EE to the Eclipse Foundation, which led to the creation of Jakarta EE.
The goal was to move Java EE to a community-driven open source model for future enhancements.
The dream is that doing this will enable Jakarta EE to evolve faster, allow more frequent releases, and address the needs of modern applications.
The process of moving Java EE to Eclipse was not trivial, it was not simple, but it is finally complete with the release of Jakarta EE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As momentous as this news is, this blog post is not about the release of Jakarta EE.
This post is about the implications for Open Liberty.
The eagle-eyed among you may have noticed in the past that Open Liberty was not Java EE-certified.
This made us very sad, but we didn&amp;#8217;t have a license for the Java EE TCK that would let us run them.
That is not the case with Jakarta EE though.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Thanks to the heroic efforts of &lt;a href=&quot;https://github.com/Zech-Hein&quot;&gt;Zech Hein&lt;/a&gt;, &lt;a href=&quot;https://github.com/shighbar&quot;&gt;Scott Highbarger&lt;/a&gt;, &lt;a href=&quot;https://github.com/hibell&quot;&gt;Hank Ibell&lt;/a&gt;, &lt;a href=&quot;https://github.com/atosak&quot;&gt;Atosa Khoddamhazrati&lt;/a&gt;, &lt;a href=&quot;https://github.com/sabolo&quot;&gt;Kevin Smith&lt;/a&gt;, &lt;a href=&quot;https://github.com/nstewart0206&quot;&gt;Nichole Stewart&lt;/a&gt;, Gene Thoman, Martin Holder, &lt;a href=&quot;https://github.com/dave-waddling&quot;&gt;Dave Waddling&lt;/a&gt;, and &lt;a href=&quot;https://github.com/websterc87&quot;&gt;Chris Webster&lt;/a&gt;, I can announce that Open Liberty 19.0.0.6 has passed the Jakarta EE 8 TCK and the Jakarta EE Spec Committee has approved our Compatibility Request.
This means that I can put this big shiny sailing ship logo down below and proudly say that Open Liberty is a Jakarta EE-compatible implementation:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;a class=&quot;image&quot; href=&quot;https://jakarta.ee/&quot;&gt;&lt;img src=&quot;/img/blog/JakartaEE_Logo_Compatible-color.png&quot; alt=&quot;JakartaEE Logo Compatible color&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For those who have run the compatibility tests, you&amp;#8217;ll know how much work is involved in getting here.
For those who have not, rest assured that the Open Liberty team are committed to implementing and being compatible with the Jakarta EE and Eclipse MicroProfile programming models.
If you&amp;#8217;re really interested, here&amp;#8217;s the &lt;a href=&quot;/certifications/jakartaee/platform/8/TCKResults.html&quot;&gt;Open Liberty 19.0.0.6 Jakarta EE Platform 8 Certification Summary&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To find out more about Open Liberty, take a look at our &lt;a href=&quot;/guides/?search=jakarta%20ee&quot;&gt;Open Liberty guides on Jakarta EE technologies&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Thanks and good night!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;em&gt;Updates:&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;2019-09-10: Updated list of contributors; updated link to filtered guides list.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;2019-09-11: Add link to TCK results.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>        
        <pubDate>Tue, 10 Sep 2019 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2019/09/10/open-liberty-jakarta-ee.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2019/09/10/open-liberty-jakarta-ee
          
        </guid>
        
        <category>jakarta-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Jakarta EE and the great naming debate</title>
        <description>&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;At JavaOne 2017 Oracle announced that they would start the difficult process of moving Java EE to the Eclipse Software Foundation. This has been a massive effort on behalf of Eclipse, Oracle and many others and we are getting close to having a specification process and a Jakarta EE 8 platform. We are looking forward to being able to certify Open Liberty to it soon. While that is excellent news, on Friday last week Mike Milinkovich from Eclipse &lt;a href=&quot;https://eclipse-foundation.blog/2019/05/03/jakarta-ee-java-trademarks/&quot;&gt;informed the community&lt;/a&gt; that Eclipse and Oracle could not come to an agreement that would allow Jakarta EE to evolve using the existing &lt;code&gt;javax&lt;/code&gt; package prefix. This has caused a flurry of discussion on Twitter, from panic, confusion, and in some cases outright FUD.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To say that everyone is disappointed with this outcome would be a massive understatement of how people feel.  Yes this is disappointing, but this is not the end of the world. First of all, despite what some people are implying, Java EE applications are not suddenly broken today, when they were working a week ago. Similarly, your Spring apps are not going to be broken (yes, the &lt;a href=&quot;https://twitter.com/phillip_webb/status/1124384920925655040&quot;&gt;Spring Framework has 2545 Java EE imports&lt;/a&gt;, let alone all the upstream dependencies). It just means that we will have a constraint on how Jakarta EE evolves to add new function.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We have got a lot of experience with managing migration in the Open Liberty team. We have a zero migration promise for Open Liberty which is why we are the only application server that supports Java EE 7 and 8 in the same release stream. This means that if you are on Open Liberty, your existing applications are totally shielded from any class name changes in Jakarta EE 9. We do this through our versioned feature which provide the exact API and runtime required by the specification as it was originally defined. We are optimistic about for the future because we have been doing this with Liberty since it was created in 2012.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The question for the community is &quot;how we should move forward from here?&quot; It seems that many in the Jakarta EE spec group at Eclipse are leaning towards quickly renaming everything in a Jakarta EE 9 release. There are advantages and disadvantages to this approach, but it appears favoured by &lt;a href=&quot;https://www.tomitribe.com/blog/jakarta-ee-a-new-hope/&quot;&gt;David Blevins&lt;/a&gt;, &lt;a href=&quot;https://developer.ibm.com/announcements/jakarta-ee-has-landed/&quot;&gt;Ian Robinson, Kevin Sutter&lt;/a&gt;, &lt;a href=&quot;https://blog.payara.fish/jakarta-ee-8-and-beyond&quot;&gt;Steve Millidge&lt;/a&gt;. While I can see the value of just doing a rename now (after all, it is better pull a band aid off fast than slow), I think it would be a mistake if at the same time we do not invest in making the migration from Java EE package names to Jakarta EE package names cost nothing. Something in Liberty we call &quot;zero migration&quot;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Jakarta EE will only succeed if developers have a seamless transition from Java EE to Jakarta EE. I think there are four aspects to pulling off zero migration with a rename:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;Existing application binaries need to continue to work without change.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Existing application source needs to continue to work without change.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tools must be provided to quickly and easily change the import statements for Java source.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Applications that are making use of the new APIs must be able to call binaries that have not been updated.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The first two are trivial to do: Java class files have a constant pool that contains all the referenced class and method references. Updating the constant pool when the class is loaded will be technically easy, cheap at runtime, and safe. We are literally talking about changing &lt;code&gt;javax.servlet&lt;/code&gt; to &lt;code&gt;jakarta.servlet&lt;/code&gt;, no method changes.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The third one is also relatively simple; as long as class names do not change switching import statements from &lt;code&gt;javax.servlet.*&lt;/code&gt; to &lt;code&gt;jakarta.servlet.*&lt;/code&gt; is easy to automate.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The last one is the most difficult because you have existing binaries using the &lt;code&gt;javax.servlet&lt;/code&gt; package and new source using the  &lt;code&gt;jakarta.servlet&lt;/code&gt; package. Normally this would produce a compilation error because you cannot pass a &lt;code&gt;jakarta.servlet&lt;/code&gt; class somewhere that takes a &lt;code&gt;javax.servlet&lt;/code&gt; class. In theory we could reuse the approach used to support existing apps and apply it at compile time to the downstream dependencies, but this will depend on the build tools being able to support this behaviour. You could add something to the Maven build to run prior to compilation to make sure this works, but that might be too much work for some users to contemplate, and perhaps is not close enough to zero migration.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I think if the Jakarta EE community pulls together to deliver this kind of zero migration approach prior to making any break, the future will be bright for Jakarta EE. The discussion has already started on the jakarta-platform-dev mail list kicked off by &lt;a href=&quot;https://www.eclipse.org/lists/jakartaee-platform-dev/msg00029.html&quot;&gt;David Blevins&lt;/a&gt;. If you are not a member you can join now on &lt;a href=&quot;https://accounts.eclipse.org/mailing-list/jakartaee-platform-dev&quot;&gt;eclipse.org&lt;/a&gt;. I am also happy to hear your thought via &lt;a href=&quot;https://twitter.com/nottycode&quot;&gt;twitter&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;</description>        
        <pubDate>Wed, 08 May 2019 00:00:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2019/05/08/jakarta-ee-naming.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2019/05/08/jakarta-ee-naming
          
        </guid>
        
        <category>jakarta-ee</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>What's next for MicroProfile and Jakarta EE?</title>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This is one of the most common questions I get on forums, conferences---even internally at IBM.  Eclipse MicroProfile is fairly well-established with several key features and releases under its belt and the future of Java EE is now being established with Eclipse Jakarta EE.  When will these two forces combine?  This is a difficult question.  Hopefully this post will help explain the circumstances that must occur for this integration.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;microprofile&quot;&gt;MicroProfile&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;First, a brief history of the &lt;a href=&quot;https://microprofile.io/&quot;&gt;Eclipse MicroProfile&lt;/a&gt; project.  MicroProfile was created to extend the Enterprise Java environment for developing microservices.  We first selected the minimal three Java EE technologies that would provide a solid base for microservices development – CDI, JAX-RS, and JSON-P.  Since that initial release, we have added several other component features to further define the microservices programming model.  Our latest MicroProfile release has also included support for Java EE 8.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/MP-JavaEE8-diagram.png&quot; alt=&quot;MP JavaEE8 diagram&quot; width=&quot;Diagram of MicroProfile 2.0 components with support for Java EE 8.&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Each component release of MicroProfile is required to create a specification, an API, and a TCK (Test Compatibility Kit).  We also require at least one &quot;compatible implementation&quot;---an open-source implementation that successfully implements the specification, uses the API, and passes the TCK.  Periodically, these component features are collected into a higher-level, convenience release known as MicroProfile.  At this point in time, the MicroProfile &quot;platform&quot; releases do not define additional specifications, APIs, or TCKs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;jakarta-ee&quot;&gt;Jakarta EE&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let’s talk a bit about the &lt;a href=&quot;https://jakarta.ee/&quot;&gt;Eclipse Jakarta EE&lt;/a&gt; project and its current state of affairs.  As stated previously, Jakarta EE is the new home for the Java EE platform.  Oracle will continue to own everything associated with Java EE, up to and including Java EE 8.  All future development of this Enterprise Java environment after Java EE 8 will be done at Eclipse under the guidance of the Jakarta EE working group.  Fantastic progress is being made transferring the Java EE code base to Eclipse under the EE4J top-level project.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Some explanation for naming fans:  &lt;strong&gt;Jakarta EE&lt;/strong&gt; is the working group name at Eclipse, while &lt;a href=&quot;https://projects.eclipse.org/projects/ee4j&quot;&gt;&lt;strong&gt;EE4J&lt;/strong&gt;&lt;/a&gt; is the top-level project name for code and materials developed at Eclipse for Jakarta EE.  Many times, these two terms could be used synonymously but the brand name we use is Jakarta EE and code in the EE4J projects provide APIs, docs and implementations. It&amp;#8217;s intended that there will be multiple independent implementations of Jakarta EE across a variety of open source organizations and projects so the code projects at Eclipse are gathered under a project name, &lt;strong&gt;ee4j&lt;/strong&gt;, that is distinct from the brand name (Jakarta EE).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/blog/JakartaEEupdate.png&quot; alt=&quot;JakartaEEupdate&quot; width=&quot;Jakarta EE members and initial project proposals.&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A couple of things to note with this graphic&amp;#8230;&amp;#8203;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The large number of participating Strategic and Participating Members at the Eclipse Foundation.  No longer will the future of Enterprise Java lie with a single entity.  But, at the same time, notice that Oracle is very much participating in this consortium.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The progress we are making at &lt;a href=&quot;https://projects.eclipse.org/projects/ee4j/status.php&quot;&gt;transferring the source projects from Oracle to Eclipse&lt;/a&gt;.  The end goal (100%) is when a component completes a release using the Eclipse processes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Beyond the transferring of the code itself, Jakarta EE also needs the Java EE Specifications and TCKs.  Java EE (&lt;a href=&quot;https://jcp.org/en/home/index&quot;&gt;along with the JCP&lt;/a&gt;) defined standards for Enterprise Java.  In order to develop and maintain these standards, Eclipse must be able to define an appropriate specification process.  This effort is owned by the &lt;a href=&quot;https://accounts.eclipse.org/mailing-list/jakarta.ee-spec&quot;&gt;Jakarta EE Specification Committee&lt;/a&gt;.  An &lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jakarta.ee-wg/msg00107.html&quot;&gt;initial draft of the specification process&lt;/a&gt; has been distributed for review.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;At the same time, the compatibility process needs to be defined in order to protect the Jakarta EE brand.  There needs to be some expectations and rules put in place so that only &quot;approved&quot; implementations can proudly display the Jakarta EE logo on their product and web pages.  This approval process is tightly coupled with the specification process and is also owned by the Jakarta EE Specification Committee.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;imageblock text-center&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;img src=&quot;/img/logos/Jakarta_EE_logo.png&quot; alt=&quot;Jakarta EE logo&quot; width=&quot;Jakarta EE logo.&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;whats-next&quot;&gt;What&amp;#8217;s next?&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Both of these Eclipse projects have merit and are making progress in their respective domains, with MicroProfile technologies building upon those being contributed to Jakarta EE.  But are the projects themselves ready to be merged?  IMHO, no.  MicroProfile has grown tremendously from its humble beginnings.  We have several new component features and versions that extend the Enterprise Java programming model for microservices development.  And we have done this in a relatively short amount of time: Six major MicroProfile releases with sixteen component releases in less than two years.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Due to the enormity and complexities of this move, Jakarta EE is not yet ready to match this rate of progress.  And, as Jakarta EE has not yet completed the definition of its specification process, it is not yet ready to accept the fast-paced release cycle required by MicroProfile.  The big difference here is that MicroProfile has never tried to be &lt;a href=&quot;https://en.wikipedia.org/wiki/Standards_organization&quot;&gt;a standards body&lt;/a&gt;.  MicroProfile produces industry-accepted specifications, not standards.  Jakarta EE is trying to replace the JCP Standards body with a more modern, open, and lightweight &lt;em&gt;implementation-first&lt;/em&gt; process.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Until Jakarta EE has demonstrated a specification process that allows the rapid, innovative aspects of the MicroProfile project, MicroProfile will maintain its own project dynamics distinct from the EE4J projects.  MicroProfile can continue to iterate quickly in parallel to working with the Jakarta EE platform to adopt completed MicroProfile technologies into the next release of Jakarta EE. Over time, the need for this distinction is likely to reduce, especially as many of the same teams and people are involved with both projects.  Yours truly is one of the project leads for the MicroProfile project. I also participate on the EE4J PMC as well as the Jakarta EE Steering and Specification Committees.  We are working together to make this happen.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;baby-steps&quot;&gt;Baby steps&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the meantime, there are a few activities that are demonstrating the coming together of these two projects and technologies&amp;#8230;&amp;#8203;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The JAX-RS project under EE4J is actively investigating the possibility of incorporating the MicroProfile Rest Client effort in an upcoming release.  This is actually the way we wanted and expected the MicroProfile technologies to grow.  We would first rapidly innovate in the MicroProfile arena and, when it was ready, attempt to incorporate the features into the next iteration of the Enterprise Java offering.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In a similar vein, the MicroProfile Config component is actively working on a &lt;a href=&quot;https://www.jcp.org/en/jsr/detail?id=382&quot;&gt;Java EE Configuration API JSR&lt;/a&gt;.  This effort was kicked off before Oracle announced the decision to move Java EE to the Eclipse Foundation.  A couple of early drafts of their specification have been made available for review.  Depending on the success and timing of finalizing the Jakarta EE specification process, maybe this Configuration API JSR would migrate to this new process.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The reactive programming model effort will eventually target Jakarta EE.  The team from &lt;a href=&quot;https://www.lightbend.com/&quot;&gt;Lightbend&lt;/a&gt; was looking for the best way to incorporate some of their reactive programming ideas into the Enterprise Java space.  They determined that the &lt;a href=&quot;https://www.lightbend.com/blog/how-the-microprofile-community-will-shape-jakarta-ee&quot;&gt;quickest way to make some immediate progress was to develop a MicroProfile component&lt;/a&gt;.  But, their end game is to become part of Jakarta EE.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;imho&quot;&gt;IMHO&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In conclusion, I do need to emphasize that this post is my view of where we stand and what needs to be done to better integrate MicroProfile with Jakarta EE.  This is not a collective view of the MicroProfile community, although they were made aware of this pending article.  I do believe that eventually this merging of MicroProfile and Jakarta EE must and will happen.  It’s just a matter of timing.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Kevin is Eclipse MicroProfile co-lead and EE4J PMC member.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>        
        <pubDate>Thu, 16 Aug 2018 14:45:00 +0000</pubDate>
        <link>https://openliberty.io/blog/2018/08/16/whats-next-microprofile-jakartaee.html</link>
        <guid isPermaLink="true">
          
            https://openliberty.io/blog/2018/08/16/whats-next-microprofile-jakartaee
          
        </guid>
        
        <category>microprofile</category>
        
        <category>jakarta-ee</category>
        
        <category>java-ee</category>
        
        
        <category>blog</category>
        
      </item>
    

  </channel>
</rss>
