back to all blogsすべてのブログ投稿を表示

Open Liberty 23.0.0.3では、Jakarta EE 10, MicroProfile 6, および Java SE 20 のサポートが追加されました

image of author image of author
Michal Broz and 田中 孝清 (翻訳) 2023年4月 4日
他言語版へのリンク: English , 简体中文 ,

Open Liberty 23.0.0.3は、この5年以上にリリースされたランタイムの中で、最も大きなリリースの1つです! このリリースには、Jakarta EE 10 Platform、Web Profile、そして今回初めてCore Profileが含まれています。それらのProfileを構成するほとんどの機能において、多くの新しい機能拡張が追加されています。

Jakarta EE Core Profile 10を含むMicroProfile 6も、23.0.0.3リリースで正式デビューを果たします。MicroProfile Telemetry 1.0の新機能のほか、Metrics、OpenAPI、JWT Authentication仕様のアップデートが含まれています。

本稿執筆時点の最新バージョンであるJava SE 20のサポートも23.0.0.3リリースで導入され、さまざまな新機能や変更が提供されています。また、このOpen Libertyリリースには、多くの注目すべきバグフィックスが含まれています。

In Open Liberty 23.0.0.3:

アプリケーションをLiberty23.0.0.3の上で動かしてみましょう

Mavenを使う時には下記の設定を使ってください。

<dependency>
    <groupId>io.openliberty</groupId>
    <artifactId>openliberty-runtime</artifactId>
    <version>23.0.0.3</version>
    <type>zip</type>
</dependency>

Gradleの場合は、下記の設定を使ってください。

dependencies {
    libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '[23.0.0.3,)'
}

コンテナイメージを使っているときは、下記のイメージを使ってください。

FROM icr.io/appcafe/open-liberty

または、Open Libertyのダウンロードページからダウンロードしてください。

Stack Overflowで質問する

Jakarta EE 10 Core プロファイル、 Web プロファイル、および Platform

Jakarta EE 10 Core Profile、Web Profile、PlatformがOpen Libertyで正式にサポートされました! まずは、様々なベータ版を通じてフィードバックをいただいた皆様に感謝申し上げます。

Jakarta EE 10は、大きな節目を迎えます。2017年のJava EE 8以来、仕様の更新を提供する最初のJakartaリリースであり、したがって、仕様がEclipse Foundationに引き継がれた後、仕様の更新を提供する最初のリリースとなります。既存の仕様の多くが更新され、Core Profileも導入されています。Core Profileは、Open Libertyのような、クラウドネイティブなJavaマイクロサービスの実行に最適化された軽量ランタイムを対象としています。

Jakarta PlatformとCoreプロファイル、Webプロファイルを構成するのは以下の仕様です:

Jakarta EE Core Profile 10

Specification Updates Liberty Feature Documentation

Context and Dependency Injection 4.0 Lite

新規

cdi-4.0

JSON Binding 3.0

メジャー・アップデート

jsonb-3.0

RESTful Web Services 3.1

メジャー・アップデート

restfulWS-3.1, restfulWSClient-3.1

JSON Processing 2.1

マイナー・アップデート

jsonp-2.1

Annotations 2.1 & Interceptors 2.1

マイナー・アップデート

cdi-4.0

Dependency Injection 2.0

変更なし

cdi-4.0

Jakarta EE Web Profile 10

Specification Updates Liberty Feature Documentation

Jakarta EE Core Profile 10

新規

See previous table

Authentication 3.0

メジャー・アップデート

appAuthentication-3.0

Context and Dependency Injection 4.0

メジャー・アップデート

cdi-4.0

Concurrency 3.0

メジャー・アップデート

concurrent-3.0

Expression Language 5.0

メジャー・アップデート

expressionLanguage-5.0

Faces 4.0

メジャー・アップデート

faces-4.0

Security 3.0

メジャー・アップデート

appSecurity-5.0

Servlet 6.0

メジャー・アップデート

servlet-6.0

Standard Tag Library 3.0

メジャー・アップデート

pages-3.1

Persistence 3.1

マイナー・アップデート

persistence-3.1

Server Pages 3.1

マイナー・アップデート

pages-3.1

WebSocket 2.1

マイナー・アップデート

websocket-2.1

Bean Validation 3.0

変更なし

beanValidation-3.0

Debugging Support for Other Languages 2.0

変更なし

なし

Enterprise Beans 4.0 Lite

変更なし

enterpriseBeansLite-4.0

Managed Beans 2.0

変更なし

managedBeans-2.0

Transactions 2.0

変更なし

なし (Javadoc)

Jakarta EE Platform 10

Specification Updates Liberty Feature Documentation

Jakarta EE Web Profile 10

メジャー・アップデート

See previous table

Authorization 2.1

マイナー・アップデート

appAuthorization-2.1

Activation 2.1

マイナー・アップデート

なし (Javadoc)

Batch 2.1

マイナー・アップデート

batch-2.1

Connectors 2.1

マイナー・アップデート

connectors-2.1

Mail 2.1

マイナー・アップデート

mail-2.1

Messaging 3.1

マイナー・アップデート

messaging-3.1

Enterprise Beans 4.0

変更なし

enterpriseBeans-4.0

XML Binding 4.0 (オプショナル)

メジャー・アップデート

xmlBinding-4.0

XML Web Services 4.0 (オプショナル)

メジャー・アップデート

xmlWS-4.0

Libertyは、含まれるコンポーネント仕様をまとめて有効にすることができる結合フィーチャー、Jakarta EE 10 Web Profile (webProfile-10.0) および Jakarta EE 10 Platform (jakartaee-10.0) を提供します。これらの結合フィーチャーにより、それぞれの仕様に含まれるすべてのAPIを使用したアプリケーションを迅速に開発することができます。Jakarta EE 10のアプリケーションクライアントのフィーチャーについては、jakartaeeClient-10.0 結合フィーチャーでまとめて有効にできます。

Jakarta EE Platform 10の全ての機能を有効にするには、`server.xml`ファイルに`jakartaee-10.0`フィーチャーを追加します:

  <featureManager>
    <feature>jakartaee-10.0</feature>
  </featureManager>

また、Jakarta EE Web Profile 10の全ての機能を有効にするには、`server.xml`ファイルに`webProfile-10.0`フィーチャーを追加します:

  <featureManager>
    <feature>webProfile-10.0</feature>
  </featureManager>

Core Profileには結合フィーチャーは存在しませんが、以下のフィーチャーを`server.xml`ファイルに追加することで、同等の機能を有効にすることができます:

  <featureManager>
    <feature>jsonb-3.0</feature>
    <feature>jsonp-2.1</feature>
    <feature>cdi-4.0</feature>
    <feature>restfulWS-3.1</feature>
  </featureManager>

アプリケーション・クライアント・コンテナ上でJakarta EE 10の機能を実行するには、アプリケーションの`client.xml`ファイルに以下のエントリーを追加します:

  <featureManager>
    <feature>jakartaeeClient-10.0</feature>
  </featureManager>

各使用の詳細についてはこちらを参照ください:

MicroProfile 6.0

MicroProfileは、業界がJavaマイクロサービスを最適化する方法を革新し続けます。MicroProfile 6.0リリースにより、アプリケーションはMicroProfile APIとJakarta EE Core Profile 10、およびその他のさまざまな新機能や改良を組み合わせて使用できるようになりました。MicroProfile 6.0は、以下の仕様で構成されています:

Specification Updates Liberty Feature Documentation

MicroProfile Telemetry 1.0

新規

mpTelemetry-1.0

MicroProfile Metrics 5.0

メジャー・アップデート

mpMetrics-5.0

MicroProfile OpenAPI 3.1

マイナー・アップデート

mpOpenAPI-3.1

MicroProfile JWT Authentication 2.1

マイナー・アップデート

mpJwt-2.1

MicroProfile Config 3.0

変更なし

mpConfig-3.0

MicroProfile Health 4.0

変更なし

mpHealth-4.0

MicroProfile Rest Client 3.0

変更なし

mpRestClient-3.0

MicroProfile Fault Tolerance 4.0

変更なし

mpFaultTolerance-4.0

Jakarta EE Core Profile 10

新規

See Core Profile table

MicroProfile 6の全ての機能を有効にするには、`server.xml`ファイルに`microProfile-6.0`フィーチャーを追加します:

  <featureManager>
    <feature>microProfile-6.0</feature>
  </featureManager>

詳細については、MicroProfile 6.0の 仕様, リリース情報, Javadoc, および MicroProfile 5.0から6.0の変更点 を参照してください。

Support for Java SE 20

Java 20は、以下の新機能や変更を含んでいます。

Java 20を使用するには

  1. Open Libertyのバージョン23.0.0.3を入手

  1. Liberty環境の server.env ファイル を編集し、JAVA_HOME 環境変数にJava 20の導入ディレクトリを指定

Java 20の詳細については、Java 20の リリースノートAPI Javadocダウンロードページ および Java 20マイグレーションガイド を参照してください。

Open LibertyでJava 20のプレビュー機能を試すには、アプリケーションのコンパイル時に`--enable-preview`オプションを指定し、Libertyの`jvm.options`ファイルにも同オプションを指定する必要があります。

このリリースでの重要なバグの修正

私たちは、バグの修正に時間を費やしてきました。以下のセクションでは、このリリースで解決された問題の一部について説明します。修正された全ての問題は、list of bugs fixed in 23.0.0.3を参照してください。

  • リボケーションを有効にしたさい、AcmeCA featureの初期化が特定のOSとJDKの組み合わせで失敗することがある

    IBM JDK8を搭載したMacOS用JDKと、証明書の失効チェックを有効にした自動証明書管理環境(ACME)サポート2.0機能を組み合わせて実行すると、SSL/TLSエンドポイントの初期化が完了せず、トラフィックに使用できなくなることがあります。

    初期化フローで失敗したことを示す、以下の`NullPointerException`がFFDCに記録されます:

    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)
    ....

    この問題は解決され、エンドポイントは正常に初期化され、トラフィックをサービスすることができるようになりました。

  • CDI Injected Eventのデシリアライズ時に発生するClassCastExceptionを修正

    注入されたjakarta.enterprise.event.Event(またはjavaxの同等クラス)を持つ永続(すなわちシリアライズ可能)Beanが、適切に復元されない。これは、セッションの永続性が有効で、セッションデータがデータベースからシリアライズおよびデシリアライズされる場合に発生する可能性があります。これにより、以下のFFDCが発生します:

    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)

    この問題は解決され、CDIイベントオブジェクトはエラーなく復元されます。

  • JDBC DB2のqueryDataSizeの値の制限を更新

    DB2 DataSource の queryDataSize を DB2 11.5.7 移行で有効な値に設定すると、次のエラーが発生します:

    [ERROR   ] CWWKG0075E: The value 10452991 is not valid for attribute `queryDataSize` of configuration element dataSource. The validation message was: Value "10452991" is out of range..

    この問題は解決され、新しい`queryDataSize`の範囲が正しく受け入れられるようになりました。

  • Libertyサーバーがランダムにハングアップする

    OpenJ9のバグが原因で、JAX-RS使用時にLibertyサーバーがデッドロックでハングアップすることがあります。例えば、以下のようなスタックトレースです:

    2LKMONINUSE      sys_mon_t:0x00007FCE3C16F258 infl_mon_t: 0x00007FCE3C16F2D8:
    3LKMONOBJECT       org/apache/cxf/jaxrs/interceptor/CachedTime@0x00000000FBF1D0C8: Flat locked by "Default Executor-thread-8" (J9VMThread:0x0000000001B4BF00), entry count 1
    3LKWAITERQ            Waiting to enter:
    3LKWAITER                "Default Executor-thread-1" (J9VMThread:0x00000000006EB200)
    3LKWAITER                "Default Executor-thread-3" (J9VMThread:0x0000000000718D00)
    3LKWAITER                "Default Executor-thread-17" (J9VMThread:0x0000000002644B00)
    3LKWAITER                "Default Executor-thread-19" (J9VMThread:0x0000000000346F00)
    3LKWAITER                "Default Executor-thread-20" (J9VMThread:0x0000000000618300)
    3LKWAITER                "Default Executor-thread-29" (J9VMThread:0x0000000002645700)
    3LKWAITER                "Default Executor-thread-30" (J9VMThread:0x0000000002643F00)
    3LKWAITER                "Default Executor-thread-39" (J9VMThread:0x00000000022FF900)
    3LKWAITER                "Default Executor-thread-40" (J9VMThread:0x00000000022DAA00)
    3LKWAITER                "Default Executor-thread-49" (J9VMThread:0x000000000216DE00)
    3LKWAITER                "Default Executor-thread-50" (J9VMThread:0x00000000022FED00)
    3LKWAITER                "Default Executor-thread-59" (J9VMThread:0x0000000001B74900)
    3LKWAITER                "Default Executor-thread-60" (J9VMThread:0x0000000002178F00)
    3LKWAITER                "Default Executor-thread-62" (J9VMThread:0x0000000001B72300)
    
    "Default Executor-thread-8" 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="Application"
    Blocked on: java/lang/StringBuffer@0x00000000FBF99F10 Owned by: "Default Executor-thread-1" (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)

    Libertyでは、CXFの`CachedTime`クラスから`SimpleDateFormat`の使用を削除することでこの問題を緩和し、デッドブロックが発生しないようにしました。

今すぐOpen Liberty 23.0.0.3をお試しください!