Open Liberty 23.0.0.3では、Jakarta EE 10, MicroProfile 6, および Java SE 20 のサポートが追加されました
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:
Check out previous Open Liberty GA release blog posts.
アプリケーションを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のダウンロードページからダウンロードしてください。
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 |
---|---|---|
新規 |
||
メジャー・アップデート |
||
メジャー・アップデート |
||
マイナー・アップデート |
||
マイナー・アップデート |
||
変更なし |
Jakarta EE Web Profile 10
Specification | Updates | Liberty Feature Documentation |
---|---|---|
新規 |
||
メジャー・アップデート |
||
メジャー・アップデート |
||
メジャー・アップデート |
||
メジャー・アップデート |
||
メジャー・アップデート |
||
メジャー・アップデート |
||
メジャー・アップデート |
||
メジャー・アップデート |
||
マイナー・アップデート |
||
マイナー・アップデート |
||
マイナー・アップデート |
||
変更なし |
||
変更なし |
なし |
|
変更なし |
||
変更なし |
||
変更なし |
なし (Javadoc) |
Jakarta EE Platform 10
Specification | Updates | Liberty Feature Documentation |
---|---|---|
メジャー・アップデート |
||
マイナー・アップデート |
||
マイナー・アップデート |
なし (Javadoc) |
|
マイナー・アップデート |
||
マイナー・アップデート |
||
マイナー・アップデート |
||
マイナー・アップデート |
||
変更なし |
||
XML Binding 4.0 (オプショナル) |
メジャー・アップデート |
|
XML Web Services 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 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を使用するには
-
Open Libertyのバージョン23.0.0.3を入手
-
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`の範囲が正しく受け入れられるようになりました。
-
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をお試しください!
Maven, Gradle, Docker, およびアーカイブのダウンロード経由でご利用いただけます。